Как устроен «твердотельный накопитель»? [Версия для технических переводчиков (ИТ), с ликбезом и терминами]

Как устроен твердотельный накопитель

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

Сначала давайте разберемся, что такое контроллер [controller] и флеш-память NAND [NAND flash memory]. Вместе с парой других компонентов они расположены на печатной плате [printed circuit board (PCB)] внутри корпуса и составляют твердотельный накопитель, или SSD (solid-state drive).

Контроллер

Контроллер в SSD — это встроенный процессор, который соединяет компоненты флеш-памяти с компьютером. Он выполняет коды из микропрограммы (встроенного ПО) [firmware] в SSD, чтобы обрабатывать запросы с компьютера. Работа и функции SSD зависят от контроллера.

Обычно контроллер отвечает за следующие функции:

запись [writing],
чтение [reading],
стирание [erasing],
проверка ошибок [error checking],
шифрование [encryption],
сборка мусора [garbage collection],
выравнивание износа [wear-leveling]
резервирование по технологии over-provisioning (подробности ниже).

 

Флеш-память NAND

Во всех современных стандартных SSD используется флеш-память NAND — интегральная схема для хранения информации. В корпоративных SSD обычно это SLC NAND (single-layer cell — одноуровневая, или однобитная, ячейка), а в потребительских устройствах — MLC NAND (multiple-layer cell многоуровневая ячейка). SLC быстрее и долговечнее, но зато гораздо дороже.

Когда мы записываем данные на SSD, контроллер программирует ячейки памяти. В двух словах, однобитная ячейка памяти имеет два состояния — либо у нее есть заряд, либо нет, так что она хранит данные в двоичном формате. В реальности запись данных на SSD — это процесс очень сложный. Зато читать с SSD просто, и контроллеру не приходится сильно напрягаться.

У ячеек NAND есть пара интересных особенностей. Во-первых, их можно программировать ограниченное число раз. Каждая ячейка может выдержать определенное количество циклов «программирование-стирание», или циклов перезаписи [program-erase, P/E cycle]. Контроллер пытается бороться с этой бедой с помощью выравнивания износа [wear-leveling] . Он старается не записывать данные в одни и те же ячейки, а распределять нагрузку по всем ячейкам в памяти равномерно.

Во-вторых, в отличие от жестких дисков, в NAND-памяти невозможно записать данные поверх уже имеющихся. Сначала нужно стереть старые данные, и только потом записать новые.

В-третьих, эти данные так просто не сотрешь. В SSD ячейки памяти объединяются в страницы [page] (по 4 КБ), а страницы группируются в блоки [block] (обычно по 512 КБ, то есть 128 страниц). Записывать данные можно на отдельные страницы, а вот стирать — только блоками.

Если мы удаляем с SSD данные, мы ничего не стираем, даже если чистим корзину. Мы просто сообщаем памяти, что эти данные нам не нужны. Стирание происходит, когда мы записываем на накопитель новые данные.

Из-за выравнивания износа и сборки мусора данные постоянно перезаписываются из одного места в другое. Это приводит к одному неприятному явлению — усилению записи [write amplification].

 

Усиление записи

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

Парадокс в том, что усиление записи возникает как раз в попытке продлить срок службы SSD и оптимизировать его производительность. Контроллер просто выбирает из двух зол меньшее.

 

Сборка мусора

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

 

Выравнивание износа

Контроллер следит за тем, чтобы операции стирания и перезаписи распространялись по SSD равномерно. Если бы весь удар принимали на себя, скажем, несколько первых блоков, они быстро израсходовали бы весь свой запас циклов перезаписи. Некоторые алгоритмы выравнивания износа, например, статическое выравнивание износа [static wear-leveling], даже периодически переносят неизменяемые данные (ОС или программы), чтобы записывать в эти блоки с низкой нагрузкой часто изменяемые данные. В итоге блоки на SSD тратят свои циклы перезаписи равномерно, и накопитель служит дольше.

Усиление записи требует свободного пространства, поэтому не вся емкость будет заполнена нашими данными. Обычно SSD для оптимальной работы надо хотя бы 20% свободного пространства, если только он не использует область резервирования [over-provisioning, OP].

 

Резервная область (OP)

OP означает, что какой-то объем SSD зарезервирован для контроллера и недоступен пользователю. Контроллер будет использовать это пространство для выравнивания износа, сборки мусора или других функций оптимизации производительности.

Обычно для OP резервируется от 7 до 28% емкости накопителя. Поэтому SSD с функцией OP имеют непривычную емкость, например 120, 240 или 480 ГБ вместо стандартных 128, 256 или 512. В некоторых SSD пространство для OP могут выбирать сами пользователи.

Предполагается, что OP должна повышать производительность SSD (ведь тогда контроллеру не будет требоваться буферная память [buffer space]), однако в действительности такого не происходит.

В целом, недостатки SSD видны только на этапе записи данных.

 

Некоторые важные понятия тематики SSD

 

TRIM: Операционная система посылает команду TRIM контроллеру SSD с указанием страниц памяти, которые содержат устаревшие данные [stale data] (недействительные или помеченные к удалению данные). Это позволяет контроллеру отслеживать страницы с устаревшими данными во время сборки мусора, что снижает количество операций записи. Таким образом, TRIM уменьшает усиление записи и повышает производительность накопителя.

RAISE: Технология RAISE встроена только в контроллеры SandForce. RAISE расшифровывается как Redundant Array of Independent Silicon Elements (избыточный массив независимых кремниевых элементов). Прежде всего технология RAISE применяется для SSD накопителей корпоративного уровня, а не клиентского.

IOPS: IOPS (Input/Output Operations Per Second) – количество операций ввода/вывода. Измеряемой величиной IOPS является операция произвольного доступа [random access]. Произвольный доступ (ПД)– это возможность случайного доступа (чтения/записи) к данным из разных областей носителя. ПД обычно ассоциируется с передачей данных небольшого объема.

Произвольный доступ, а также значения его задержек [latency] (обычно низкие на SSD) показывают, за какое время может быть получен доступ к данным, что отражается на времени начальной загрузки [boot time], времени запуска приложения [application launch time] и общей производительности. На жестких дисках [hard drives] скорость произвольного доступа обычно низкая и колеблется в пределах от 75 до 250 IOPS, а на SSD накопителях – от 50 000 IOPS до 100 000 IOPS, и это не предел.

 

По материалам https://www.cnet.com/how-to/digital-storage-basics-part-4-ssd-explained/

Перевели и адаптировали:
Марина Попович, технический англо-русский переводчик, бюро переводов «Альянс ПРО»;
Дарья Головачева, технический англо-русский переводчик-стажёр, бюро переводов «Альянс ПРО».