14

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

Если это правильно, значит ли это, что твердотельные накопители, которые не используют TRIM, при удалении файла записывают нули в блоки, чтобы дать SSD знать, что блоки свободны?

Читать это

Файловые системы в гостевой системе, как правило, не используют блоки повторно, что означает, что даже если файловая система остается небольшой по сравнению с размером виртуального изображения, фактический размер изображения имеет тенденцию к росту до достижения максимального размера.

заставляет меня задуматься, SSD не перезаписывают нулями? Или файловые системы в гостях, что-то совершенно другое?

2 ответа2

14

Устройства флэш-памяти (которые используются для современных твердотельных накопителей) не могут записывать произвольные данные в любой момент; перед записью в ячейку (обычно 4 КБ) необходимо сначала удалить ее. К сожалению, операция удаления очень медленная; именно поэтому флэш-устройства были намного медленнее, чем магнитные накопители, несмотря на отсутствие движущихся частей.

Современные твердотельные накопители скрывают время стирания, поддерживая набор предварительно стертых ячеек, что означает, что команда записи не будет немедленно перезаписывать существующие данные, вместо этого контроллер накопителя выбирает стертую ячейку, переназначает ее и записывает с новыми данными. Это (и несколько стратегий кэширования записи размышлению) дает приводу огромный прирост скорости, значительно превосходящие магнитные диски.

Чтобы всегда иметь набор предварительно удаленных ячеек, каждый раз, когда ячейка не нужна, накопитель планирует ее для фонового стирания и добавляет в список платных ячеек.

К сожалению, существующие файловые системы не удосужились сообщить накопителю, когда сектор свободен. В конце концов, диск должен был быть просто тупым хранилищем битов. Удаление файла или любой другой операции, которая помечает сектор как свободный от точки зрения файловой системы, было лишь отметкой в некоторой структуре метаданных. Сам сектор не был затронут. Даже если файловая система очистит его, записав поверх него нули, накопитель не сможет узнать, означает ли это, что сектор свободен или пользователь хочет получить несколько нулей в файле. Через некоторое время у накопителя не будет свободной ячейки для стирания перед записью; и производительность трагически ухудшилась.

Инструкция TRIM была быстро разработана и принята большинством поддерживаемых файловых систем. Это простой сигнал, который файловая система использует, чтобы сообщить накопителю, что содержимое сектора больше не важно. Как только все сектора, отображенные в ячейке, освобождаются, контроллер SSD удаляет ячейку и планирует ее удаление. Если хост читает эти сектора, SSD не будет загружать данные из Flash, он немедленно отвечает нулями; но самый важный эффект заключается в том, чтобы список предварительно удаленных ячеек всегда пополнялся.

Тем не менее, большинство SSD имеют меньшую емкость, чем физический размер флэш-памяти, иногда до 75%. Это позволяет хранить некоторые неиспользуемые ячейки даже на 100% заполненной системе, так что (перезапись) записи используемых секторов все еще происходит быстро.

8

TRIM был введен для того, чтобы операционная система (файловая система внутри ОС) могла сообщать носителю ATA, что сектор больше не используется файловой системой. Это не имеет ничего общего с записью на диск.

TRIM не гарантирует, что сектор обнуляется в СМИ. Он гарантирует, что когда файловая система запрашивает чтение из этого сектора, возвращаются нули (обратите внимание, что, поскольку SSD знает, что сектор должен быть нулями, он будет возвращать их независимо от того, что на самом деле хранится на носителе; возможно, можно восстановить данные с диска, который был просто обрезан, хотя обычно SSD действительно стирают память).

Файловые системы имеют тенденцию распределять свои записи (по разным причинам, от попыток выравнивания записи, до сборки мусора, рандомизации мест хранения и т.д.). Из-за этого, если носитель не знает, какие секторы файловая система не использует, просто запись нулей не обязательно означает, что сектор не используется, тогда он должен в конечном итоге предположить, что используется весь диск.

Для твердотельных накопителей это предположение означает, что сектор должен быть удален во время записи, что снижает скорость записи; вместо стирания ячейки памяти в момент удаления файла. Аналогично файлам виртуального диска в системах виртуализации, файл динамического диска в конечном итоге будет охватывать всю емкость виртуального диска. Если система виртуализации реализует TRIM, то она будет знать, когда сектор больше не используется, и, следовательно, что динамический диск не должен отслеживать это местоположение.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .