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

Избыточность данных
Следующий фактор, влияющий на усиление записи — избыточность данных (overprovisioning). Избыточность показывает разницу между реальной емкостью устройства и объемом, доступным для операционной системы, и вычисляется по формуле:

(Физический объем - Логический объем) / Логический объем

Во время сборки мусора, выравнивания износа и ремаппинга плохих блоков, контроллер SSD использует это «лишнее» место для того, чтобы уменьшить усиление записи. Поэтому данный фактор является переменным (то есть от его значения зависит уровень WA) и инверсным (чем больше его значение, тем ниже уровень WA).



Первый уровень избыточности разработчикам SSD «подарила» привычка производителей традиционных HDD измерять объем в «десятичных» гигабайтах, вместо привычных «двоичных» гибибайтов. Ячейки памяти SSD хранят единичные биты, организуемые в байты, потом в кибибайты и так далее до гибибайтов, хотя емкость готового изделия декларируется в гигабайтах. Разница между этими величинами в реальности составляет 7.37%, и обычно этот объем используется для служебных нужд, хотя и не считается в традиционный объем «избыточности».

Второй уровень избыточности закладывается производителем, и обычно составляет 0%, 7% или 22%. Например, на базе чипов емкостью 128 Gb производитель может выпустить SSD объемом 100 Gb, 120 Gb и 128 Gb, что и дает нам 22%, 7% или 0% соответственно.

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



TRIM
Наличие команды TRIM является фактором бинарным, и ее наличие является фактором, обратно влияющим на усиление записи (проще говоря он уменьшает WA).

Про TRIM написано очень много, но на всякий случай вкратце повторюсь. TRIM — команда интерфейса ATA (в SCSI есть аналогичные TRIM команды UNMAP и WRITE SAME), с помощью которой операционная система может сообщить накопителю о том, какие блоки уже не используются из-за того что файлы, содержавшиеся в них удалены, или раздел вообще отформатирован. Получив от ОС эту полезную информацию, SSD помечает указанные сектора как находящиеся в «некорректном» состоянии и не пытается сохранить его содержание при дальнейших операциях сборки мусора.

В результате использования команды TRIM, SSD может порой значительно сократить объемы данных, перезаписываемые в ходе сборки мусора, и таким образом уменьшить WA.

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

Разумеется, команду должен поддерживать и сам диск, но в наше время SSD без поддержки TRIM уже являются нечастой экзотикой.

Свободное место
Как я и писал в разделе про избыточность данных, свободное место так же влияет на WA, поэтому я просто еще раз отмечу этот фактор, он является переменным и так же находится с усилением записи в обратной пропорции.

Безопасное стирание
Отдельная команда ATA предназначена для полной безопасной очистки диска. В случае если SSD не использует аппаратное шифрование, после этой команды диск фактически возвращается в состояние, аналогичное заводскому. Это увеличивает его производительность до максимально возможного уровня, а усиление записи — уменьшает до минимума. Разумеется по мере заполнения эти показатели отклоняютя от своих идеальных состояний.

Диски, шифрующие информацию «на лету» могут выполнять команду безопасного стирания по-другому. Им достаточно обнулить текущий ключ шифрования и сгенерировать новый, после чего данные станут нечитаемыми. В этом случае, для восстановления максимальной производительности необходима еще команда TRIM, которая укажет что данные вам уже точно не нужны ни в каком виде.

Выравнивание износа
Как я уже писал в статье про историю FLASH, все ячейки памяти имеют ограничение по количеству максимально возможных циклов перезаписи. Очевидно, что некоторые ячейки будут перезаписываться чаще, некоторые реже, что приведет к преждевременному выходу части ячеек из строя. Первые кандидаты на это — начальные области диска, где традиционно хранятся служебные таблицы ОС. Разумеется, диск может «заменить» сбойные ячейки другими, из числа «избыточных», в конце концов процесс ремаппинга был придуман задолго до SSD, но современные флеш-накопители стараютя этого не допустить как можно дольше.

Для этого используется процесс «выравнивания износа»: SSD пишут во все ячейки равномерно, периодически меняя их. В теории, это позволяет использовать все ячейки максимально, до того как они будут выходить из строя. На практике, этот процесс надо выполнять очень вдумчиво. Выравнивание износа требует, чтоб данные, которые были ��дин раз записаны и больше не перезаписывались (холодные), периодически переносились на другое место, чтоб дать возможность записи часто изменяющихся (горячих) данных в те ячейки, что занимали холодные. Как вы уже понимаете, это ведет к усилению записи и износу диска.

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

Другие методы
Также современные контроллеры SSD производят ряд более сложных оптимизаций, часть из которых я вкратце упомянул в предыдущей статье, для улучшения показателей WA.

Понятно, что не все данные на диске меняются с одинаковой частотой. Есть данные динамические, а есть статические. Разделить их в разных областях диска — чаще всего хорошая идея, так как это позволит «не трогать» блоки статических данных при перезаписи. Главный недостаток этого процесса состоит в том, что он входит в противоречие с выравниванием износа, требующим максимально равномерной загрузки ячеек.

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

Ни одному дипломату в мире не приходится идти на такие компромиссы, на которые идут контроллеры SSD (и их разработчики), а сложность современных контроллеров возрастает, открывая новые возможности оптимизации. Думаю, в одной из следующих стат��й я вернусь к теме контроллеров SSD и расскажу об их работе на конкретном примере семейства SandForce от LSI.