Работает ли trim в raid

Обновлено: 01.07.2024

Команда обрезки (известная как TRIM в наборе команд ATA и UNMAP в наборе команд SCSI ) позволяет операционной системе сообщать твердотельному накопителю (SSD), какие блоки данных больше не считаются `` используемыми '' и поэтому можно стереть внутри.

Trim был представлен вскоре после того, как были представлены твердотельные накопители. Поскольку низкоуровневая работа твердотельных накопителей значительно отличается от жестких дисков, типичный способ, которым операционные системы обрабатывают такие операции, как удаление и форматирование, привел к непредвиденному прогрессивному снижению производительности операций записи на твердотельные накопители. Обрезка позволяет SSD более эффективно обрабатывать сборку мусора , что в противном случае замедлит будущие операции записи в задействованные блоки.

Хотя инструменты для «сброса» некоторых дисков в новое состояние уже были доступны до введения обрезки, они также удаляют все данные на диске, что делает их непрактичным использование для текущей оптимизации. К 2014 году многие твердотельные накопители имели внутренние механизмы фоновой сборки мусора, которые работали независимо от обрезки. Хотя это успешно поддерживало их производительность даже в операционных системах, которые не поддерживали обрезку, у него были связанные с этим недостатки в виде повышенного усиления записи и износа ячеек флэш-памяти.

TRIM также широко используется на жестких дисках с черепичной магнитной записью (SMR).

СОДЕРЖАНИЕ

Из-за того, как многие файловые системы обрабатывают операции удаления, помечая блоки данных как "неиспользуемые", носители данных (твердотельные накопители, но также и традиционные жесткие диски) обычно не знают, какие сектора / страницы действительно используются, а какие могут быть считается свободным местом. В отличие от (например) операции перезаписи, удаление не будет включать физическую запись в секторы, содержащие данные. Поскольку обычный SSD не знает структуры файловой системы, включая список неиспользуемых блоков / секторов, носитель данных не знает, что блоки стали доступными. В то время как это часто позволяет Undelete инструмент для восстановления файлов из электромеханических жестких дисков , несмотря на файлы, о которых сообщают как «удаленные» операционной системы, это также означает , что , когда операционная система позже выполняет операцию записи в один из секторов, которые он считает свободного места, это фактически становится операцией перезаписи с точки зрения носителя данных. Для магнитных дисков перезапись существующих данных ничем не отличается от записи в пустой сектор, но из-за того, что некоторые твердотельные накопители работают на самом низком уровне, перезапись приводит к значительным накладным расходам по сравнению с записью данных на пустую страницу, что потенциально снижает производительность записи.

Твердотельные накопители хранят данные в ячейках флэш-памяти, которые сгруппированы в страницы обычно размером от 4 до 16 КБ , сгруппированных вместе в блоки размером обычно от 128 до 512 страниц. Пример: блоки по 512 кБ, которые группируют 128 страниц по 4 кБ каждая. Ячейки флэш-памяти NAND могут быть записаны напрямую, только когда они пусты. Если они содержат данные, их содержимое необходимо стереть перед операцией записи. Операция записи SSD может выполняться на одной странице, но из-за аппаратных ограничений команды стирания всегда влияют на целые блоки; следовательно, запись данных на пустые страницы на SSD происходит очень быстро, но значительно замедляется, если ранее записанные страницы необходимо перезаписать. Поскольку перед повторной записью требуется стирание ячеек на странице, но могут быть удалены только целые блоки, перезапись инициирует цикл чтения-стирания-изменения-записи: содержимое всего блока сохраняется в cache, затем весь блок стирается с SSD, затем перезаписанные страницы записываются в кэшированный блок, и только после этого весь обновленный блок может быть записан на флэш-носитель. Это явление известно как усиление записи .

Операция

Команда TRIM позволяет операционной системе уведомлять SSD о страницах, которые больше не содержат действительных данных. Для операции удаления файла операционная система пометит секторы файла как свободные для новых данных, а затем отправит команду TRIM на SSD. После обрезки SSD не сохранит содержимое блока при записи новых данных на страницу флэш-памяти, что приведет к меньшему усилению записи (меньшему количеству записей), более высокой пропускной способности записи (нет необходимости в последовательности чтения-стирания-изменения), таким образом увеличивая срок службы привода.

Различные твердотельные накопители реализуют команду по-разному, поэтому производительность может отличаться.

TRIM сообщает SSD, чтобы он пометил регион LBA как недопустимый, и последующие чтения из этого региона не вернут какие-либо значимые данные. В течение очень короткого времени данные все еще могут находиться на флеш-памяти внутри. Однако после выполнения команды TRIM и выполнения сборки мусора маловероятно, что даже судебно-медицинский эксперт сможет восстановить данные.

Реализация

Поддержка операционной системы

Команда TRIM полезна только в том случае, если диск реализует ее и ее запрашивает операционная система. В таблице ниже указаны все известные операционные системы и первая версия, поддерживающая команду. Кроме того, старые твердотельные накопители, разработанные до добавления команды TRIM в стандарт ATA, потребуют обновления прошивки, в противном случае новая команда будет проигнорирована. Однако не каждый привод можно модернизировать для поддержки обрезки.

Поддержка TRIM также зависит от того, на что способен конкретный драйвер файловой системы в операционной системе, поскольку только программа с пониманием того, какие части диска являются свободными, может безопасно выполнить команду, а на системном уровне эта способность имеет тенденцию лежать в самом драйвере файловой системы.

Не все файловые системы используют обрезку. К файловым системам, которые могут автоматически выдавать запросы на обрезку, относятся ext4 , Btrfs , FAT , GFS2 , JFS , XFS и NTFS-3G . Однако в некоторых дистрибутивах это отключено по умолчанию из-за проблем с производительностью в пользу обрезки по расписанию на поддерживаемых твердотельных накопителях. Ext3 , NILFS2 и OCFS2 предлагают ioctl для выполнения обрезки в автономном режиме. Спецификация TRIM требует поддержки списка диапазонов обрезки, но начиная с ядра 3.0 обрезка вызывается только для одного диапазона, который работает медленнее.

