SSD-бенчмаркинг или тестирование твердого тела

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

qqq

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

qqq

Победа над плотностью обернулась поражением в бы­ст­ро­дей­ст­вии: чем сложнее ор­га­ни­за­ция, тем больше времени уходит на чтение, не говоря уже о записи. Для решения этой задачи эле­мен­ты NAND на­у­чи­лись ме­нять свою струк­ту­ру. При малой активности обращений к ним они работают как TLC/QLC, а в ус­ло­ви­ях аг­рес­сив­но­го обмена могут пре­вра­тить­ся в SLC. Эта спо­соб­ность (или воз­мож­ность) легла в основу акселерации записи в SSD-накопителях. Она из­вест­на поль­зо­ва­те­лям как SLC-кэширование, хотя это не совсем точно. У тех­но­ло­гии непростые алгоритмы, которые адап­тив­но реагируют на всплески трафика — спад ак­тив­нос­ти по­ро­жда­ет об­рат­ное пре­вра­ще­ние раз­лич­ной глубины и слож­нос­ти.

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

Нельзя сказать, что сообщество разработчиков прошло мимо этого факта. Ассоциация сетевого хранения SNIA опуб­ли­ко­ва­ла свое видение оценки производительности SSD-устройств — «The Why and How SSD Performance Bench­mark­ing». Исходя из этой предпосылки свое мнение изложила и компания AMD. Документ «NVMe SSD Per­for­mance» (вну­т­рен­ний код 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.
qqq

Во всех трех случаях производительность операций последовательного доступа соответствует про­пус­к­ной спо­соб­нос­ти (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-атрибутов, а также протоколов доступа к ним, могут оказаться фактором, несколько сдер­жи­ва­ю­щим развитие новых программных инструментов, ведь на современный диск уже нельзя смотреть, как на «черный ящик» умеющий выполнять исключительно команды чтения и записи информации…