Семь бед – один Deallocate
Многие слышали про команду TRIM. Те самые заветные четыре буквы, которые вызывают множество вопросов у рядового пользователя. TRIM – одна из команд ATA, отправляемая операционной системой с целью уведомления твердотельного накопителя о том, что данные с диска были удалены пользователем и занятые физические ячейки можно освободить. Стоит отдельно сказать про SSD с интерфейсом NVMe — эти диски обладают другим набором команд для работы, но аналог ATA команды TRIM там тоже существует — называется она Deallocate и, соответственно, является идентичной. Поэтому, далее при упоминании TRIM мы будем подразумевать и Deallocate тоже. К чему речь обо всём этом? Как раз именно проблемы с выполнением данных команд в подавляющем большинстве случаев и являются причиной низкой производительности накопителей. Конечно, другие проблемы мы тоже не оставим в стороне, но всему своё время.
В тот момент, когда вы удаляете данные с вашего накопителя, по факту удаляется запись в главной таблице файловой системы. То есть, сами данные остаются на месте, но область помечена на удаление. Сама «зачистка ячеек» происходит в определенное время, например, в момент простоя накопителя, пока вы отошли за чаем. Таким образом производители добиваются снижения износа памяти и увеличивают производительность своих накопителей в определённых сценариях. Именно очисткой этих ячеек и занимается контроллер, выполняя команду TRIM. К слову, после её выполнения, восстановление данных практически невозможно.
Совсем недавно мы рассказывали про технологию Secure Erase, которая схожа с TRIM, но затрагивает не только основные ячейки, но и служебные области, возвращая накопитель в полностью исходное состояние. Напомним, что Secure Erase можно выполнить на накопителе только без файловой системы и при определённых условиях. А технология TRIM как раз и требует наличие операционной системы со всеми вытекающими требованиями.
Объясним на пальцах, как раз их 20…
Когда вы создаёте файл, операционная система отправляет команду записи по адресу определенного логического блока. Когда вы удаляете данные с диска, эти блоки помечаются свободными.
При этом, данные останутся на диске пока контроллер не захочет их перезаписать.
Перед нами часть памяти, в которой находятся файлы А и В разных размеров, занимающих, соответственно, разное количество блоков. Сначала мы удаляем файл В, а затем записываем файл С на наш диск. Для наглядного представления ситуации, когда TRIM не работает, добавим простую иллюстрацию, в которой обозначены следующие состояния:
- Наличие файлов А и В.
- Удаление нашими руками файла В.
- Определённое время бездействия. Заметим, что помеченные на очистку блоки данных так и остались с данными в них.
- Запись файла С, но сначала – удаление файла В из ячеек.
К примеру, если представить (просто представить, да), что блок данных в виде квадратика составляет 1 МБ, то на этапе 4 контроллер сначала зачищает помеченные на удаление два блока данных с файлом В и только потом записывает файл С. Если пара мегабайт места – ещё мелочи, но при активной работе с накопителем таких блоков в сумме может быть гигабайты, что уже заметно повлияет на время выполнения операций записи.
А теперь что происходит, если TRIM работает. Снова по этапам:
- Наличие файлов А и В.
- Удаление нашими руками файла В.
- Определённое время бездействия, в которое помеченные на удаление блоки с файлом В очищаются.
- Запись файла С без каких-либо задержек в область, где был файл В.
То есть, логика работы совсем другая. Повторим пройденное — в момент удаления нами файла B отправляется команда TRIM, и, поскольку в SSD достаточно часто простаивает, он с радостью удаляет ненужные блоки практически сразу. И в момент того, как мы хотим записать файл С, то он сразу же записывается на диск, а не ждёт пока для него очистят блоки с мусором.
TRIM, а есть ли ты вообще? И, если есть, то работаешь ли?
Узнать, поддерживает ли SSD команду TRIM можно при помощи достаточно большого количества свободно распространяемого программного обеспечения. Возьмём, к примеру, CrystalDiskInfo:
Но демонстрация поддержки – не есть работа. Для начала пройдёмся по ситуациям, когда TRIM надо запускать хитрым способом или данная команда не работает вовсе. Конечно, со временем ситуация может поменяться, но пока дела обстоят следующим образом:
- Стандартные драйверы Windows не могут выполнять TRIM на RAID массивах. В зависимости от системы и типа RAID массива, проблему может решить драйвер от Intel под названием Rapid Storage. Поддерживаются массивы 0 и 1 с драйвером версии Enterprise.
- Поддержка TRIM в Windows начинается с версии операционной системы с цифрой 7. Vista и, тем более, XP не поддерживают TRIM на уровне ОС. Конечно, эта проблема решается сторонним программным обеспечением, но тут всё на ваш страх и риск – рекомендовать это мы не можем и не будем.
- Команда Deallocate (TRIM для NVMe SSD) поддерживается только с Windows 8 и новее.
- TRIM не работает на виртуальных дисках.
- TRIM работает только в режиме AHCI.
- TRIM не работает при подключении накопителя через USB переходники.
- TRIM не работает в с файловой системой FAT32 (и более «лохматых»).
Теперь проверим – а работает ли TRIM в системе?
Для начала – попробуем это узнать прямо у операционной системы. В запущенной от имени Администратора командной строке или PowerShell вводим команду «fsutil behavior query disabledeletenotify» без кавычек и смотрим на результат. Если в выводе значатся «0», то это хорошо – TRIM работает. Если «1», то функционал TRIM недоступен. Всё верно: ноль – включённая команда, 1 – выключенная команда.
К примеру, можно использовать простую в использовании программу trimcheck от Владимира Пантелеева. Программа работает в два этапа, между которыми может пройти как несколько секунд, так и десятки минут – всё зависит от специфики работы конкретной модели SSD. Утилита записывает данные на диск и отмечает адреса виртуальных блоков, в которых они размещены. Эти адреса она сохраняет в JSON-файл в своей папке, после чего удаляет данные, что порождает отправку команды TRIM. Утилита смотрит, находятся ли записанные ранее данные по сохраненным адресам. Их отсутствие означает, что контроллер принял команды TRIM к сведению и удалил данные. Если TRIM работает, то сообщение будет соответствующим:
В противном случае надпись будет гласить TRIM appears to be NOT WORKING. Собственно, если вы получили сообщение о неработоспособности, то выполните в запущенной от имени Администратора командной строке или PowerShell команду «fsutil behavior set disabledeletenotify 0» без кавычек. Функция TRIM, если соблюдены все условия (поддерживаемая ОС, реализация в SSD и т.д.), должна включиться и работать. Если этого не произошло, а все требования выполнены, то придётся подумать о замене накопителя.
Проблемы, проблемы вместо обеда
Самая распространённая проблема – наследование. Само собой, речь идёт про Windows до версии 8. Например, когда пользователь ставит в старые системы SSD или переходят с HDD на SSD без изменения настроек BIOS (если это необходимо) или вообще путём клонирования разделов или диска целиком. Напоминаем, что TRIM доступен только в режиме ACHI. К примеру, у многих материнские платы могут работать в двух режимах AHCI и IDE. Соответственно, если SSD подключён к такой плате именно в режиме IDE, то TRIM работать не будет. Просто наличие режима AHCI не решает проблему – Windows установит драйверы согласно выбранному IDE. Казалось бы, ситуация может встречаться редко, но на самом деле – нет. Если с настройками BIOS вы не дружите, то хотя бы проверить режим работы надо. Сделать это можно в диспетчере устройств в разделе «Контроллеры IDE ATA/ATAPI»:
Помните, что просто так после установки Windows переключить режим работы с IDE на AHCI (и обратно) без дополнительных манипуляций не выйдет – операционная система попросту не загрузится. Решения этой проблемы существуют (даже от самой Microsoft), но рекомендовать их не стоит. Требуется изменение параметров реестра, добавление нужного драйвера и готовность к переустановке ОС в случае неудачи.
Что касается Linux-систем, то обязательным условием, помимо аппаратной составляющей, является файловая система ext4. Включение TRIM указывается опцией discard в файле fstab. Дополнительными полезными опциями для раздела станут noatime (realtime или nodiratime), которые снизят запись путём отключения обновления времени последнего доступа к файлам и директориям. Сама же команда TRIM запускается при помощи программы fstrim – «fstrim / -v» без кавычек и с правами рута.
Вспомним ещё про Secure Erase. Восстановить производительность этой функцией можно. Только вот вряд ли надолго. Особенно, если вы быстро забиваете свой накопитель новыми данными. Так что как временное решение – пойдёт, но оно всегда будет оставаться временным.
Ещё добавим про SLC-кеширование, которое достаточно часто используется у многих SSD-накопителей без привязки к интерфейсу. Невысокая скорость записи большого количества файлов (или больших файлов) после определённого порога не проблема, а особенность работы. Суть кеширования состоит в том, что сначала записываемые данные попадают в специальную область памяти, а уже затем записываются в основную память в фоновом режиме. Когда выделенная высокоскоростная память заканчивается, то данные начинают записываться непосредственно в память на заметно сниженной скорости – от 50 до 150 МБ/с. Это совершенно нормальный режим работы накопителей с SLC-кешом, поэтому здесь ничего сделать невозможно от слова совсем.
Что хорошо, а что плохо?
Если функция TRIM работала с самого начала, то сама по себе никуда она деться не может. Но совсем другое дело, если вы увлекаетесь разного рода твикерами, сторонними драйверами или прошивками, а также сборками операционных систем, якобы улучшенных. Все эти программы и сборки могут только навредить, если речь идёт о Windows 8 и, тем более Windows 10 – в этих ОС всё продумано как надо. В «семёрке» они могут чем-то помочь, но это скорее исключение из множества проблем, которые они могут принести.
Отдельно надо сказать несколько слов про NVMe накопители и драйверы для них. Приобретая высокоскоростной SSD, в ваших глазах должны отражаться полученные в бенчмарках заявленные скоростные показатели. Часто это так и есть, например – с накопителями Kingston. Установил и забыл, как говорится, наслаждаясь его высокими скоростями. Но с SSD других производителей это может быть не всегда так, что, очевидно, расстроит любого. Тут уже не отсутствие Deallocate является причиной недостаточного быстродействия, а стандартный NVMe драйвер. Да-да, при покупке NVMe SSD некоторых производителей обязательно приходится отправляться на сайт его сайт и скачивать соответствующий драйвер – разница со стандартным может превышать двукратную!
Вот теперь, вроде, всё.
Как оказалось – не всё так страшно, как выглядело не первый взгляд. От пользователя требуется выполнение всего нескольких рекомендаций, чтобы система работала корректно и радовала производительностью твердотельного накопителя долгое время. Повторим их напоследок – чистый дистрибутив операционной системы, актуальные драйверы и прошивки от производителя, а также отсутствие сторонних «настройщиков» системы, которые, по заверению их разработчиков, увеличивают производительность на 146%. Если проблема не аппаратная, то никаких нареканий к диску у вас не будет в течение всего срока жизни вашей системы. Так что никакого длинного заключения-словоблудства не будет – всё, что надо было сказать уже сказано. Ёмких вам SSD, их высоких скоростей и стабильной работы!
Для получения дополнительной информации о продуктах HyperX и Kingston обращайтесь на сайты компаний.
Источник