Во многих новых дистрибутивах Linux , то Systemd обеспечивает fstrim.timer блок, что позволяет fstrim.timer причинит fstrim.service выполнять еженедельно.

Известно, что TRIM поддерживается для ReFS и NTFS , оба из которых реализуют переключатель DisableDeleteNotify для его отключения. Источники не согласны с тем, существует ли поддержка TRIM для других файловых систем.

Проблемы с RAID

По состоянию на январь 2017 года поддержка команды TRIM не реализована в большинстве аппаратных технологий RAID . Однако реализации программного RAID часто включают поддержку TRIM.

Windows 10 предлагает поддержку TRIM в томах SSD RAID с использованием параметра «оптимизировать диски» при настройке тома RAID.

macOS

Драйвер macOS RAID не поддерживает TRIM. Это верно для всех версий Mac OS X от 10.7 до macOS 10.12.x.

TRIM поддерживается для томов RAID (0,1,4,5 и 10) при использовании стороннего приложения SoftRAID®, включая поддержку TRIM с устройствами SSD сторонних производителей. (Примечание: TRIM для устройств SSD сторонних производителей должен быть специально включен с помощью команды терминала "sudo trimforce enable")

Linux

TRIM доступен с томами RAID в выпусках ядра Linux dmraid после января 2011 года , который реализует поддержку «поддельного аппаратного RAID» с помощью BIOS и который теперь проходит через любые запросы TRIM от файловой системы, которая находится на массиве RAID.

Не путать с dmraid, универсальная программная RAID-система Linux , mdraid , имеет экспериментальную поддержку пакетной (а не активной , при удалении файла ) TRIM на массивах RAID 1, когда системы настроены на периодический запуск утилиты mdtrim в файловых системах. (даже такие, как ext3 без встроенной поддержки TRIM). В более поздних версиях Linux, например Red Hat Enterprise Linux 6.5 и выше, mdraid поддерживает фактическую передачу команд TRIM в реальном времени, а не просто как пакетное задание.

Однако Red Hat не рекомендует использовать программные уровни RAID 1, 4, 5 и 6 на твердотельных накопителях с большинством технологий RAID, поскольку во время инициализации большинство утилит управления RAID (например, Linux mdadm ) записывают данные во все блоки на устройствах, чтобы гарантировать, что контрольные суммы ( или проверка «диск-диск», в случае RAID 1 и 10) работают правильно, заставляя SSD полагать, что все блоки, кроме резервной области, используются, что значительно снижает производительность.

С другой стороны, Red Hat рекомендует использовать RAID 1 или RAID 10 для LVM RAID на твердотельных накопителях, поскольку эти уровни поддерживают TRIM («сброс» в терминологии Linux), а утилиты LVM не записывают данные во все блоки при создании Том RAID 1 или RAID 10.

В течение короткого времени в марте 2010 года пользователи были убеждены, что драйверы Intel Rapid Storage Technology (RST) 9.6 поддерживают TRIM на томах RAID, но позже Intel пояснила, что TRIM поддерживался в настройках BIOS для режимов AHCI и RAID, но нет, если диск был частью тома RAID.

По состоянию на август 2012 года Intel подтверждает, что наборы микросхем серии 7 с драйверами Rapid Storage Technology (RST) 11.2 поддерживают TRIM для RAID 0 в Microsoft Windows 7. Хотя Intel не подтвердила поддержку наборов микросхем серии 6, TRIM на томах RAID 0 был показано энтузиастами аппаратного обеспечения для работы на чипсетах Z68, P67 и X79 с модифицированным дополнительным ПЗУ RAID . Предполагается, что отсутствие официальной поддержки чипсетов 6-й серии связано с затратами на проверку или попыткой побудить потребителей к обновлению, а не по техническим причинам.

Исключением из необходимости модифицированного дополнительного ПЗУ на материнских платах с набором микросхем X79 является добавление производителем переключателя ПЗУ; это влечет за собой нахождение как RST, так и RST-E ROM внутри BIOS / UEFI. Это позволяет использовать RST ROM вместо RST-E ROM, позволяя TRIM функционировать. Intel отмечает, что наилучшей производительности можно добиться, используя драйвер той же версии, что и ПЗУ; например, если BIOS / UEFI имеет дополнительное ПЗУ 11.0.0.0m, следует использовать драйвер версии 11.x.

Включение неподдерживаемых файловых систем

Если файловая система не поддерживает TRIM автоматически, некоторые утилиты могут отправлять команды обрезки вручную. Обычно они определяют, какие блоки свободны, а затем передают этот список в виде серии команд обрезки на привод. Эти утилиты доступны от различных производителей (например, Intel, G.Skill) или как общие утилиты (например, Linux hdparm "wiper", начиная с версии 9.17, или mdtrim, как упоминалось выше ). И hdparm, и mdtrim находят свободные блоки, выделяя большой файл в файловой системе и определяя, какому физическому расположению он был назначен.

В любой операционной системе накопитель может определять, когда компьютер записывает все нули в блок, и освобождать (обрезать) этот блок вместо записи блока нулей. Если чтение освобожденного блока всегда возвращает нули, этот ярлык прозрачен для пользователя, за исключением более быстрой записи (и чтения) нулевых блоков, в дополнение к обычному преимуществу более быстрой записи в неиспользуемые области. Операционные системы не записывают все нули, чтобы «стереть» файлы или свободное пространство, но некоторые утилиты это делают.

Аппаратная поддержка

Спецификация команды TRIM была стандартизирована как часть стандарта интерфейса AT Attachment (ATA) под руководством Технического комитета T13 Международного комитета по стандартам информационных технологий (INCITS). TRIM реализуется командой DATA SET MANAGEMENT (код операции 06h) проекта спецификации ACS-2. Стандарт ATA поддерживается как параллельным (IDE, PATA), так и последовательным (SATA) оборудованием ATA.

