← Все статьи

Почему SSD меняет скорость: NAND, FTL, DRAM, HMB и SLC-кэш

Обобщённая структура SSD: логические адреса, контроллер и NAND

SSD преобразует адреса и управляет хранением, очередями и коррекцией ошибок. Быстрый интерфейс является только одним участком системы. Открыть иллюстрацию в полном размере.

Копирование начинается быстро, затем скорость падает, после паузы снова возвращается. Другой SSD показывает внушительное последовательное чтение, но не сокращает время запуска программы пропорционально цифрам на коробке. Это не обязательно неисправность. Накопитель управляет NAND, преобразует адреса, распределяет запросы по каналам, подготавливает свободные блоки и использует несколько разных видов буферизации. Его производительность зависит не только от команды, которую отправили сейчас, но и от того, что происходило раньше. Чтобы понять изменения скорости, нужно разделить свойства памяти, работу контроллера и состояние всего пути ввода-вывода.

Содержание статьи
  1. SSD — самостоятельная вычислительная система
  2. Что хранит ячейка NAND
  3. FTL: почему логический адрес не закреплён за одной ячейкой
  4. DRAM, HMB и SLC-кэш решают разные задачи
  5. Почему быстрая запись заканчивается
  6. Сборка мусора, TRIM и резерв свободного места
  7. Write amplification: сколько записано внутри
  8. Последовательная скорость, IOPS и задержка
  9. Температура, питание и состояние всей системы
  10. Как исследовать скорость без бессмысленного износа
  11. Первичные источники
  12. Читайте также

SSD — самостоятельная вычислительная система

Компьютер обращается к накопителю по логическим адресам. Внутри SSD контроллер определяет физическое размещение данных, управляет интерфейсами NAND, исправлением ошибок и служебными операциями. У него есть процессорные ресурсы, встроенная оперативная память, прошивка и различные аппаратные ускорители. На плате могут находиться отдельная DRAM и цепи защиты питания, но состав зависит от класса и конструкции. Отсутствие микросхемы DRAM не означает отсутствие контроллера, таблиц адресации или любых буферов.

NVMe описывает протокол взаимодействия, PCI Express — используемый в типичном внутреннем NVMe SSD транспортный путь, а M.2 — прежде всего форм-фактор и набор механических и электрических вариантов. Эти слова отвечают на разные вопросы. Накопитель может иметь быстрый интерфейс, который не удаётся полностью загрузить конкретной NAND или запросами программы. Также нельзя переносить характеристики одного исполнения на другую ёмкость только из-за общего торгового имени: число кристаллов и параллелизм могут различаться.

Учебная сборка мусора в блоке из восьми страниц
Шесть актуальных страниц сохраняются, две не нужны. После переноса и стирания чистый прирост свободного пространства равен двум страницам. Открыть иллюстрацию в полном размере.

Что хранит ячейка NAND

Ячейка хранит информацию как различимые состояния электрического заряда, которым соответствуют диапазоны порогового напряжения. Один бит требует двух логических состояний, два бита — четырёх, три — восьми, четыре — шестнадцати. В обычной терминологии это SLC, MLC, TLC и QLC; слово MLC иногда используют шире для многобитовой памяти, поэтому контекст полезно проверять. Большее число битов повышает плотность хранения, но требует различать больше уровней и учитывать их изменения при эксплуатации.

Нельзя выводить скорость и ресурс готового SSD только из количества битов. Имеют значение поколение NAND, её устройство, алгоритмы программирования, число одновременно работающих кристаллов, коррекция ошибок и прошивка. Условия сохранности данных также зависят от износа, температуры и заданного класса применения. Поэтому утверждение «любая TLC всегда быстрее любой QLC во всём» слишком сильное. Верно другое: организация многобитовой записи создаёт ограничения, с которыми контроллер должен справляться на уровне системы.

Страницы и блоки стирания

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

Учебная аналогия — блок из восьми страниц, где шесть остаются актуальными, а две больше не нужны. Чтобы стереть весь блок, сначала сохраняют шесть актуальных страниц в другом месте. Само стирание освобождает восемь страниц, но шесть уже заняты перенесёнными данными; чистый прирост свободного места в такой упрощённой модели составляет две страницы. Реальный контроллер выбирает жертвы и распределяет переносы гораздо сложнее. Аналогия объясняет, почему освобождение пространства может требовать дополнительных операций чтения и записи.

Параллелизм NAND: корпус не равен независимому каналу

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

