Казалось бы, твердотельные накопители (SSD), которые в своей работе не используют механизмов, имеют шансы на долгое время использования (как процессоры с памятью). Но нет – SSD с течением времени изнашиваются, причем степень их износа довольно легко измеряется. Рассмотрим подробнее технологию его работы.
Износ SSD
Для хранения данных в SSD-накопителях используют флеш-память, состоящую из транзисторов, способных хранить в себе электрический заряд. Принцип его работы можно понять на примере транзистора с плавающим затвором (в нем помимо управляющего затвора есть второй, плавающий, изолированный между двумя слоями диэлектрика). При прохождении тока через такой транзистор часть электронов под воздействием электрического поля туннелируется («перепрыгивает») через тончайший диэлектрик и скапливается в заключенном в нем проводнике (рис.1). Иначе говоря, в плавающем затворе накапливается заряд, сохраняющийся и после прекращения тока. Подачей отрицательного напряжения на управляющий затвор этот заряд можно вытеснить назад (обнулить).
Если научиться измерять заряд в плавающем затворе и принять его наличие за 1, а отсутствие за 0, мы получим способ хранения данных, известный как single-level cell (SLC) – один транзистор хранит 1 бит. При более точном измерении заряда в затворе можно хранить состояние уже не одного, а двух-трех бит в одном транзисторе. Эти способы хранения данных известны как multi-level cell (MLC) и triple-level cell (TLC) соответственно. Первый требует от измерителя различия четырех уровней заряда (22), а второй – уже восьми (23).
Все бы хорошо, но при записи новой информации (с предшествующим стиранием старой) свойства туннелируемого диэлектрика затвора постепенно ухудшаются – вследствие воздействия напряжения нарушается его структура. И в конечном счете это приводит к проводимости в диэлектрике и невозможности использования транзистора для хранения информации. В памяти типа SLC каждый транзистор выдерживает порядка 100 тысяч изменений заряда в затворе (записи данных), MLC – порядка 10 тысяч, а TLC порядка 200–500 (не тысяч!). Практически все современные SSD-накопители используют память типа MLC и TLC.
Иными словами, если просто хранить данные на массиве из транзисторов с плавающим затвором, очень скоро некоторые транзисторы выйдут из строя (потому что запись в них по какой-то причине была очень частой). И весь массив окажется не годен к дальнейшему использованию.
Адаптация к реальному использованию
Современный SSD-накопитель – это не просто интерфейс между протоколом доступа и транзисторами, объединенными по принципу NAND-памяти. Помимо этого в нем используется множество технологий, маскирующих от пользователя технологические издержки.
Равномерность износа ячеек памяти
При постоянной перезаписи одного и того же логического блока (LBA) на SSD износ всех ячеек памяти будет более-менее равномерным. Это достигается записью по типу redirect-on-write – вместо изменения оригинальных данных новые данные записываются в наименее изношенный физический блок из числа свободных, после чего указатель физического расположения данных для LBA меняют на новый. Сами таблицы указателей при этом хранятся в оперативной памяти контроллера (от потери питания данные в ОЗУ защищаются суперконденсаторами).
Команды trim (SATA) и unmap (SAS)
Может показаться, что использование trim/unmap-команд со стороны файловой системы продлевает срок службы накопителя, освобождая больше блоков для механизма выравнивания износа. Но на деле это может только мешать.
Запись во флеш-память производится постранично (в свободные страницы порядка нескольких килобайт), в то время как освобождение самих страниц для возможности новой записи требует стирания всего блока (порядка нескольких мегабайт).
При использовании trim/unmap высвобождается большой диапазон LBA, но в силу использования redirect-on-write высвобождаемые страницы могут располагаться во множестве блоков, не занимая их полностью. В итоге получаются блоки с «дырками», которые нельзя использовать для записи до момента их очистки (обычно она выполняется фоном и незаметна для приложения). А сама очистка тоже требует ресурсов – для каждого блока нужно прочитать занятые страницы, записать их в свободный блок и полностью стереть исходный блок. То есть помимо дополнительного износа накопителя использование trim/unmap также может приближать состояние SSD, известное как Write Cliff, когда все свободные страницы нуждаются в очистке и ее приходится проводить непосредственно в момент записи (сильно увеличивая время выполнения команд).
Обычно запаса резервных блоков на SSD хватает для обеспечения равномерного износа, и использование trim/unmap команд не требуется.
Over-provisioning
Технология равномерного износа ячеек памяти, помимо увеличения срока службы устройства, дает возможность создать накопитель с гарантированным количеством записей, превышающим таковое для транзисторов, из которых он состоит. Это достигается путем использования в SSD флеш-памяти большей емкости, чем доступно приложению.
Характеристикой получившегося таким образом SSD является количество ежедневных перезаписей всего накопителя (drive writes per day – DWPD) в течение гарантийного срока. Например, внутри SSD емкостью 800 ГБ с гарантированной 10-кратной полной ежедневной перезаписью (DWPD 10) в течение 5 лет находится порядка 1200 ГБ флеш-памяти.
Эта же технология позволяет производителям представить накопитель одной внутренней емкости как целую линейку продуктов с разными внешними емкостями: read-intensive (0,1–0,5 DWPD), mixed use (3–5 DWPD) и write-intensive (10–25 DWPD). Причем в последнее время по мере увеличения емкостей SSD и их переклассификации из кэширующего уровня в уровень хранения отмечается тенденция снижения DWPD. Например, утилизация DWPD 3 для 6,4 ТБ накопителя требует круглосуточной записи на него со скоростью более 200 МБ/с (для сравнения – это предельные скорости работы HDD).
Коррекция возникающих ошибок
Подавляющее большинство ошибок чтения (BER), возникающих внутри SSD, автоматически исправляется кодами коррекции ошибок (ECC), для работы которых требуется дополнительное пространство хранения (от 0,2% для SLC до 5% для TLC). А на случай выхода из строя сразу множества ячеек одного чипа (с чем ECC не справится) записываемые данные хранятся в виде, подобном RAID5, между чипами. Это требует дополнительного пространства для хранения результатов XOR, но в то же время продлевает срок службы SSD, допуская постепенный выход из строя участков одного чипа. Все вместе позволяет гарантировать частоту некорректируемых ошибок (UBER), намного ниже таковой на HDD того же объема (порядка 1 на 1017 против 1 на 1015).
Но кроме исправления корректируемых ошибок сама статистика их возникновения позволяет чаще использовать более качественные страницы памяти, выравнивая их износ с учетом фактического качества работы (а не целевого количества перезаписей). Это же позволяет удешевить сам накопитель, смешивая в нем чипы разных уровней качества.
Бережное отношение к транзисторам
Еще одним способом продлить срок службы флеш-памяти является постепенное увеличение напряжения при записи. Если для накопления/схождения требуемого заряда к транзистору можно приложить напряжение, меньшее максимально допустимого, это позволит снизить износ диэлектрика и увеличить количество перезаписей, которое транзистор сможет выдержать. По мере роста неудачных попыток записи напряжение плавно увеличивается, а когда и максимальное напряжение не дает нужного эффекта, страница выводится из использования.
Старение данных
Заряд, накопленный в транзисторе, с течением времени самопроизвольно стекает. Время снижения заряда до границы изменения значения битов данных зависит от температуры и степени износа накопителя. При одинаковой температуре записи и хранения для изношенного накопителя время сохранности данных исчисляется лишь неделями, причем чем ниже температура записи и выше температура хранения, тем срок короче (таблица).
То есть контроллер твердотельного накопителя должен постоянно отслеживать целостность хранимых данных. И при достижении некоторого порога корректируемых ошибок блок данных должен быть куда-нибудь перемещен, просто для перезарядки транзисторов. Отсюда можно сделать вывод, что даже при отсутствии записи со стороны приложения запас ресурса по записи у накопителя снижается.
Еще одна интересная особенность старения данных на SSD – по тому же стандарту JEDEC для накопителей потребительского класса время гарантированного хранения выше почти на порядок по сравнению с Enterprise.
Ресурсы закончились
В статистике S.M.A.R.T. для SSD есть счетчик, отвечающий за износ накопителя. На новых дисках он равен 100%, а порог износа, при котором срабатывает предупреждение, обычно составляет 2%. При достижении этим счетчиком значения 0% диск по-прежнему принимает команды записи, но гарантия производителя на этом заканчивается.
Интересное начинается при исчерпании резервных блоков – отключается защита данных (которая подобна RAID5), и блоки, используемые для хранения избыточности, высвобождаются под данные. После этого любая ошибка, которую не удалось исправить через ECC, будет доходить до приложения в виде некорректируемой (UBER резко увеличивается, но гарантия к этому моменту уже закончилась).
При выборе SSD, помимо емкости и производительности, особое внимание нужно уделять износостойкости (DWPD) и гарантийному сроку. Особенно для задач кэширования, в которых запись ведется практически непрерывно. Для того чтобы примерно понять, на какой класс накопителей ориентироваться, можно попробовать перевести планируемую нагрузку в среднюю скорость записи в течение суток. Далее, исходя из целевого объема SSD, можно вычислить требуемое количество DWPD. Пример такого расчета приведен на графике.
На случай изменения характера нагрузки и преждевременного исчерпания ресурсов SSD их износ следует отслеживать. Проблемой будет не внезапный выход из строя накопителя (обычно он участвует в RAID с избыточностью), а увеличение времени выполнения команд чтения/записи, что может привести к неприемлемой скорости работы приложения. Все современные диски позволяют отслеживать износ через интерфейс S.M.A.R.T. либо через служебные утилиты.
И не стоит надолго отключать SSD от питания, а если приходится это делать, температура хранения должна быть низкой.