Существуют различные типы TRIM, определяемые словами SATA 69 и 169, возвращаемыми командой ATA IDENTIFY DEVICE:

  • Недетерминированный TRIM: каждая команда чтения по адресу логического блока (LBA) после TRIM может возвращать разные данные.
  • Детерминированная TRIM (DRAT): все команды чтения LBA после TRIM должны возвращать одни и те же данные или становиться детерминированными.
  • Детерминированный ноль чтения после TRIM (RZAT): все команды чтения LBA после TRIM должны возвращать ноль.

В слове SATA 105 содержится дополнительная информация, которая описывает максимальное количество 512-байтовых блоков на команду DATA SET MANAGEMENT, которую может поддерживать диск. Обычно это значение по умолчанию составляет 8 (или 4 КБ), но многие диски уменьшают это значение до 1, чтобы соответствовать требованиям к оборудованию Microsoft Windows для TRIM, время выполнения этой команды не должно превышать 20 мс или 8 мс × (количество записей диапазона LBA), в зависимости от того, что больше и всегда должно быть меньше 600 мс.

Отдельный диапазон LBA называется записью диапазона LBA и представлен восемью байтами. LBA выражается первыми шестью байтами записи диапазона LBA, а длина диапазона - это счетчик с отсчетом от нуля (например, 0 = 0 и 1 = 1), представленный оставшимися двумя байтами. Если длина двухбайтового диапазона равна нулю, то запись диапазона LBA должна быть отброшена как заполнение. Это означает, что для каждого 512-байтового блока диапазонов TRIM, поддерживаемых устройством, максимум составляет 64 диапазона по 32 МБ или 2 ГБ. Если устройство поддерживает SATA Word 105 на 8, то оно должно иметь возможность обрезать 16 ГБ с помощью одной команды TRIM (УПРАВЛЕНИЕ НАБОРОМ ДАННЫХ).

SCSI предоставляет команду UNMAP (полный аналог TRIM) и команду WRITE SAME (варианты 10 и 16) с установленным флагом UNMAP.

SD / MMC

Команда MultiMediaCard и SD ERASE (CMD38) обеспечивает аналогичные функции с командой ATA TRIM, хотя требует, чтобы стертые блоки перезаписывались нулями или единицами. eMMC 4.5 дополнительно определяет подоперацию «отбрасывать», которая более точно соответствует ATA TRIM в том смысле, что содержимое отброшенных блоков может считаться неопределенным (т. е. «безразлично»).

NVM Express

В наборе команд NVM Express есть общая команда управления набором данных , которая указывает на намерение хоста для устройства хранения в наборе диапазонов блоков. Одна из его операций, deallocate, выполняет обрезку. Он также имеет команду Write Zeroes, которая дает подсказку об освобождении и позволяет диску обрезать и возвращать нули.

Недостатки

  • Некоторые схемы шифрования, которые можно отрицать, заставляют весь диск выглядеть как случайный мусор. Использование TRIM устраняет этот уровень правдоподобного отрицания, поскольку созданные блоки «все нули» (или «все единицы») легко указывают, какие блоки используются. Утверждалось, что отключение TRIM тоже может быть подозрительным.
  • Исходная версия команды TRIM была определена подкомитетом T13 как команда, не поставленная в очередь , и, следовательно, при неосторожном использовании, например, при отправке после каждой команды удаления файловой системы, она может повлечь за собой серьезные штрафы за выполнение. Не ставящая в очередь природа команды требует, чтобы драйвер сначала дождался завершения всех невыполненных команд, выдал команду TRIM, а затем возобновил обычные команды. TRIM может занять много времени, в зависимости от прошивки на SSD, и может даже запустить цикл сборки мусора . Этот штраф можно минимизировать в решениях, которые периодически выполняют пакетную TRIM вместо обрезки при каждом удалении файла , путем планирования таких пакетных заданий на периоды, когда загрузка системы минимальна. Этот недостаток TRIM был преодолен в версии 3.1 Serial ATA с введением команды TRIM в очереди.
  • Неисправная прошивка накопителя, которая неверно сообщает о поддержке TRIM в очереди или имеет критические ошибки в ее реализации, была связана с серьезным повреждением данных на нескольких устройствах, в первую очередь Micron и Crucial M500 и Samsung 840 и 850 серии. Повреждение данных было подтверждено в операционной системе Linux (единственная ОС с поддержкой очереди обрезки по состоянию на 1 июля 2015 года).

Эти устройства занесены в черный список в файле libata-core.c ядра Linux, чтобы принудительно отправлять на эти диски не поставленные в очередь команды TRIM ( ATA_HORKAGE_NO_NCQ_TRIM ) вместо помещенных в очередь команд TRIM:

  • Micron / Crucial M500 с использованием всех версий прошивки, включая повторно сертифицированные заводские твердотельные накопители
  • Micron M510 с версией прошивки MU01
  • Micron / Crucial M550 с версией прошивки MU01
  • Crucial MX100 с версией прошивки MU01
  • SSD-накопители Samsung серий 840 и 850 со всеми версиями прошивки

Этот файл также помещает SuperSSpeed ​​S238 в черный список для TRIM в целом из-за того, что неправильные блоки теряют данные при выдаче TRIM.

libata-core.c также имеет белый список для перечисления твердотельных накопителей, которые надежно известны специалистам по обслуживанию подсистемы, чтобы правильно реализовать флаги DRAT и RZAT ( ATA_HORKAGE_ZERO_AFTER_TRIM ), а не игнорировать их, как это делают многие диски. В белый список включены следующие диски:

Можно ли эффективно использовать SSD без поддержки TRIM?

