Устройства флэш-памяти (которые используются для современных твердотельных накопителей) не могут записывать произвольные данные в любой момент; перед записью в ячейку (обычно 4 КБ) необходимо сначала удалить. К сожалению, операция удаления очень медленная; именно поэтому флэш-устройства были намного медленнее, чем магнитные накопители, несмотря на отсутствие движущихся частей.
Современные твердотельные накопители скрывают время стирания, поддерживая набор предварительно стертых ячеек, что означает, что команда записи не будет немедленно перезаписывать существующие данные, вместо этого контроллер накопителя выбирает стертую ячейку, переназначает ее и записывает с новыми данными. Это (и несколько стратегий кэширования записи размышлению) дает приводу огромный прирост скорости, значительно превосходящие магнитные диски.
Чтобы гарантировать, что всегда есть набор предварительно удаленных ячеек, каждый раз, когда ячейка не нужна, накопитель планирует ее для фонового стирания и добавляет в список платных ячеек.
К сожалению, существующие файловые системы не удосужились сообщить накопителю, когда сектор свободен. В конце концов, диск должен был быть просто тупым хранилищем битов. Удаление файла или любой другой операции, которая помечает сектор как свободный от точки зрения файловой системы, было лишь отметкой в некоторой структуре метаданных. Сам сектор не был затронут. Даже если файловая система очистит его, записав поверх него нули, накопитель не сможет узнать, означает ли это, что сектор свободен или пользователь хочет получить несколько нулей в файле. Через некоторое время у накопителя не будет свободной ячейки для стирания перед записью; и производительность трагически ухудшилась.
Инструкция TRIM была быстро составлена и принята большинством поддерживаемых файловых систем. Это простой сигнал, который файловая система использует, чтобы сообщить накопителю, что содержимое сектора больше не важно. Как только все сектора, отображенные в ячейке, освобождаются, контроллер SSD удаляет ячейку и планирует ее стирание. Если хост читает эти сектора, SSD не будет загружать данные из Flash, он немедленно отвечает нулями; но самым важным эффектом является постоянное пополнение списка предварительно удаленных ячеек.
Тем не менее, большинство SSD имеют меньшую емкость, чем физический размер флэш-памяти, иногда до 75%. Это позволяет хранить некоторые неиспользуемые ячейки даже на 100% заполненной системе, так что (перезапись) записи используемых секторов все еще происходит быстро.
TRIM был введен для того, чтобы операционная система (файловая система внутри ОС) могла сообщать носителю ATA, что сектор больше не используется файловой системой. Это не имеет ничего общего с записью на диск.
TRIM не гарантирует, что сектор обнуляется в СМИ. Он гарантирует, что когда файловая система запрашивает чтение из этого сектора, возвращаются нули (обратите внимание, что, поскольку SSD знает, что сектор должен быть нулями, он будет возвращать их независимо от того, что на самом деле хранится на носителе; может быть возможно восстановить данные с диска, который был просто обрезан, хотя обычно SSD действительно стирают память).
Файловые системы имеют тенденцию распределять свои записи (по разным причинам, от попыток выравнивания записи, до сборки мусора, рандомизации мест хранения и т. Д.). Из-за этого, если носитель не знает, какие сектора файловая система не использует, просто запись нулей не обязательно означает, что сектор не используется, то в конечном итоге он должен предположить, что используется весь диск.
Для твердотельных накопителей это предположение означает, что сектор должен быть удален во время записи, что снижает скорость записи; вместо стирания ячейки памяти во время удаления файла. Аналогично файлам виртуального диска в системах виртуализации, файл динамического диска в конечном итоге будет охватывать всю емкость виртуального диска. Если система виртуализации реализует TRIM, то она будет знать, когда сектор больше не используется, и, следовательно, что динамический диск не должен отслеживать это местоположение.
источник