Какая часть SSD используется для SLC-кэширования? Обычно, на этот вопрос производители накопителей отвечать не торопятся. Цель нашего эксперимента — пронаблюдать работу алгоритма, ответственного за выделение быстрой кэширующей SLC-области в составе запоминающего пространства, состоящего из TLC-ячеек, а также оценить объем кэширующего блока, в котором можно выполнять операции чтения и записи в ускоренном темпе.
Поможет нам в этом M.2 NGFF-накопитель Samsung PM871b с SATA-интерфейсом, созданный на основе Samsung K9CKGY8H5A и оснащенный DRAM-буфером. Читатель, наверное, уже знает, что микросхема K9CKGY8H5A — это четыре 256-гигабитных кристалла 64-слойной флеш-памяти TLC 3D V-NAND в одном корпусе, а DRAM-буфер Samsung K4E4E16 — 4-гигабитный LPDDR3 (информация о DDR2, скорее всего, не соответствует действительности).

О SATA-контроллере известно еще меньше: по слухам, это что-то загадочное типа Samsung MJX. Разве что программное обеспечение Samsung Magician информирует пользователя об актуальной версии прошивки — MVT24H3Q, но это тоже мало о чем скажет. С его же помощью получим первые оценки производительности SSD-накопителя PM871b (по заводской кодификации, указанной на стикере устройства, — MZ-NLN128C).

Если верить производителю, SSD объемом 128 ГБ, благодаря наличию 512-мегабайтного DRAM-буфера, демонстрирует скорость записи в 386 MBPS. Метрики чтения вплотную приближаются к теоретическому пределу SATA3, достигая отметки в 523 MBPS.
Верифицируем официальные результаты силами инженерного релиза NIOBench. Сейчас новая версия данного программного продукта выложена только для знакомства, но ее функциональность уже достаточна для того, чтобы исследовать динамику производительности накопителя PM871b — как раз то, что нас интересует в архитектуре M.2 NGFF Samsung PM871b.

Как видно из полученных результатов, средние показатели скорости чтения в NIOBench близки к показателям Samsung Magician. Снижение с 523 MBPS до 513 MBPS объяснимо: оба сценария пренебрегают хитростями операционной системы, предлагая результаты «снизу». Нативный сценарий NIOBench отключает буферизацию и кэширование, используя опции ОС API, но действуя при этом в рамках стандартных файловых операций. Samsung Magician, возможно, способен обойти верхние уровни mass storage стека ОС, минимизируя накладные расходы.
Другими словами, варьируя обмен данными с накопителем количеством итераций или измерительных повторов, размером файлов или читаемых блоков, мы вряд ли опустимся существенно ниже полученного нижнего предела в 513 MBPS. Прирост за счет упреждающего чтения и сопутствующего кэширования возможен, что и демонстрирует Samsung Magician, приближая пользователя к показателям PM871b, доступным в условиях реальной эксплуатации — 523 MBPS.

С записью сложнее, и на графике видно, почему: скорость записи на начальном этапе тестирования «смазывается», по всей видимости, алгоритмами кэширования. NIOBench в тестировании, состоящем из 50 итераций, дает скорость записи «на круг» — 170 MBPS. Samsung Magician оперирует менее трудоемкими паттернами, отсюда вдвое большая производительность записи — короткий период активности кэширования оказывает куда более существенное влияние на конечный результат при малом числе измерений. Улучшают метрики Samsung Magician и спекулятивные механизмы ОС.
В отсутствии информации на элементную базу накопителя MZ-NLN128C, можно лишь предполагать, что основную роль в формировании полученных результатов сыграло SLC-кэширование. Имеем ли мы право пренебречь кэшированием данных в DRAM-буфере — пока вопрос.
Приближаемся к SLC-кэшированию
Приблизим фрагмент производительности Samsung PM871b, зависимый от кэширования, уменьшив размер тестового паттерна до 100 МБ, а размер блока — до 10 МБ.


Как видно из графика, переполнение SLC-кэш произошло после записи 1200 MB данных. Производительность записи до точки перегиба весьма и весьма впечатляющая — на уровне 450 MBPS. Только SLС-ячейки в состоянии обеспечить такой темп, ведь в любом случае мы выходим за пределы объема, подотчетного DRAM-буферу. За точкой перегиба скорость записи типична для элементов TLC-структуры.
Фирменная технология Samsung TurboWrite в SSD-накопителе PM871b, скорее всего, имеет возможность по своему усмотрению использовать определенную часть TLC-ячеек в качестве одноуровневых SLC-ячеек, из множества состояний такой ячейки используя только два. Такое переопределение работает с оглядкой на объем свободного пространства накопителя, маневрируя суммарной плотностью записи запоминающего пространства. В этом существенное отличие механизмов кэширования SSD от достаточно детерминированных политик кэширования, реализованных в процессорах.
Исследуем возможности технологии TurboWrite по реакции накопителя Samsung PM871b на повторную запись блока, находящегося в данный момент в SLC-кэш. Тестовый сценарий NIOBench позволяет варьировать подходы к оценке метрик, обеспечивая заданное количество повторных вызовов ОС API для чтения и записи файлов. Повторим предыдущий тест, задав File groupr 5 repeats в качестве параметра для дисциплины обмена R/W.


Медианные значения для записи особо не изменились, а скорость чтения даже несколько выросла. Очевидно, если бы повторные операции записи одного блока трактовались накопителем как поступление новых данных, требующих отдельного пространства для кэширования, то эффект от включения пятикратных измерительных итераций был бы более выражен. В данном же случае точка перегиба сместилась с отметки 1200 МБ на 900 MB, хотя с учетом повторов накопитель должен был выполнить запись 900*5=4500 МБ данных.
На выходе
Есть основания осторожно предположить, что логика, отвечающая за освобождение пространства SLC-буфера, занимаемого «затираемыми» данными, в большинстве случаев была способна принять оптимальное решение. В этой связи можно констатировать, что бенчмарки, способные формировать картину динамической реакции SSD-устройств на входящие возмущения, дают более объективную картину производительности, приближая нас к пониманию проприетарных подходов производителя. Samsung в данном контексте — всего лишь эпизод, на его месте может оказаться любой :)