Эру твердотельных дисков открыла одноуровневая архитектура NAND SLC. Чтобы увеличить емкость хранения, надо было работать с размером ячеек, но их уменьшение почти сразу же уперлось в физический предел. Удельная плотность существенно возросла с усложнением самой организации хранения, а в дальнейшем — и с переходом на технологию 3D NAND с многослойными запоминающими элементами.

Сначала появилась двухуровневая MLC, затем трехуровневая TLC и вот теперь на повестке дня QLC 3D NAND, каждый элемент которой способен хранить 4 бита информации где-то там в объемных кремниевых лабиринтах.

Победа над плотностью обернулась поражением в быстродействии: чем сложнее организация, тем больше времени уходит на чтение, не говоря уже о записи. Для решения этой задачи элементы NAND научились менять свою структуру. При малой активности обращений к ним они работают как TLC/QLC, а в условиях агрессивного обмена могут превратиться в SLC. Эта способность (или возможность) легла в основу акселерации записи в SSD-накопителях. Она известна пользователям как SLC-кэширование, хотя это не совсем точно. У технологии непростые алгоритмы, которые адаптивно реагируют на всплески трафика — спад активности порождает обратное превращение различной глубины и сложности.
При работе с твердотельным накопителем нужно принять во внимание, что результаты предварительного тестирования не совпадают с характеристиками SSD-устройства, полученными в дальнейшем. Проработка с применением других тестовых программ может не дать реальную картину производительности — поведение SSD всякий раз будет блистать иной гранью своих талантов.
Нельзя сказать, что сообщество разработчиков прошло мимо этого факта. Ассоциация сетевого хранения SNIA опубликовала свое видение оценки производительности SSD-устройств — «The Why and How SSD Performance Benchmarking». Исходя из этой предпосылки свое мнение изложила и компания AMD. Документ «NVMe SSD Performance» (внутренний код 56367_0.70) декларирует три простых шага навстречу истине:
- Secure erase the SSD
- Fill SSD with 128k sequential data twice
- Fill the drive with 4k random data
Полная реализация требований SSD Preconditioning подразумевает скорее создание нового поколения тестов, чем дополнение существующих. Проанализируем суть сказанного AMD, приняв во внимание, что хотя документ и адресован серверостроителям, он может оказаться полезным и рядовому пользователю.
#1 Предтестовая подготовка SSD
Имплементация быстрого и безопасного стирания (Instant Secure Erase, ISE) в тестах производительности SSD вряд ли возможны, предположительно, потому, что UEFI до загрузки операционной системы блокирует эту функциональность накопителя. Чтобы в распоряжение измерительного софта диск поступил в том виде, в котором он находится сразу после подачи питания, некоторые экспериментаторы практикуют «горячее» отключение питания в сеансе ОС. Возможно, есть ситуации, когда это помогает.
Кроме очевидных проблем с технической эстетикой и риском повреждения, такой подход может быть не эффективен. Пользуясь функциональностью System Management Interrupt, грамотно написанное ПО UEFI (особенно, на платформах, поддерживающих Hot Swap) может запустить процедуру, повторно блокирующую выполнение ISE уже в сеансе ОС.
Конечно, Instant Secure Erase совсем не обязательно должен быть частью тестового ПО, эту процедуру достаточно выполнить в ручном режиме до оценки производительности накопителя. Важно, чтобы инженер-исследователь не забывал о предтестовой подготовке стенда.
#2 Пре-тест под наблюдением SMART
Заполнение диска псевдослучайными фрагментированными данными в рамках выполнения SSD Preconditioning не является проблемой. Впрочем, верификация результатов этого шага и текущего состояния диска невозможны без обратной связи на основе оценки изменений атрибутов SMART. Безоглядное следование рекомендациям AMD с игнорированием остальных факторов — путь весьма спорный.
Чтобы получить требуемое состояние запоминающей матрицы после такого пре-теста, желательно иметь прогнозируемое состояние на момент его старта. Именно для этого в документе упоминается Secure Erase как предшествующее действие. Если исходное состояние диска не определено, то и состояние, которое мы получим после пре-теста также будет не определено.
#3 Тесты в плотном контакте с ОС
Запрет кэширования и установки заданных политик, декларирующих приоритет производительности над энергосбережением, в автоматическом режиме потребуют от тестов производительности выполнения специфичных для каждой ОС операций. Уже сегодня такая ситуация ставит разработчиков тестового ПО в зависимость от капризов одной очень большой компании. Фактически, закат эпохи персональных платформ заключается не в упразднении Legacy-решений, а в потере открытости стандартов.
#4 И снова о топологии
Рекомендации AMD подтверждают, что факторы SMP/HT и NUMA-топологии, известные в кейсе тестирования DRAM, имеют такое же важное значение и для Mass Storage устройств. С одной стороны, SSD медленнее, чем DRAM, что несколько снижает «вес» фактора NUMA. С другой стороны, NUMA-оптимизация для подсистемы хранения несколько сложнее, поскольку требуется оценивать не одно топологическое расстояние (как в случае CPU-DRAM), а два:
- топологическое расстояние между SSD-накопителем и процессорным ядром, на котором выполняется программное обеспечение, инициирующее и обслуживающее обмен с диском;
- топологическое расстояние между SSD-накопителем и подсистемой DRAM, с которой накопитель взаимодействует в режиме bus-master.
В общем случае — это разные критерии, например в двухсокетной системе, где SSD подключен по PCIe к CPU#0, обменом может управлять код, выполняемый на ядре в составе этого же процессора, но адресатом bus-master операций может оказаться DRAM-подсистема, подключенная к CPU#1. Аналогичная ситуация возможна и в рамках внутрисокетной NUMA-топологии.
#5 Если завтра DAX?
Происходящая (хотя и достаточно медленно) конвергенция устройств оперативной и энергонезависимой памяти, требует адекватного отражения в дизайне бенчмарок. Представляется логичным единый измерительный сценарий, основанный на оценке производительности заданного диапазона адресного пространства памяти, содержание которого выбирается в соответствии с типом исследуемого объекта:
- если это тест DRAM или Cache, диапазон отображается на область оперативной памяти и в зависимости от размера блоков данных и non-temporal оптимизации, тестируется DRAM или заданный уровень Cache.
- если это тест подсистемы хранения (в том числе NVMe), тот же диапазон отображается на область оперативной памяти, в которой размещается файл, отображенный на память и создаваемый на тестируемом устройстве. По правилам своппинга операции чтения и записи памяти вызывают исключения page fault, обработка которых требует обмена с накопителем. В этом случае время готовности информации в памяти зависит от производительности исследуемого накопителя, а значит, тестируя память таким образом, мы тестируем диск (этот метод уже на практике опробован).
- в тестах с применением технологии DAX тот же диапазон физически отображается на запоминающую матрицу NAND или Optane.