Полоса интерфейса NAND описывает передачу между контроллером и памятью, а время программирования определяет, когда сама память готова принять следующую подходящую операцию. Высокая скорость линии не отменяет внутренних пауз. Контроллеру нужны независимые цели, свободные блоки и достаточно работы, чтобы использовать канал эффективно. Эта логика объясняет две ситуации: небольшой запрос не раскрывает весь накопитель, а длинный поток может упереться во внутреннюю запись раньше максимума PCIe. Увеличение скорости транспорта помогает только после того, как остальные участники способны её использовать.

FTL: почему логический адрес не закреплён за одной ячейкой

Flash Translation Layer, или FTL, связывает логические адреса хоста с физическим размещением в NAND. После обновления данных эта связь может измениться. Программе не требуется знать, какой кристалл и блок сейчас хранит нужный участок: она продолжает обращаться к прежнему логическому адресу. Контроллер обновляет свои метаданные и сохраняет возможность восстановить непротиворечивое состояние. Именно управление отображением отличает SSD от набора просто подключённых микросхем памяти.

Представим условный логический блок LBA X. До обновления его содержимое находится в физическом месте P1, после — в P2. Новую версию нужно записать, изменить актуальную ссылку и признать старую версию неактуальной в согласованном порядке. Реальные методы журналирования и фиксации различаются, поэтому эта схема не описывает конкретную прошивку. Она показывает назначение таблиц: теоретически быстрый доступ к NAND бесполезен, если контроллеру сначала приходится долго искать физическое положение нужных данных.

Обновление FTL: логический адрес LBA X перенаправляется с P1 на P2
Программа продолжает использовать тот же логический адрес, а контроллер меняет внутреннее физическое размещение актуальной версии. Открыть иллюстрацию в полном размере.

Размер отображения и цена промаха

Если мысленно разделить 1 ТБ десятичной ёмкости на участки по 4 КиБ, получится около 244 миллионов участков. При условных четырёх байтах на запись простая сплошная таблица заняла бы примерно 977 МБ. Это учебная оценка порядка величины, а не описание обязательного размера DRAM на SSD. Реальные FTL могут использовать другую гранулярность, многоуровневые структуры, сжатие и кэширование. Но становится понятно, почему работа с метаданными заслуживает собственной быстрой памяти.

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

DRAM, HMB и SLC-кэш решают разные задачи

Локальная DRAM — энергозависимая память рядом с контроллером. Она может хранить таблицы отображения, служебные структуры и, в зависимости от реализации, данные. Это не означает, что все пользовательские записи обязательно проходят через большой DRAM-буфер, и не означает, что на SSD без DRAM нечему кэшировать информацию. Встроенная SRAM контроллера также участвует в работе, хотя её возможности и объём отличаются. Архитектуру нельзя надёжно восстановить по одному отсутствующему компоненту.

HMB, Host Memory Buffer, позволяет совместимому NVMe-контроллеру использовать выделенную хостом область системной RAM. Функция требует согласования с драйвером; её наличие и включение не следует предполагать для любого пути подключения. Внешний USB-мост, другая среда загрузки или программный стек могут изменить доступность возможностей устройства. HMB находится за интерфейсом хоста и не становится физически локальной DRAM только потому, что участвует в похожих служебных задачах.

Особенно важно не путать HMB с обычным файловым кэшем операционной системы. Файловый кэш хранит данные на стороне ОС по её правилам; HMB выделяется для использования контроллером. Это разные владельцы, назначения и уровни стека. Производитель может применять HMB для ускорения управления памятью, но универсальный вывод «из RAM компьютера сделали огромный кэш записи» неверен. Конкретный эффект нужно связывать с реализацией и характером доступа, а не только с самим сокращением.

SLC-кэш находится уже в NAND. Часть многобитовой памяти может работать в режиме, где на ячейку записывается меньше информации, обычно один бит. Это ускоряет приём данных, а затем контроллер переносит или преобразует их в более плотное представление. Таким образом, SLC-кэш и DRAM/HMB принадлежат разным уровням и не заменяют друг друга. DRAMless SSD вполне может иметь заметный SLC-кэш и быстро принимать короткие серии записей.

Отличия локальной DRAM, HMB в памяти хоста и SLC-кэша в NAND
DRAM и HMB помогают контроллеру работать с оперативными структурами, а SLC-область меняет режим хранения части пользовательских записей. Открыть иллюстрацию в полном размере.

Почему быстрая запись заканчивается