Вынесенный нами в заголовок вопрос довольно часто занимает умы системных администраторов. Действительно, что лучше, собрать из твердотельных дисков RAID массив, но потерять поддержку TRIM, или отказаться от отказоустойчивости в пользу высокой производительности? Ситуация усугубляется еще и тем, что немногие реально представляют себе механизмы внутренней работы SSD и ориентируются более на маркетинговые материалы, чем на реальную техническую необходимость.

Основной миф касательно SSD таков: на системах без поддержки TRIM производительность SSD будет стремительно деградировать. Почему и как это происходит обычно не сообщается, без TRIM будет плохо и точка. В тоже время большинство серверных конфигураций дисковой подсистемы TRIM не поддерживают, либо поддерживают, но в очень ограниченном объеме. При этом некоторую странность вызывает то, что ни производители железа, ни производители софта не спешат с этой "проблемой" что-либо делать.

Чтобы понять, для чего нужен TRIM и что это, раздутый маркетологами термин или насущная необходимость, разберемся как работает SSD. Мы не будем вдаваться в технические подробности и сознательно упростим модель до уровня достаточного для понимания происходящих процессов.

Первоначально вспомним, как воспринимают диск разные подсистемы ПК, участвующие в работе с ним. Приложения и ОС взаимодействуют с файловой системой, работая на уровне кластеров и таблицы файлов. О том, что находится ниже ОС не имеет никакого представления. Файловая система воспринимает диск как некоторое блочное устройство стандартного формата, также не сильно вникая в его внутреннюю суть, отдавая все вопросы на откуп драйверу контроллера запоминающих устройств. Тот, в свою очередь, воспринимает диск как некоторое LBA-устройство, не зная его внутренней структуры. О том, как именно конфигурация LBA соответствует физической конфигурации устройства знает только контроллер диска, который в свою очередь не имеет ни малейшего представления о файлах, разделах, кластерах и т.п.

Физически пространство SSD делится на страницы, которые являются минимально адресуемым участком памяти, для того, чтобы изменить ячейку памяти, необходимо считать страницу, изменить в ней необходимые данные и записать ее на прежнее место. Здесь возникает первая сложность, в отличие от HDD, в SSD писать можно только в заранее очищенные ячейки. При этом технически очистить отдельную страницу нельзя, очистке подвергаются только группы страниц, объединяемые в блоки.

Размеры страниц и блоков зависят от конфигурации памяти конкретного SSD, но, как типичное, можно принять значение 4 КБ для страницы и 512 КБ для блока. А теперь представим, что мы открыли файл и изменили в нем 100 байт данных. Для HDD проблемы нет, он считает нужный сектор (512 байт), изменит данные и перезапишет его. В реальности будет все немного по-другому, так как минимально адресуемым пространством ФС является кластер, то HDD перезапишет соответствующее количество секторов, но никаких дополнительных накладных расходов это не вызовет.

А вот SSD не может взять и просто так записать измененные данные. Для этого ему потребуется считать куда-то весь блок, очистить его и вернуть все данные назад. Поэтому вместо изменения и записи 4 КБ данных SSD придется записать 512 КБ данных, что не самым лучшим образом скажется на ресурсе ячеек. Кроме того, операция стирания ячеек достаточно медленная, по сравнению с записью в чистые ячейки и именно необходимостью стирания перед записью объясняется деградация производительности SSD.

Чтобы решить эту проблему в SSD применяется алгоритм "копирование при записи". Суть его заключается в следующем: при необходимости записи уже существующей страницы, она копируется в свободные ячейки, а сама помечается как доступная к очистке.

ssd-garbage-collection-001.jpg

Это позволяет SSD сразу записывать измененные данные, не вызывая каждый раз процедуру очистки и не перезаписывая остальные данные блока. Это будет продолжаться до тех пор, пока не кончатся свободные ячейки.

Несложно заметить, что через некоторое время на диске вперемешку окажутся свободные, занятые и доступные к очистке страницы. Здесь вступает в действие алгоритм внутренней оптимизации, именуемый "сборкой мусора". Он перемещает данные на SSD таким образом, чтобы сгруппировать доступные к очистке страницы в отдельные блоки и очистить их.

ssd-garbage-collection-002.jpg

Именно от эффективности данного механизма зависит, как долго диск сможет поддерживать высокую производительность при интенсивной записи на него. Основное условие высокой скорости записи на SSD - это наличие свободных ячеек. Эффективность алгоритма уборки мусора отвечает за то, как быстро доступные к очистке ячейки будут становиться свободными.

Из-за чего наступает деградация? От того, что свободные ячейки кончаются, например, мы полностью заполнили пространство диска. В этом случае у SSD все равно остается пространство для маневра в виде резервной области, которая предназначена для замены вышедших из строя ячеек, но достаточного количества свободных страниц может не оказаться и там. Вопреки еще одному расхожему мнению, резервная область SSD используется всегда, это делается в целях выравнивания нагрузки, просто она недоступна для размещения пользовательских данных.

Если размер резервной области небольшой, а интенсивность записи высокая, то сборщик мусора будет не успевать эффективно очищать блоки, и мы получим деградацию производительности диска.

Заметьте, мы до сих пор ни словом не обмолвились о команде TRIM. Может быть это какая-то передовая технология, включение которой поможет резко изменить ситуацию? К сожалению - нет! Для чего тогда нужен TRIM?

Снова самое время вспомнить, что файловая система не имеет не малейшего представления о физическом размещении данных на носителе, это прерогатива контроллера диска. Поэтому удаление файла в современных файловых системах физически не происходит, удаляется только запись в таблице файлов, после чего данное место считается свободным. При этом сами данные будут находится на диске до тех пор, пока не будут перезаписаны. При этом файловая система никак не сообщает контроллеру о таких данных, и он продолжает считать эти ячейки занятыми. У SSD это приведет к ситуации аналогичной тому, когда диск полностью заполнен, хотя с точки зрения ФС там много свободного места и она будет пытаться писать туда.

В этом случае SSD будет полностью считывать блок в память, очищать его и заново записывать измененные данные.

ssd-garbage-collection-003.jpg

