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

  • Автор:

ssd-garbage-collection-000.jpg

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

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Основной миф касательно 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, выбирать следует первое. Тем более, что обеспечить высокую производительность диска несложно самостоятельно.

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

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Поддержи проект!

Или подпишись на наш Телеграм-канал: Подпишись на наш Telegram-канал



Loading Comments