TRIM, что такое?
Предотвратить замедление записи в SSD возможно, если выполнять стирание по плану
Хотя твердотельные накопители существуют уже несколько лет, они лишь недавно смогли пробиться на рынок товаров для обычных пользователей. Как мы уже отмечали в февральской публикации 2009 года, посвященной этой теме, твердотельные накопители обладают массой преимуществ по сравнению с традиционными магнитными накопителями - жесткими дисками - HDD. В отличие от механических жестких дисков, SSD не имеют движущихся частей, поэтому они расходуют меньше энергии и не создают вибрации. Кроме того, они более устойчивы к физическим воздействиям. И самое главное, твердотельные накопители предлагают намного большие скорости чтения и записи, чем традиционные жесткие диски, по крайней мере пока они новые. Однако NAND архитектура флеш-памяти в SSD является причиной серьезного замедления работы накопителей, когда свежие блоки для записи внутри них заканчиваются. Команда TRIM, представленная в Windows 7 и новых версиях ядра Linux, должна исправить эту проблему. Но что такое TRIM, и почему эта команда необходима?
Зачем нужна команда TRIM?
При удалении файла, операционная система не стирает данные сразу, а вместо этого она помечает эту область на диске как перезаписываемую в индексе всех файлов диска, поэтому в следующий раз, когда потребуется записать данные на диск, она может использовать пространство, ранее занятое этим файлом. Кстати, именно поэтому существует программное обеспечение для восстановления файлов — если пространство не было перезаписано, то данные все еще находятся на диске и могут быть восстановлены. Важно отметить, что сам по себе диск ничего не знает о статусе данных на диске. Такая "ничего не знающая" система прекрасно работает в механических жестких дисках, поскольку перезапись данных в них происходит без каких-либо проблем, но флеш-память типа NAND устроена по-другому, и в том случае, когда все блоки в ней уже были использованы по одному разу, это может привести к замедлению скорости работы накопителя.
Данные флеш-памяти твердотельных накопителей обычно хранятся участками по 4KB, так называемыми страницами, которые сгруппированы в блоки по 128 страниц каждый. Данные могут быть прочитаны и записаны по 4KB на уровне страниц, но стирание происходит только по 512KB на уровне блоков. В то время, как чтение данных и запись на неиспользованных страницах в SSD происходит гораздо быстрее, чем в стандартных жестких дисках, перезапись данных является сложной, многоступенчатой процедурой, которую SSD, как правило, выполняют только тогда, когда свежих блоков для записи уже не хватает.
Когда свежие блоки на SSD заканчиваются, накопитель вынужден производить запись поверх данных, помеченных в файловой системе как удаленные. Именно с этого момента начинается падение скорости. Чтобы переписать одну страницу размером 4KB файловой системе сначала необходимо скопировать весь блок размером 512KB в кеш-память. Затем в кеше разрешенные для перезаписи страницы удаляются и заполняются новыми данными. Далее на диске весь блок размером 512KB стирается и перезаписывается данными из кеша. Если вы записываете множество блоков одновременно, например при выполнении серии мелких случайных операций записи или просто записывая большой файл на диск, вы можете довольно быстро перегрузить кеш диска, и тогда скорость записи у вас упадет. Вы можете себе представить, насколько медленно будет происходить запись файла размером 2GB или многократная запись данных размером по 4KB. Пользователи ранних моделей SSD иногда наблюдают задержки в операциях записи вплоть до секунды. Чтобы компенсировать это, производители SSD начали увеличивать размер кеша DRAM в своих накопителях до 64MB или даже 128MB, а также подключать быстрые контроллеры диска. Это в значительной степени устранило "заикания" в случае с произвольной записью, но накопители продолжают страдать от замедления скорости при исчерпании свежих страниц.
Что делает TRIM?
В двух словах, проблема заключается в том, что ОС и файловая система не сообщают SSD об удалении файлов, и все операции записи на страницах, которые содержат нестертые удаленные данные, требуют стирания и перезаписи всего блока, что может резко снизить скорость записи. Существуют два подхода к решению этой проблемы. Первый заключается в периодическом запуске программы для сбора мусора, которая сканирует весь диск и стирает содержимое удаленных страниц. Сегодня многие производители дисков поставляют программу wiper.exe, предназначенную для стирания удаленных страниц на всем диске и возвращения ему прежней скорости. В некоторых случаях эта программа фактически полностью очищает диск, поэтому нужно заранее делать резервную копию всех данных. Второй подход лучше: ОС должна сообщать диску об удалении данных, чтобы он мог стереть эти блоки сразу. Это и делает команда TRIM.
Если система поддерживает TRIM и удаляется некоторый файл, ОС посылает команду SSD и дает ему знать, что данные из определенного набора страниц могут быть перезаписаны, передавая контроль над удаленными данными прошивке накопителя. Затем SSD копирует блоки с удаленными данными в кеш, стирает блоки, а потом снова записывает только те страницы, которые содержат данные. Таким образом, процесс кеширования и стирания выпадает из критичного по времени цикла записи и попадает в промежуток времени между фактическим удалением и следующей записью, поэтому вероятность того, что замедление вызовет заметное падение производительности, крайне мала.
Применение TRIM'а на практике
Для работы команды TRIM необходима поддержка как со стороны ОС, так и со стороны накопителя. TRIM реализована в ядре Linux начиная с ревизии 2.6.28, а также в Windows 7, и все основные производители SSD объявили о поддержке этой команды. Через обновление прошивки поддержка TRIM может быть добавлена в некоторые старые накопители, однако не все старые накопители могут ее поддерживать. Если вы планируете покупку SSD, TRIM должен присутствовать обязательно, убедитесь, что накопитель поддерживает TRIM, а если у вас уже есть SSD, обратитесь к производителю за обновлением микропрограммы, если оно доступно. Если нет, то вам лучше всего узнать, имеется ли у вашего производителя утилита для оптимизации SSD (часто называется wiper.exe), с помощью которой вы можете регулярно выполнять стирание удаленных страниц.