В предыдущей статье мы обсудили усиление записи, обсудив, откуда оно появляется, и чем плохо для вашего 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.
Автор: alexzeynikov