А как же технология сборки мусора? А никак, потому что убирать ей нечего. Эти ячейки свободны только с точки зрения файловой системы, с точки зрения контроллера диска в них записаны данные. Понять, что эту страницу можно очищать диск сможет только тогда, когда система попытается туда что-либо записать, а для того, чтобы быстро выполнить запись нужны свободные ячейки.

Для того, чтобы файловая система сообщила контроллеру, что эти данные удалены и придумали команду TRIM, ее задача - пометить страницы с удаленными данными как доступные к очистке, а дальше в дело вступит все тот-же сборщик мусора.

Таким образом команда TRIM никак не влияет на производительность SSD, если вы заполнили диск практически полностью, то получите деградацию производительности что с поддержкой TRIM, что без. Если вы удалите файлы и даже принудительно пошлете команду TRIM - чуда не произойдет, производительность будет оставаться низкой до тех пор, пока сборщик мусора не очистит достаточно свободных ячеек.

Если мы разместим на SSD базу данных или виртуальный жесткий диск и будем активно работать с ними, то никакой TRIM нам не нужен. Если на диске достаточно свободных ячеек и эффективно работает сборщик мусора - производительность будет поддерживаться на высоком уровне. Падение производительности произойдет только тогда, когда количество свободных ячеек уменьшится и сборщик мусора не будет успевать очищать их в необходимых количествах. Это может произойти при использовании всего доступного пространства диска и TRIM на это никак повлиять не может.

Команда TRIM, в первую очередь, предназначена для настольных систем и системных разделов, где файлы активно создаются и удаляются, в большинстве серверных сценариев, где идет изменение уже записанных данных, необходимости в ней нет.

Здесь самое время вспомнить про корпоративные серии SSD, которые зачастую не блещут производительностью, но зато предлагают высокую надежность и поддерживают эффективную работу даже без поддержки TRIM. За счет чего это происходит? За счет большего размера резервной области. Это позволяет всегда иметь достаточный запас свободных ячеек и благотворно сказывается на эффективности работы сборщика мусора. Так как пользователь не может непосредственно писать в резервную область, то в ней могут быть страницы только трех видов: свободные, занятые и доступные к очистке. Занятых страниц, которые ФС считает свободными, там быть не может.

Обычные SSD имеют размер резервной области в 6-7% от емкости диска, этого размера явно недостаточно для поддержания высокой производительности, корпоративные диски имеют гораздо больший объем резервной области, что напрямую сказывается на их стоимости. Это позволяет им уменьшить износ каждой доступной пользователю ячейки и эффективно работать в RAID-массивах без поддержки TRIM. Хотя если вы заполните твердотельный накопитель "под завязку", то никакой TRIM вам не поможет.

А что делать владельцам обычных или "корпоративных" бюджетных дисков? Ответ прост - обеспечить диск достаточным количеством свободных ячеек. Самый простой способ сделать это - разметить не всю доступную емкость диска. Как показывает практика - резерв в 20-25% емкости накопителя позволяет эффективно использовать даже полностью заполненный диск без поддержки команды TRIM.

Чтобы убедиться в этом, мы провели небольшой эксперимент. Взяли старый SSD OCZ Agility 2 <OCZSSD2-2AGTE60G>, алгоритмы уборщика мусора которого в разы уступают современным алгоритмам, полностью заполнили его на системе без поддержки TRIM, затем еще раз сделали тоже самое, только создав "резервную область" в 25% емкости накопителя.

Итак, диск очищен при помощи команды Secure Erase фирменной утилитой и все его ячейки являются свободными. Снимаем показатели быстродействия при помощи AS SSD Benchmark.

ssd-garbage-collection-004.jpg

Сценарии реального использования:

ssd-garbage-collection-005.jpg

Производительность данного SSD, по современным меркам, конечно невелика, но нас интересуют не абсолютные числа, а сохранение производительности при работе в тяжелых условиях, в этом случае использование старой модели даже интереснее, если справится она, то современные диски, с более совершенными алгоритмами уборки мусора, справятся тем более.

После чего мы подключили его к виртуалке под управлением Windows Server 2003 и полностью заполнили, затем удалили все данные и вернули назад. Несмотря на то, что Windows 8.1, в которой мы производим замеры, есть поддержка TRIM - это ни на что не влияет, так как принудительно данную команду никто не посылал, а Windows 8.1 сделает это не раньше, чем запишет и удалит данные и то, только для этих страниц.

Деградация производительности на лицо:

ssd-garbage-collection-006.jpg

Проседание производительности от 20 до 50% в синтетике и 30-35% в сценариях:

ssd-garbage-collection-007.jpg

Теперь снова выполним Secure Erase и разметим не все пространство диска, выделив под резерв 25%:

ssd-garbage-collection-008.jpg

Важно! Перед тем как переразметить твердотельный диск его следует полностью очистить от данных при помощи фирменной утилиты для того, чтобы в резервную область попали только свободные ячейки. Если просто удалить разметку и выполнить ее заново или изменить границы разделов, то это не даст желаемого эффекта.

Затем снова заполним диск в среде Windows Server 2003 и удалим данные, после чего еще раз выполним тест:

ssd-garbage-collection-009.jpg

ssd-garbage-collection-010.jpg

Диск уверенно держит производительность, так как свободных ячеек для записи достаточно, несмотря на то, что был заполнен полностью и с точки зрения контроллера SSD свободных ячеек в доступной пользователю части диска нет.

Какие выводы следует сделать из этого материала? Несмотря на то, что в сознании многих TRIM является чуть ли не панацеей и обязателен к применению, на производительность диска он не влияет. Это всего лишь способ сделать работу уборщика мусора более эффективной. На производительность диска влияет только то, какое количество свободных ячеек есть в наличии и их достаточности для обслуживания текущих операций записи.

За то, с какой скоростью диск и как эффективно диск способен очищать блоки, отвечает уборщик мусора. Более эффективный алгоритм уборщика позволяет использовать меньший размер резервной области.

