Ssd TRIM/DISCARD детали

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

С другой стороны, если я не выдаю TRIM для пустых блоков, которые ранее использовались файловой системой (например, части файла, которые содержали только нули), есть ли какие-либо издержки при записи значимых данных в эти блоки? Другими словами, достаточно ли "умного" ssd, чтобы не выполнять цикл чтения-изменения-записи, поскольку блок уже находится в своем "основном" состоянии?

Зависит ли этот контроллер (меня больше всего волнует новая Sandforce)?

2 ответа

Решение

Джастин Линн ответит полностью правильно. Я просто хотел обратиться к другой части вашего вопроса.

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

РЕДАКТИРОВАТЬ: Что касается вопроса о том, что происходит, когда SSD необходимо записать в блок, который заполнен, труднее ответить. Даже если в блоке нет данных, которые необходимо стереть, все равно могут быть метаданные, которые необходимо стереть. Если это не так, и блок полностью доступен для записи, это зависит от реализации SSD GC.

Другая возможность заключается в том, что твердотельный накопитель достаточно умен, чтобы при записи в него заполненного нулями LBA он осознавал, что нет необходимости записывать данные в NAND. Вместо этого он просто отображает LBA и при запросе данных возвращает нули, как значение по умолчанию для не отображенных LBA. Я не удивлюсь, если диски SandForce сделают это, поскольку они уже выполняют сжатие и дедупликацию данных. Я не знаю, делают ли это другие SSD.

Я понимаю, что в моем ответе есть много вариантов, возможно, и я не знаю, но нет никаких общих правил по этому поводу, которым должен следовать производитель SSD, так что это должны решать отдельные производители. Люди, знакомые с этими решениями, не могут говорить о них, так как конкретные реализации этих алгоритмов GC очень важны для производительности SSD.

Что ж, TRIM как команда просто сообщает контроллеру SSD, что блок больше не требуется файловой системе и что контроллер может больше не беспокоиться о блоке, когда он собирает мусор, освобождая флэш-память. В противном случае SSD пришлось бы перемещать [теперь удаленный] блок во время сбора мусора. TRIMing больших блоков нулей не должен увеличивать износ диска, а наоборот, контроллеров с надлежащей реализацией TRIM. Тем не менее, точное поведение зависит от контроллера, но для целей вашего использования, я не буду беспокоиться о том, чтобы TRIMing больших областей с нулевыми блоками, во всяком случае, вы избавите SSD от необходимости копировать блоки нулей, пока он ШС. Я не эксперт по протоколу SATA, но это выглядит как довольно четкий вывод из чтения http://en.wikipedia.org/wiki/Write_amplification, особенно http://en.wikipedia.org/wiki/Write_amplification,

Другие вопросы по тегам