Размер SLC-области может включать фиксированную часть и динамическую, зависящую от доступного пространства и политики прошивки. Когда поток новых данных обгоняет скорость их дальнейшего размещения, свободная быстрая область заканчивается. После этого хост наблюдает другую устойчивую скорость или более сложные колебания. Это естественное следствие ограниченной буферизации. Нельзя по короткому тесту, полностью поместившемуся в кэш, предсказать время непрерывной записи существенно большего объёма.

Отношение физической площади к пользовательской ёмкости здесь принципиально. Одно и то же число ячеек в режиме одного бита хранит примерно втрое меньше данных, чем при трёх битах, и примерно вчетверо меньше, чем при четырёх. Эти соотношения объясняют цену SLC-режима по ёмкости, однако не позволяют напрямую вычислить доступный кэш из свободных гигабайтов в проводнике. Контроллер резервирует пространство, работает с блоками и одновременно обслуживает служебные процессы.

Учебный расчёт большого копирования

Пусть условный накопитель принимает первые 60 ГБ со скоростью 3 ГБ/с, а оставшиеся данные — со скоростью 0,6 ГБ/с. Для записи 200 ГБ время в такой двухфазной модели равно 60 / 3 + 140 / 0,6 ≈ 253,3 с, то есть около 4 минут 13 секунд. Средняя скорость составит примерно 0,79 ГБ/с. Первые 20 секунд показывают высокий темп, но не описывают остальные почти четыре минуты работы.

Учебная скорость записи 3 ГБ/с до 60 ГБ и 0,6 ГБ/с далее до 200 ГБ
График задан как функция записанного объёма. Двухфазная модель даёт около 253,3 секунды на 200 ГБ и среднюю скорость около 0,79 ГБ/с. Открыть иллюстрацию в полном размере.

В этом примере специально предполагается заданная граница двух фаз; параллельное освобождение кэша и изменение скорости не моделируются. Реальный график может иметь ступени, колебания или плавные участки, а граница будет зависеть от предыстории. Если после паузы быстрая фаза вернулась, это совместимо с подготовкой свободной области, но не доказывает единственный механизм. За ту же паузу могла снизиться температура. Для различения нужны сопоставимые условия и несколько независимых наблюдений.

Сборка мусора, TRIM и резерв свободного места

Garbage collection собирает свободное пространство из блоков с разной долей актуальных страниц. Контроллер может выполнять работу заранее либо вынужденно, когда запас подготовленных блоков заканчивается. Во втором случае служебные операции сильнее конкурируют с запросами пользователя. Поведение заполненного SSD поэтому может отличаться от почти пустого, даже если суммарный объём данных текущей операции одинаков. Свободное место ценно не только как возможность сохранить следующий файл.

Удаление файла в файловой системе и знание контроллера о ненужности его данных — разные события. Команды освобождения диапазонов, часто обобщённо называемые TRIM, сообщают накопителю, какие логические области можно перестать сохранять. Конкретная команда зависит от протокола. Это не команда немедленно стереть каждую соответствующую ячейку и не доказательство гарантированного уничтожения данных. Для производительности смысл в том, что контроллеру не требуется бесконечно переносить уже ненужное содержимое.

Резервирование пространства производителем и свободное место файловой системы тоже различаются. Последнее помогает контроллеру только в той мере, в какой информация об освобождении доходит до устройства и используется им. Универсального процента, обеспечивающего одинаковую скорость каждому SSD, нет. Полезно знать рекомендации конкретной модели и характер своей нагрузки. Постоянная запись случайных небольших обновлений и редкое последовательное копирование архива предъявляют разные требования к запасу блоков и внутренней работе.

Write amplification: сколько записано внутри

Хост может передать 10 ГБ новых данных, а внутренние операции NAND вместе с переносами составят условные 25 ГБ. Отношение 25 / 10 = 2,5 называют коэффициентом усиления записи, WAF, если обе величины измерены в согласованных границах. Это не значит, что пользовательский файл сам стал в два с половиной раза больше. Дополнительные записи обслуживают организацию хранения, сборку мусора и другие внутренние задачи. Методика учёта разных служебных операций зависит от доступных счётчиков.

Высокий WAF может влиять на устойчивую скорость, энергию и расход ресурса NAND. Но его нельзя восстановить только по проценту здоровья в произвольной утилите. Стандартизованные и фирменные SMART-поля имеют разные единицы и смысл. TBW в характеристиках — показатель установленного производителем ресурса записи в определённых условиях, а не таймер неизбежного отказа в конкретную секунду. Резервное копирование нужно независимо от того, сколько процентов ресурса показывает программа.