Также следует помнить, что в большинстве серверных сценариев команда TRIM просто не требуется, поэтому если выбирать приходится между RAID без TRIM или одиночный диск с TRIM, выбирать следует первое. Тем более, что обеспечить высокую производительность диска несложно самостоятельно.

Использование одиночного диска с более частым бекапом также допустимо, но такое решение принимается, как правило, по экономическим соображениям.

В интернете много противоречивой информации по этому поводу, так что пришлось сесть и вникнуть в эту тему. Но для начала все по порядку. Очень много информации уже глубоко устарело и рождает кучу мифов и домыслов, на самом же деле все не так уж и плохо. TRIM позволяет вашему диску пожить более долгую жизнь, распределяя равномерно запись по всему диску. Тем самым диск выходит из строя намного медленней. (все это справедливо исключительно для SSD дисков поскольку у них есть проблема с количеством записей). Включить TRIM легко, однако если мы используем mdadm для создания RAID 1 и такой фокус естественно не прокатит поскольку мы монтируем уже виртуальный диск.

1. Выбор файловой системы — вариантов не так много Ext4 и Btrfs поскольку последняя официально не рекомендована для установки на рабочие станции и сервера, хоть и считается стабильной, так же сказывается отсутствие рабочих утилит для проверки и исправления файловой системы. Так что вариантов не так уж и много, вернее один. Ext4

2. Выравнивание разделов — очень много информации по этому поводу, много советов, все это сводится к одной единственной вещи, новый fdisk по умолчанию уже не поддерживает dos формат, а следовательно такой проблемы уже давно нет. В этом легко убедиться просто дайте вашей системе отформатировать диск, и вы увидите что начинается он не с нулевого сектора.


Однако когда начал делать скриншоты на одной из тестовых машин c centos на борту, он мне дал такой скрин


В debian 7 все прошло гладко. Суть решения проблемы отключение ДОС формата, в fdisk думаю если в centos поставить последний fdisk то проблема так же сама собой пропадет, или принудительно указать ненужность ДОС поддержки при форматирование диска.

Итог: новое ПО само решит эту проблему.

3. Включаем TRIM Если у вас диск подключен без программного рейда нам достаточно убедиться в том что само устройство поддерживает TRIM

Discard — включит TRIM

noatime — действительно не нужен при ssd так что смело выключаем

commit=XX — а вот его я не рекомендую это уже перебор. Срок жизни диска увеличится меньше чем на 1%

4. Свободное место — да действительно нужно и чем больше, тем лучше, но это справедливо для любого накопителя, особенно это касается носителя при заполнение более 80%, так что это утверждение справедливо и для SSD.

5. Отключение планировщика записей на диск — нет

6. Поддержка TRIM в mdadm — TRIM is support for in all new versions of mdadm.

TRIM и OpenVZ — Ядра OpenVZ поддерживает смотрим тут

8. Отключение логов системы — Не хотелось бы даже комментировать такое стремление, но поскольку оно активно обсуждается в сообществе и вероятно кем то используется то прокомментирую. НЕТ!

Лог файл спасет вас в экстренной ситуации и уж если не скажет что чинить так как минимум даст не повторить ошибку. Логи по степени важности ни разу не меньше чем бэкап всей системы. Так что удалить логи даже за пару секунд это критически невозможно, не говоря уже о умниках вообще отключающих их. Если вам так тяжко смотреть как логи используют ваш диск, вставьте еще 1 HDD и перенесите все логи на него. 1000 рублей не такое уж и дорогое решение данной проблемы.

Эта проблема наиболее актуальна для аппаратных RAID или firmware RAID (таких как Intel RST RAID 1/10/5/6) с непромышленными SSD.

Особенность SSD

SSD пишут и читают данные страницами, записать можно только на очищенные страницы, а очистить страницы можно только большими блоками. Например, у диска размер страницы 8 КБ, в блоке находится 128 страниц, таким образом, размер блока — 1024 КБ (здесь и далее, если не указано иного, КБ и МБ двоичные).

Например, если изменить 40 КБ в одном файле, то на физическом уровне это будет выглядеть так:




На логическом уровне всё выглядит как обычно — данные будут перезаписаны поверх в соответствующих секторах. Как только в блоке 1 останутся исключительно пустые и готовые для очистки страницы, этот блок стирается и становится пустым целиком.

Чтобы скрыть физическую реализацию, диск поддерживает карту соответствия логических и физических номеров страниц (Flash Translation Layer).

Пока мы видим только один путь, которым физическая страница сможет стать снова очищенной — если на её логический адрес запишут новые данные. Дело в том, что контроллер диска работает на уровне страниц и не знает ничего о файловой системе, а операционная система никак не извещает диск об удалённых файлах, какие секторы могут быть очищены. Несложно видеть, что рано или поздно каждая страница диска будет занята и ему будет некуда писать данные.

Чтобы решить это проблему, была добавлена команда ATA TRIM (wiki). Операционная система посылает её диску с указанием секторов, которые могут быть очищены. Аналоги этой команды — SCSI UNMAP и CF ERASE. К сожалению, в некоторых случаях нет возможности послать её диску:
— если диск находится в RAID с аппаратным контроллером (LSI, Adaptec и т. п.),
— если диски находится в firmware-RAID, в частности, Intel RST RAID 1/10/5/6,
— если диск подключен по USB (ограничение протокола),
— если диск зашифрован программно через TrueCrypt, dm-crypt, GELI и т.п. (может поддерживаться, но обычно не включается по соображениям безопасности).

Если в результате тестирования выясняется, что диск не получает команду TRIM, то вскоре для записи может остаться совсем мало свободных страниц. Но они будут: каждый диск содержит некоторую зарезервированную область, которая служит как запас свободных страниц и запас блоков на замену полностью изношенным. Чтобы узнать размер этой области нужно посмотреть, какой физический объём памяти установлен на диске и сколько LBA указано в документации.