Во всех трех случаях производительность операций последовательного доступа соответствует пропускной способности (MBPS), а на основе операций псевдослучайного доступа измеряется латентность (IOPS).
SMP/HT и NUMA-топология учитываются и для DRAM, и для накопителей. Этот единый принцип для бенчмарок DRAM и Mass Storage уже начал проходить проверку в ходе ряда экспериментов. О возможности применения механизма работы с файлами, отображенными на память для упрощения внедрения DAX, говорится и в документах Microsoft.
Как жить дальше?
Производительность подсистемы хранения данных — оценка интегральная, в которой характеристики собственно накопителя являются лишь одним из многочисленных факторов. Формально, этот тезис имеет силу и для древних флоппи, и для новейших NVMe-подсистем хранения. Вместе с тем, экстремальное снижение задержек обработки команд и повышение пропускной способности интерфейса, использующего все преимущества PCI Express выводят на первый план факторы, внешние по отношению к накопителю (SMP/HT, NUMA, параметры подключений и шинная топология). Производительность одного накопителя, полученная в различных системных контекстах, может радикально отличаться.
Факторы, ранее учитываемые только в тестах оперативной памяти, стали актуальными и для SSD. Ведь математически очевидно: чем меньшую задержку вносит собственно накопитель, тем больше «вес» остальных факторов, таких как топология платформы и выполнение программных процедур драйвера.
Не секрет, что наличие автономного процессора делает современный накопитель своего рода «компьютером в компьютере», автономная операционная система которого занята решением весьма нетривиальных задач, и, что важно, происходящие при этом процессы и события асинхронны по отношению к операциям хост-CPU и программного обеспечения, выполняемого платформой, в том числе и бенчмарок. Яркий пример — технология SLC-кэширования, балансирующая между критериями производительности и экономного расходования пространства запоминающей матрицы.
В зависимости от операционных условий SSD выбирает «быстрый» SLC-режим сохранения информации либо «экономный» MLC (TLC/QLC) метод, обеспечивающий максимальную плотность хранения данных. Кроме того, при исчерпании свободного пространства возникает необходимость перезаписи информации, ранее сохраненной в SLC-виде, с целью уплотнения хранения. Очевидно, столь «богатый внутренний мир» современных накопителей, зависимость характеристик от степени заполнения и уровня износа запоминающей матрицы, усложняют прогнозирование поведения устройства, особенно — изменений в течение жизненного цикла. При интуитивной понятности базовых алгоритмов, аппаратные особенности и численные параметры (например, при каком процентном соотношении заполнения NAND-матрицы запускать процедуру перезаписи данных, сохраненных в SLC форме) известны лишь разработчикам.
Учитывая сказанное, для обеспечения достоверности и повторяемости результатов бенчмарок, особую важность приобретают такие технологии как SMART, обеспечивающие возможность низкоуровневого программного контроля состояния запоминающей матрицы и предыстории выполненных операций. Пробелы в документировании и унификации представления SMART-атрибутов, а также протоколов доступа к ним, могут оказаться фактором, несколько сдерживающим развитие новых программных инструментов, ведь на современный диск уже нельзя смотреть, как на «черный ящик» умеющий выполнять исключительно команды чтения и записи информации…