Последовательная скорость, IOPS и задержка

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

IOPS — число операций в секунду; размер каждой операции обязателен для интерпретации. Условные 100 000 операций по 4 КиБ дают 409 600 000 байт/с, то есть 409,6 МБ/с. Если размер операции изменится, та же численная величина IOPS будет означать другой поток байтов. Но и перевод в МБ/с не заменяет задержку: приложение может ждать завершения одного запроса перед отправкой следующего и не создавать достаточного параллелизма для высокого суммарного темпа.

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

Глубина очереди не является бесплатным ускорением

Очередь независимых запросов помогает распределить работу по каналам и кристаллам NAND. При одном запросе такой свободы меньше. В установившейся системе связь среднего числа запросов, темпа и времени можно выразить законом Литтла. Например, при 100 000 операций/с и среднем времени 0,2 мс среднее число одновременно незавершённых операций равно 20. Это учебный расчёт, который предполагает согласованные границы измерения и устойчивый режим.

Увеличение очереди сверх полезного уровня способно поднять ожидание без значимого роста темпа. Для интерактивной работы важна не только средняя задержка, но и её длинный хвост. Редкие долгие ответы могут тормозить цепочку зависимых операций. Поэтому тест на большой очереди и итоговая строка гигабайтов в секунду описывают лишь один режим. Честное сравнение указывает размер блока, чтение или запись, случайность, число потоков, очередь и длительность.

Чтение тоже включает внутреннюю работу

Прочитать NAND — не просто передать готовые байты по PCIe. Нужно найти физическое размещение, выполнить считывание, проверить и при необходимости исправить ошибки, затем доставить данные хосту. Коррекция ошибок является штатной частью хранения, а не доказательством того, что накопитель уже сломан. При сложном считывании могут потребоваться дополнительные действия контроллера, увеличивающие время ответа. Но отдельный длинный запрос без доступных внутренних счётчиков нельзя уверенно приписать именно повторному чтению: конкуренция, очередь и фоновые операции дают похожее наблюдение.

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

Температура, питание и состояние всей системы

Контроллер может уменьшать активность при достижении своих тепловых условий. Одновременно высокую температуру способны сопровождать активная запись и сборка мусора. Совпадение графиков ещё не показывает причинность. Полезно сопоставить одинаковую работу при штатно улучшенном воздушном потоке и одинаковой исходной заполненности, а затем проверить повторяемость. Датчик, показанный утилитой, не обязательно измеряет самый горячий внутренний участок; универсальный температурный порог для всех SSD применять нельзя.

Путь подключения тоже имеет пределы. Ограничение может находиться в согласованных линиях PCIe, разделении ресурсов платы, внешнем мосте, исходном накопителе или загрузке CPU. При копировании с одного SSD на него же чтение и запись делят внутренние возможности. Антивирус, шифрование, сжатие и мелкие файлы меняют состав работы. Наблюдаемая скорость файлового менеджера описывает законченную операцию системы, а не изолированную скорость программирования NAND.

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

Почему нельзя усреднять паспортные скорости

Если равные объёмы проходят с разными скоростями, складываются их времена, а не скорости. Например, условные 10 ГБ при 2 ГБ/с требуют 5 секунд, а следующие 10 ГБ при 0,5 ГБ/с — 20 секунд. Итоговая скорость 20 / 25 = 0,8 ГБ/с, хотя простое среднее двух скоростей равно 1,25 ГБ/с. Если же скорости измерены на равных временных отрезках, правило усреднения будет другим. Именно поэтому полезно сохранять объём и длительность законченной операции вместе с графиком: без них краткие пики легко придают отчёту неверный смысл.

Как исследовать скорость без бессмысленного износа

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

  1. Сформулировать, что изменилось: короткая запись, большой поток, мелкие файлы, задержки чтения или повторный запуск.
  2. Проверить фактический путь подключения и отсутствие ограничения на другой стороне копирования.
  3. Разделить первый и повторный проходы, учитывая кэш ОС и накопителя; повторение само по себе меняет состояние.
  4. Наблюдать заполненность, температуру и конкурирующую активность, не изменяя несколько факторов одновременно.
  5. Для специальных испытаний использовать отдельный подготовленный носитель без важных данных и опубликованную методику, соответствующую задаче.

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

Первичные источники

Приведённые величины являются учебными примерами, а схемы не изображают испытания конкретной модели. Описание HMB, многобитовой NAND, отображения адресов и буферизации сверено с материалами разработчиков и отраслевой ассоциации.

Читайте также

Комментарии