Коллега по работе упомянул, что посоветовал купить SSD своему знакомому, хотевшему ускорить работу ноутбука с Windows XP. Я отметил, что тому понадобится стороннее ПО для TRIM. «А что будет с диском без TRIM?», — спросил коллега. Ограничившись кратким ответом, я пообещал ему подробно осветить этот вопрос в блоге. Тем более, что тут есть возможность показать все очень наглядно.
Чтобы понять, в чем заключается смысл TRIM, нужно разобраться, как работает запись данных на диск.
[+] Сегодня в программе
- Примечание о Deallocate
- Как данные записываются и стираются с диска
- Как работает SSD без TRIM
- Как работает SSD с TRIM
- Сбор мусора и TRIM
- Нужна ли SSD дефрагментация
- Поддержка TRIM и Deallocate в Windows
- Как проверить, работает ли TRIM в Windows
- А у вас все нормально с TRIM?
Примечание о Deallocate
Статья была написана до появления на рынке накопителей с интерфейсом NVMe. В нем команда Deallocate является аналогом команды TRIM для ATA. Все написанное в статье в равной степени применимо к TRIM и Deallocate, но я не стал добавлять вторую команду в каждое предложение, чтобы не перегружать текст.
Как данные записываются и стираются с диска
Операционная система общается с жестким диском с помощью механизма адресации логических блоков (Logical Block Addressing, LBA). Например, когда вы сохраняете файл, ОС отправляет команду записи по адресу определенного логического блока. Когда вы удаляете данные с диска, их LBA помечаются свободными.
При этом данные никуда не пропадают до тех пор, пока они не будут перезаписаны новыми.
Этот же принцип работает и в твердотельных накопителях, с той разницей, что в них контроллер сопоставляет LBA со страницами во флэш-памяти. Однако есть одна проблема…
Как работает SSD без TRIM
Представьте гипотетический SSD, состоящий из одного блока в пять страниц по 8KB. Сначала вы создали два файла: книгу Excel и документ Word размерами соответственно 8KB и 16KB. Потом вы удалили первый файл и решили сохранить на диск картинку в формате JPEG размером 24KB.
При отсутствии TRIM весь процесс выглядит так.
Давайте разберем этапы процесса, держа в уме, что контроллер записывает данные в отдельные страницы памяти, но стирать может только целые блоки.
- Вы создали два файла и удалили один из них. Если TRIM не работает, накопитель узнает об удалении книги Excel только в тот момент, когда ОС прикажет ему перезаписать LBA, покрывающий ставший ненужным файл.
- Вы сохраняете изображение в формате JPEG размером 24KB. Операционная система знает, что на диске достаточно места (8+16-8+24=40KB), но контроллеру не хватает свободной страницы. Поэтому он считывает все содержимое блока и записывает его в кэш, которым может служить внешний модуль DRAM или собственный ресурс чипа (у SandForce).
- Контроллер модифицирует считанные данные, избавлясь от ставшей ненужной книги Excel.
- К оставшемуся документу добавляется картинка в формате JPEG.
- Контроллер стирает наш блок флэш-памяти, после чего записывает в него изображение и документ.
Вы просто сохранили изображение объемом 24KB, но при этом в рамках цикла «чтение — изменение — запись» контроллер прочел 24KB (этап 2) и записал 40KB (этап 5).
Получается, что в самый ответственный момент чип выполнял фактически двойную работу!
Чтобы активность системы и программ не загоняла контроллер в угол, производители SSD выделяют на диске резервную область, скрытую от системы. Но без TRIM она может лишь отсрочить неизбежную фрагментацию памяти, что возвращает нас к описанной выше ситуации. Со временем это выливается в снижение скорости записи.
Как работает SSD с TRIM
Заметьте, основная проблема в том, что контроллер заранее не в курсе, что файл уже не нужен, а точнее, что LBA уже свободен. Смысл команд TRIM и заключается в том, чтобы сообщить об этом контроллеру сразу по факту удаления файла.
Давайте рассмотрим тот же пример, но на сей раз с поправкой на TRIM.
Похоже на игру «найди в картинках N отличий»? Следите за руками контроллера, ибо тут он действует иначе:
- Вы создали два файла и удалили один из них. Операционная система сразу сообщила контроллеру об удалении книги Excel командой TRIM.
- Контроллер прочел данные из блока флэш-памяти в кэш.
- Обладая информацией о ненужности книги Excel, контроллер удалил ее.
- Контроллер очистил блок и вернул в него документ Word. В блоке доступно 24KB.
- Вы сохраняете изображение в формате JPEG размером 24KB. Контроллер просто записывает картинку в свободные страницы блока.
Да, чипу пришлось проделать лишнюю работу по считыванию 24KB в кэш (шаг 2), но это он делал в «свободное» время», равно как и запись нужного вам документа Word в очищенный блок.
Но когда поступил сигнал на сохранение картинки, контроллер записал ровно 24KB (шаг 5), поскольку ему уже не нужно было гонять килобайты между кэшем и NAND.
Однако TRIM не решает одну проблему SSD, у которых одно из основных отличий от HDD заключается в перезаписи файлов.
В описанном выше примере с единственным блоком памяти производительность все равно будет страдать при перезаписи файлов. Но когда есть свободная память, твердотельный накопитель выделяет другую страницу в NAND и помечает особым образом страницу с ненужными данными. Она очищается при стирании блока в рамках сбора мусора.
Сбор мусора и TRIM
На рисунке ниже представлен процесс записи и удаления файлов с точки зрения ОС и твердотельного накопителя на логическом и физическом уровне. Вы любите большие картинки? :)
Из диаграммы видно, что логически ОС и SSD смотрят на ситуацию одинаково — с точки зрения LBA. Но на физическом уровне TRIM играет большую роль. Получив команду об удалении файла, контроллер SSD исключает из рутинных операций страницы NAND, содержащие ненужные данные.
Благодаря TRIM, ненужные данные не считываются и не записываются в другие блоки памяти, поэтому производительность твердотельного накопителя не страдает во время операций записи. С другой стороны, снижается мультипликатор WA, т.е. продлевается срок службы SSD.
Отправляемые операционной системой команды TRIM не является приказами контроллеру, т.е. чип лишь принимает их к сведению. Данные, ставшие ненужными, удаляются во время сбора мусора, который может выполняться как одновременно с записью, так и во время бездействия.
Подход к сбору мусора определяется прошивкой контроллера, но реальная разница между стратегиями проявляется, пожалуй, лишь под непрерывной и агрессивной нагрузкой.
В этом случае активный сбор мусора помогает поддерживать пусть и не столь высокую, но зато стабильную производительность. Фоновый же сбор мусора может обеспечивать более высокую пиковую производительность, но обратной стороной медали будет существенное снижение скорости в худших сценариях.
Нужна ли SSD дефрагментация
Наверное, вы слышали, что она не нужна. Но ведь SSD фрагментируются! Представьте диск объемом 128GiB, на котором занято 100GiB. Оставшееся свободное пространство состоит из блоков, в каждом из которых есть занятые страницы памяти. Это называется фрагментация флэш-памяти.
Вы начали активно записывать данные, заполняя диск. Контроллер, который не убирался в своей квартире, столкнется с необходимостью перемещать данные туда-сюда, выполняя операции «чтение – изменение – запись».
Если бы контроллер заранее подсуетился, то смог бы просто писать данные, не отвлекаясь на уборку. Поэтому одной из важных его задач является дефрагментация памяти, алгоритмы которой закладываются в сбор мусора.
Заметьте, это задача контроллера, а операционная система тут вообще ни при чем! На диаграмме выше сопоставьте логический вид ОС и физический вид SSD. Операционная система видит логические блоки LBA, но при этом понятия не имеет, в каких блоках и страницах NAND хранятся данные!
Хотя контроллер оптимально разложил данные во флэш-памяти, с точки зрения ОС файлы могут быть разбросаны по диску. Это называется фрагментация файловой системы, но она не имеет значения для SSD.
Поэтому твердотельным накопителям не нужна дефрагментация средствами ОС или сторонних программ. Она вынуждает контроллер перемещать данные по диску без насущной необходимости. Теоретически ненужные операции записи снижают срок службы накопителя. Но на практике дефраг делается не так уж и часто, чтобы «убить SSD».
Обязательная ссылка: Почему Windows 8 дефрагментирует ваш SSD, и как этого избежать
Поддержка TRIM и Deallocate в Windows
TRIM — это команда ATA, которая может передаваться в режимах AHCI и IDE.1 В дисках NVMe команда Deallocate является эквивалентом TRIM в ATA, поэтому на практике разницы нет.
В ОС Microsoft TRIM поддерживается начиная с Windows 7. В Windows Vista и XP нужны костыли в виде стороннего ПО (читатель блога Виталий К. © так и не прислал обещанную инструкцию, но поисковики никто не отменял). Deallocate поддерживается в Windows 8 и новее.
Обычно, работу TRIM проверяют командой fsutil. На самом деле она показывает лишь то, что TRIM включен, т.е. ОС посылает команды контроллеру. Но утилита fsutil понятия не имеет, что происходит с ними потом.
Как проверить, работает ли TRIM в Windows
Вопрос, доходят ли команды TRIM до контроллера SSD, вовсе не такой праздный, как может показаться на первый взгляд. С одной стороны, обмен данными между ОС и чипом твердотельного накопителя ведется через контроллер SATA с помощью драйвера, а с другой – нельзя исключать дефект прошивки контроллера SSD.
Утилита TRIMcheck
Недавно волны Интернета вынесли к берегу маленькую утилиту TRIMcheck, с помощью которой проверить работу TRIM очень просто. (Примечание. По сообщениям читателей, утилита не сработает, если диск сжат (флажок в свойствах диска.)
- Запустите утилиту с диска, на котором хотите проверить работу TRIM, и нажмите Enter.
- Закройте окно, подождите пару минут и повторно запустите утилиту.
На рисунке показано сообщение, подтверждающее работу TRIM.
Вкратце, принцип работы утилиты при этих запусках таков:
- Утилита записывает данные на диск и отмечает адреса виртуальных блоков, в которых они размещены. Эти адреса она сохраняет в JSON-файл в своей папке, после чего удаляет данные, что порождает отправку команды TRIM.
- Утилита смотрит, находятся ли записанные ранее данные по сохраненным адресам. Их отсутствие означает, что контроллер принял команды TRIM к сведению и удалил данные.
Что будет при следующем запуске? Пока файл JSON лежит рядом с утилитой, она сверяется с ним. Удаление файла возвращает вас к шагу 1, а чтение сообщений утилиты снимает лишние вопросы.
Что делать, если TRIM «не работает»
Надо понимать, что контроллер SSD вовсе не обязательно бросится удалять данные по факту получения команды, особенно если он склонен к сбору мусора при бездействии. У меня в ноутбуке накопитель на SandForce прибрался сразу, а в планшете SanDisk на собственном контроллере отреагировал с солидной задержкой по времени.
Если утилита указывает на неработающий TRIM, перед следующим ее запуском:
- перезагрузите ПК (это рекомендует и автор программы)
- (в Windows 8) отправьте набор команд TRIM из оптимизатора дисков
- оставьте ПК в покое, позволив ему перейти в режим бездействия
Допустим, и на следующий день вы обнаружили, что данные до сих пор не удалены. Либо контроллер до сих пор не выполнил сбор мусора, либо у него проблема с TRIM.
1. Установите драйвер SATA последней версии
В свойствах контроллера вы можете посмотреть, используется стандартный драйвер (msahci.sys) или сторонний, как показано на рисунке ниже.
Обновление стороннего драйвера до последней версии – хорошая идея! Если вы не можете найти ее на сайте поставщика, нажмите здесь. После установки драйвера перезагрузитесь и заново выполните тест TRIMcheck.
2. Переключитесь на стандартный драйвер от Microsoft
Если у вас самый свежий сторонний драйвер, переход на msahci — это хороший способ исключить переменную драйверов из уравнения.
- В диспетчере устройств щелкните правой кнопкой мыши по контроллеру SATA и выберите в меню “Обновить драйвер”.
- Выполнить поиск драйверов на этом компьютере
- Выбрать драйвер из списка установленных драйверов
- Стандартный контроллер SATA/AHCI, как показано ниже.
После перезагрузки будет использоваться драйвер msahci.sys.
3. Обновите прошивку SSD
Если пляски с драйверами не помогают, можно попробовать обновить прошивку накопителя. Вы найдете ее в разделе поддержки (Support) на сайте производителя.
А у вас все нормально с TRIM?
Напишите в комментариях, работает ли TRIM в вашем SSD, указав модель. Быстро ли выполняет уборку контроллер вашего SSD или ждет значительное время?
Следующая запись блога выйдет после майских «каникул».
Подборка ссылок, развенчивающих миф о том, что TRIM работает только в AHCI.↩
Владимир
Kingston SSDNow SV300S37A / 120G
Система Win 8.1, мать старенькая, без наличия AHCI.
TRIM не срабатывал после рекомендуемой перезагрузки, режима бездействия (5-7 часов) и манипуляций с драйверами.
Но, после того как натравил на SSD «Оптимизация дисков», сразу же увидел вожделенную надпись …..to be WORKING! :)
Свободное место на диске колеблется в районе 45-60%, добавил в расписание оптимизации «еженедельно», забыл и пользуюсь.
Спасибо за статью!
Vadim Sterkin
Гуд
Михаил
Имеются два SSD: OCZ Vertex 3 и OCZ Agility 3. Чипсет Intel P55, ACHI включен, Win7 64 и 32 bit (две винды на разных дисках), дрова последние для этого чипсета. Картина такая: на Vertex 3 TRIM работает везде всегда исправно и быстро, а вот на Agility 3, при тех же условиях, на чистом после форматирования — НЕ работает, при заполнении диска на 25-30% — работает, при заполнении диска на более чем 50, но менее чем на 80% — НЕ работает. Прошивки обоих SSD 2.25, т.е. последние на данный момент. Фигня какая-то получается. Команда TRIM из утилиты OCZ Tools исправно срабатывает. А вот с самостоятельностью у Agility 3 какие-то проблемы. В чем может быть дело? Буду признателен, если поделитесь своими соображениями по-поводу сей странной ситуации.
А статьи Ваши весьма интересны и познавательны, и написаны понятным языком. За что отдельное большое спасибо. :)
Vadim Sterkin
Михаил, если вы почитаете комментарии, то заметите два момента:
1. Agility 3 — проблемный диск
2. Я из раза в раз повторяю: все известные мне варианты решения проблемы с TRIM перечислены в конце статьи
Спасибо, что читаете мой блог.
Михаил
Внутренний контроллер у Vertex 3 и Agility 3 вроде как одинаков, разница только в чипах NAND (синхронные и асинхронные соответственно), насколько мне известно. А поведение разное. И зависит от степени заполненности накопителя. Странно… Просто думал, что есть какая-то конкретная информация относительно Agility 3. Будем копать дальше, пока бубен не порвется. :)
Grigory Dubinenko
1. Не пользуюсь антивирусом, когда выхожу в интернет включаю Shadow Defender, создается «песочница», после выключения компьютера «песочница» уничтожается со всем содержимым. Вопрос. Как частая работа в «песочнице» влияет на SSD и в частности на срок жизни? 2. Ресурс SSD на 256 Gb примерно 130 TB. 130TB-это суммарно чтение+запись или по каждому параметру по 130 ТВ?
Vadim Sterkin
Не вижу разницы с другой работой. Ресурс будет обсуждаться в ближайших записях, подпишитесь на блог.
Евгений Машков
Не работает трим как бы я не шаманил, ссд самсунг 850про 256гб
Евгений Зубарев
Спасибо, после ваших рекомендаций функция заработала!
Михаил Александрович
Kingston HyperX 3K 120 Гб Win7 64
Сначала не работал трим. Потом провел замену драйвера, ка в статье, и трим заработал.
Что интересно, при этом «Служба Intel @RST» перестала работать. Это нормально?
Vadim Sterkin
Не знаю, но без нее можно жить.
Костя Соколенко
А что же делать, если советы из статьи не помогают? Я на OSzone уже создал тему (http://forum.oszone.net/thread-299209.html) и в техподдержку Kingston писал, и нигде толкового ответа не получил….
Диск Kingston SV100S2256G
dobro
Samsung SSD 850 EVO mSATA 250GB прошивка EMT41B6Q
OS Windows 7 SP1 со всеми обновлениями
TRIM работает
EX
SSD Silicon Power T10 — определяется как SPCC Solid State Disk B29 (12081008096000000014)
Aida64 об SSD:
Data Set Management — Supported
Deterministic Read After TRIM — Not Supported
Команда TRIM — Supported
SSD установлен в ноутбук eMachineG620:
в BIOSе задействован AHCI режим
чипсет nVIDIA GeForce 9100M G
Windows 7 x64
C:\>fsutil behavior query DisableDeleteNotify
DisableDeleteNotify = 0
НЕ РАБОТАЕТ
В начале был контроллер nVIDIA nForce SATA Controller, потом поставил Стандартный контроллер — результат тот же.
Попытался обновить прошивку SSD но родная утилита его не определяет… хотя не думаю, что обновление прошивки поможет.
Теперь даже не знаю что и делать….
P.S.: а на что влияет Deterministic Read After TRIM ?
Vadim Sterkin
DRAT влияет на то, какие данные можно получить из NAND после их удаления из ОС. Допустим, у вас есть файл, занимающий некие блоки LBA, и эти блоки сопоставлены неким страницам NAND. Когда вы удаляете файл, контроллер получает команду TRIM и освобождает сопоставление этих страниц. Теперь при сборе мусора будет известно, что эти страницы свободны. Но данные в них пока записаны, и будут удалены только в момент стирания блока. Как скоро это произойдет, зависит от алгоритмов контроллера.
Если SSD поддерживает DRAT (Deterministic Read After Trim) и ZRAT (Zero Return After Trim), контроллер возвращает нули, когда ОС/ПО пытаются прочесть данные из этих блоков. Если ZRAT не поддерживается, контроллер может вернуть все нули или все единицы, а может что-то еще.
EX
Спасибо за ответ. Может подскажите в какую сторону покапать в моей проблеме? Перечитал и перегуглил довольно таки много…
Vadim Sterkin
Все известные мне варианты уже есть в записи.
Максим Самсоненко
На чипсетах от AMD в Raid связке будет работать TRIM ?
Kostya Loskutov
Работает.
Пару минут ждал, не больше.
Аптайм компа больше недели причем.
Kingston SSDNow V300 60gb
Спасибо за материал, для меня очень полезной оказалась статья!
Vadim Sterkin
Пожалуйста
Sim .
Intenso 256GB
Windows 10.
TRIM работает, и довольно таки быстро, прошло несколько секунд.
Marat Nuriev
Windows7 x64,
SSD: Kingston V300 120 Gb (111 GiB) — Работает!
Хотя стоит мат плата GYGABYTE GA-G31M-S2L на чипе G31, про которую во всех просторах рунета пишут, что нельзя включить режим AHCI (его нет в опциях BIOS, просто нужно выбрать авто-определение дисков) и, соответственно, «TRIM — в принципе невозможен».
Через 5 секунд — TRIM не сработал, через 10 секунд — уже убрался!
Вадим, большое спасибо Вам за Ваши статьи! С огромным интересом читаю их. Всё понятно и подробно изложено. До этого «обошёл» много сайтов, прочитав множество различных заблуждений. Желаю Вам удачной работы в этом полезном деле!
Vadim Sterkin
Марат, спасибо на добром слове!