Например, Samsung SSD 840 Pro 512 GB имеет 512 ГБ памяти, при этом доступно 1000215216 LBA секторов. Резерв составляет: 512 × 1024 × 1024 × 1024 — 1000215216 × 512 = 35 ГБ или 6,85 %. Доступная ёмкость диска при этом составляет (512 — 35) × 1024 × 1024 × 1024 = 512 × 10^9 = 512 ГБ, уже десятичных. Samsung SSD 850 Pro 128 ГБ имеет на борту 129 ГБ, пользователю доступно 128 ГБ десятичных, резерв — 7,6 %.

Итак, если мы заполним весь диск, потом удалим все файлы, то без поддержки TRIM диск сможет писать только на какую-то часть от 6,85 % объёма диска. Часть, потому что этот резервный объём будет частично состоять из не полностью пустых блоков из-за фрагментации. Наличие этой области позволяет хоть как-то продолжать перезапись файлов на диске.

Пример худшей ситуации: писать некуда, хотя объём занятых страниц не превышает доступный пользователю без резерва.


В этом случае одновременно с записью работает сборщик мусора, который будет читать блок в оперативную память, стирать блок на диске (долгая операция, стирание занимает 3000 мкс в сравнении с 900 мкс записи в пустую страницу) и записывать блок из оперативной памяти. Задержка происходит также из-за роста Write Amplification — на одну логическую операцию записи приходится 5-10 физических операций записи.

Поэтому чем больше у диска есть свободного места для манёвров, тем выше скорость записи. Сборщик мусора в фоне занимается не только очисткой и дефрагментацией блоков, но и равномерным распределением циклов записи/очистки (P/E) по блокам, чтобы они изнашивались одинаково.

Есть популярный миф, что у современных дисков настолько хороший сборщик мусора, что им не нужен TRIM. Это совершенно не так, сборщик мусора и TRIM решают разные задачи.

Промышленные диски часто имеют 50% и больше резервной области, поэтому для них отсутствие TRIM не критично. Остальные диски чаще всего вообще не имеют явно заявленной резервной области, или она недостаточна. Тесты показывают, что хороший эффект имеет объём over-provisioning 25-29 % от общего объёма физической памяти (включая резервную область). Поэтому если у диска недостаточный объём резервной области, то нужно сделать over-provisioning самостоятельно.

Есть три способа:
— разметить диск таким образом, чтобы оставить некоторую часть неразмеченной области, после создания RAID,
— использовать команду ATA для создания Host protected area (howto), до создания RAID,
— настроить RAID контроллер, чтобы он использовал только часть объёма диска.


Прежде чем выделить свободную область, нужно дать знать диску, что эта область ничем не занята, одним из двух способов:
— подключить диск к другому контроллеру и послать команду ATA TRIM (или при помощи O&O Defrag — есть cli интерфейс, Windows 8 встроенный оптимизатор дисков или Anvil's Storage Utilities),
— сделать полную очистку таблицы FTL, послав команду ATA Secure Erase.

Есть версия, что также можно заставить диск понять, что блоки не используются, если туда записать 0x00 или 0xFF (так называемый метод «Tony TRIM»). Возможно, для каких-то контроллеров это работает, но мои тесты не показали изменений.

На практике

У меня есть два диска Samsung SSD 540 Pro 512 GB в Intel RST RAID 1, на которых установлена Windows 8.1. После года работы я измерил производительность и был неприятно удивлён. После проверки TRIM я увидел, что он не работает.

— Проверка TRIM под Windows,
— Проверка TRIM под Linux:
Колонки DISC-GRAN и DISC-MAX обе должны быть больше 0 для всех участвующих компонентов.

Альтернативный вариант:
После удаления файла на диске должны быть 0x00 или 0xFF, но это недостоверный способ: разные диски ведут себя по-разному.

TRIM в реальном времени включается опцией «discard» при монтировании диска:

TRIM для файловых систем на одиночных дисках и LVM поддерживается с ядра Linux 2.6.33. TRIM для mdraid поддерживается с ядра Linux 3.7. Но может быть портирован и на старые версии ядра, например, поддерживается в CentOS 6.

По-умолчанию Ubuntu делает TRIM по расписанию раз в неделю при помощи fstrim, но только для одиночных дисков (не mdraid) следующих производителей: Intel, Samsung, OCZ, SanDisk и Patriot и если установлен «hdparm».

— Проверка TRIM в FreeBSD:
ZFS по-умолчанию поддерживает TRIM начиная с версии FreeBSD 9.2:

GEOM RAID gmirror поддерживает TRIM с FreeBSD 9.1:
колонка «d/s» — BIO_DELETE/second.

Intel RST RAID поддерживает TRIM только для типа RAID 1, как исключение: для включения нужно убедиться, что драйвер Intel RST версии 11 и выше, и прошивка OROM (Legacy boot) или SataDriver (UEFI boot) версии 11 и выше, или старая версия, но пропатченная. TRIM поддерживается в Intel RSTe RAID 0/1/10 начиная с версии 3.7.0.1093.

Я решил создать неразмеченный раздел диска для over-provisioning.
1. При помощи Acronis Backup я снял образ диска. Также сохранил таблицу разделов (важно иметь первый сектор, последний сектор, GPT тип раздела, GPT уникальный идентификатор, имя раздела).

2. Перезагрузился в BIOS и сделал SSD Secure Erase. Если этого пункта нет в BIOS, то можно выполнить команду при помощи hdparam (или здесь и здесь, есть под Windows), HDDErase или HDAT2.

3. Собрал RAID 1 на двух дисках.

Здесь нужно сделать важное замечание: при инициализации массива RAID-контроллер считывает каждый сектор с одного диска и записывает его на второй. Теоретически это должно помешать всей нашей затее, и на одном диске не будет over-provisioning. Но тесты показали, что этот метод почему-то работает. У меня этому нет объяснений.

4. Загрузился с LiveCD и при помощи GPT fdisk создал нужную таблицу разделов: последний раздел на 104 ГБ меньше, чем раньше. Разделы нужно выравнивать (partition align) по размеру страницы диска, а не по размеру блока.

5. Восстановил из резервной копии каждый раздел.

После этого я полностью заполнил диск и запустил тесты. Это должно показать худший случай. Кеш Windows включён, регулярная запись кеша выключена, Inter RST write-back выключен, все тесты используют область диска фиксированного размера в 40 ГБ. Тестировать диски непросто, поскольку показатели могут меняться во времени. Ниже сведены показатели установившегося состояния.

Я сравню три состояния:
— Один диск без RAID, полностью заполненный, стандартная скрытая резервная область 6,58 %.
— Один диск без RAID, после запуска на нём TRIM свободного места.
— Два диска в RAID 1, полностью заполненные, стандартная скрытая резервная область 6,58 %.
— Два диска в RAID 1, полностью заполненные, over-provisioning 27,24 % (включая скрытую резервную область).






Анализ результатов:
— чтение с RAID 1 оказывается быстрее, чем с одного диска, невзирая на то, что у нас всего лишь firmware RAID.
— запись тем быстрее, чем больше нераспределенного пространства: на первом месте TRIM, на втором — наш самодельный over-provisioning.

Установившееся состояние не всегда достигается быстро. Посмотрим тест последней конфигурации (over-provisioning 27,24 %) в динамике и увидим худший случай:



Любопытный процесс идёт первые 400 секунд, после чего производительность возрастает и стабилизируется. Я думаю, параллельно с записью работает сборщик мусора, который дефрагментирует блоки и подготавливает их для записи. Такое поведение наблюдается не каждый раз, а время от времени. Видно, что последовательная запись проседает до 70 МБ/с, случайная запись — до 18000 IOPS. Эти показатели всё равно в два раза лучше, чем без over-provisioning (32 МБ/с и 7139 IOPS соответственно). Чтобы убедиться, что установившееся состояние на самом деле имеет такую высокую производительность, я также выполнил тест в течении 30 минут, при этом было записано на диск 490 ГБ со средним 69721 IOPS.

Кратко

— Если диск получает ATA TRIM от ОС, то беспокоиться не о чем, достаточно оставлять часть места на диске свободным.
— Если используются дорогие промышленные диски, то проверьте объём встроенной резервной области, если он достаточен, то проблем с записью не будет.
— В остальных случаях нужно оставить не размеченную область, чем больше её размер, тем меньше будет стандартное отклонение латентности записи.
— Иногда сборщик мусора не успевает подготовить чистые блоки и скорость записи может просесть и быть непостоянной.
— После over-provisioning установившаяся максимальная скорость записи повысилась с 7000 до 68000 IOPS, а средняя минимальная — с 6000 IOPS до 19000 IOPS.

TRIM является атрибутом команды управления наборами данных ATA. Функция TRIM повышает совместимость, долговеку и производительность, позволяя диску делать сбор пакетов в фоновом режиме. В этой коллекции удаляются блоки данных, такие как удаленные файлы.

Как использовать TRIM?

В следующих операционных системах по умолчанию включена команда TRIM:

  • Ос Windows 7*
  • Ос Windows 8*
  • Windows 8.1*
  • Windows® 10
  • Windows Server 2008*
  • Windows Server 2012*
  • Windows Server 2016*

Для работы ФУНКЦИИ TRIM:

  • Как SSD, так и операционная система должны поддерживать TRIM
  • Операционная система должна иметь включенную TRIM
  • Твердо накопитель Intel® (Intel® SSD) с литографией диска 34 нм (G2) или новее.
  • Установка Intel Memory and Storage Tool.
  • Отключитезапланированную дефрагментацию для предотвращения дефрагментации фона, запускаемой одновременно с Intel SSD Optimizer.
  • Отключитефункцию SuperFetch(или SysMain on Win10).

Да. Intel® Rapid Storage Technology (Intel® RST) версии 11.0 или новее поддерживает функции TRIM в RAID 0, начиная с комплекта микросхем Intel® серии 7.

Последняя версия последней Intel Memory and Storage Tool позволяет оптимизировать производительность SSD-системы Intel. Вы также можете использовать новейшую версию Windows* или Linux*, которая автоматически включает TRIM.

Как узнать, поддерживает ли диск TRIM?

Вы можете использовать Intel® Memory and Storage Tool для просмотра атрибутов диска:

  1. Откройте Intel® Memory and Storage Tool.
  2. НажмитеСведения о диске в выпадаемой функции
  3. НажмитеЭкспорт.
  4. Сохранитефайл .csv и откройте его в соответствующем инструменте, например, Microsoft Office Excel*.
  5. НайдитеWord 169и проверьте значение Бит0 - Поддерживаемые управления набором данных.
  • Если значение hex составляет 1, диск поддерживает TRIM.
  • Если значение hex составляет 0, диск не поддерживает TRIM 1 .

1 В SSD® накопителях Intel® 34 нм с микропрограммным обеспечением 02G9, значение Hex как 0, так как эта версия микропрограммного обеспечения не поддерживает TRIM.

ПримечаниеЕсли диск не поддерживает ФУНКЦИЮ TRIM, убедитесь в наличии возможности обновления микропрограммного обеспечения с этой функцией.
Как узнать, что я включила TRIM?

Вы можете проверить операционную систему, чтобы узнать, включена ли у вас TRIM:

Откройте командную подсказку от администратора.

  1. Перейти к start > All Programs > Accessories.
  2. Нажмите правой кнопкой мышиКомандная подсказкаи нажмитеВыполнить от администратора.

Введите %root%:\>fsutil behavior query disabledeletenotify в .

Пример: C:\>fsutil behavior query disabledeletenotify

DisableDeleteNotify = 1 (Windows TRIM commands are disabled)
DisableDeleteNotify = 0 (Windows TRIM commands are enabled)

Читайте также: