ADATA SU630: драйв в сторону снижения цен

Почва для появления Quad-Level Cell была под­го­тов­ле­на ус­ко­рен­ной эво­лю­ци­ей NAND. Од­на ячей­ка смог­ла вмес­тить два, три и вот уже че­ты­ре би­та. Это по­тре­бо­ва­ло не­за­у­ряд­ных уси­лий, по­то­му что шаг в сто­ро­ну уп­лот­не­ния ин­фор­ма­ции (16 со­сто­я­ний да­ют 4 би­та на ячей­ку) об­ус­лов­лен ис­поль­зо­ва­ни­ем дис­крет­но-ана­ло­го­вой об­ра­бот­ки сиг­на­лов. Чем их боль­ше, тем слож­нее их диф­фе­рен­ци­ро­вать, осо­бен­но, при за­пи­си, ког­да нуж­но точ­но до­зи­ро­вать уро­вень и дли­тель­ность элек­три­че­ско­го воз­дей­ст­вия на ячей­ку. В ито­ге, ус­лож­не­ние тех­но­ло­гии при­во­дит к ухуд­ше­нию ско­рост­ных ха­рак­те­рис­тик QLC, но ком­пен­си­ру­ет­ся низ­кой це­ной NAND-мат­ри­цы и рос­том ее объ­е­ма.

Тренируемся на SATA-дисках

Изначальным полигоном для Quad-Level Cell стали SATA-диски. Теоретический предел в 600MBPS по­зво­ля­ет мак­си­маль­но эф­фек­тив­но ис­поль­зо­вать не­быст­рые че­ты­рех­у­ров­не­вые ячейки в SSD SATA. Что, впрочем, не за­кры­ва­ет до­ро­гу QLC и в серверный сегмент NVMe-устройств: Intel днями анонсировал такие накопители в форм-факторах U.2 и EDSFF («ruler»), емкостью от 15 до 30 терабайт, доказав, что на основе QLC можно про­ек­ти­ро­вать уст­рой­ст­ва экс­тре­маль­но боль­шо­го объема, реализующие эффективную политику двух­у­ров­не­во­го кэ­ши­ро­ва­ния (DRAM + SLC). Сни­же­ние на­деж­нос­ти хранения при этом ком­пен­си­ру­ет­ся кодами коррекции ошибок.

Оценим таланты QLC по SSD-накопителю ASU630SS-480GQ производства ADATA Technology

 

Оценим таланты QLC по SSD-на­ко­пи­те­лю ASU630SS-480GQ про­из­вод­ст­ва ADATA Tech­no­lo­gy. Ди­ри­жи­ру­ет там всем MAS0902, ре­а­ли­зу­ю­щий ин­тер­фейс меж­ду за­по­ми­на­ю­щей мат­ри­цей и SATA-ши­ной, раз­ра­бо­тан­ный опыт­ной ко­ман­дой Maxiotek, дочернего предприятия JMicron. Как водится, документации на чип нет, информация об особенностях MAS0902 тоже весьма скудна. Известно, что контроллер обходится без внешнего DRAM, что со­в­сем не оз­на­ча­ет от­сут­ст­вие бу­фе­ра об­ме­на. Нет в его работе и алгоритмов сжатия. Зато в духе времени в обя­за­тель­ном по­ря­дке ре­а­ли­зо­ва­но SLC-кэширование.

Дирижирует всем у SU630 накопитель MAS0902, реализующий интерфейс между запоминающей матрицей и SATA-шиной

 

Накопитель ADATA SU630 обещает быть доступным по цене, но его бюд­жет­ность ско­рее не в са­мом фак­те при­ме­не­ния QLC, а в экономии на обвязке контроллера — на компонентах. Пикантность ситуации в том, что при использовании че­ты­рех­у­ров­не­во­го NAND, экономия в обвязке приводит к более заметным последствиям. В этом легко убедиться в один клик: AS SSD — об­ще­приз­нан­ный ин­ди­ка­тор про­из­во­ди­тель­нос­ти твер­до­тель­ных уст­ройств — да­ет при­бли­зи­те­ль­ную, но вер­ную оцен­ку SU630.

Результаты тестирования ADATA SU630 с помощью утилиты AS SSD

 

Как видим, результаты последовательных операций близки к теоретическому пределу. Фрагментированный блоч­ный об­мен по 4К «все рас­став­ля­ет на свои места», выявляя первую аномалию: чтение ста­но­вит­ся впя­те­ро мед­лен­нее за­пи­си.

Нативный Java-тест

Разобраться в этом парадоксе попытаемся с помощью NIOBench. Он облегчит ин­тер­пре­та­цию не­о­че­вид­ных про­цес­сов, про­ис­хо­дя­щих как внутри контроллера Maxiotek MAS0902, так и в запоминающих ячейках 3D NAND с QLC-ар­хи­тек­ту­рой. Хотя в природе есть много кастомизируемых бенчмарок, способных построить любой сце­на­рий тес­ти­ро­ва­ния, в случае NIOBench при дефолтных (или близких к дефолтным) на­ст­рой­ках мож­но эф­фек­тив­но вы­я­вить осо­бен­нос­ти SSD-накопителя.

Уже после серии экспериментов было принято решение опубликовать ряд про­ме­жу­точ­ных ре­зуль­та­тов, ил­лю­с­т­ри­ру­ю­щих ре­ак­цию SATA-на­ко­пи­те­ля ADATA SU630 на изменение тестовой нагрузки.

qqq

 

Вариативность скорости записи вскрывается при углублении тестирования ADATA SU630. Если на 10 итерациях про­из­во­ди­тель­ность уст­рой­ст­ва ре­ле­ван­т­на ре­зуль­та­там, полученным в последовательном тесте AS SSD (463MBPS про­тив 449MBPS), удвоение количества измерительных циклов в NIOBench снижает скорость записи втрое, до 135MBPS. Полная глубина ис­сле­до­ва­ния дает еще более ре­аль­ную картину: для QLC в составе SU630 предел возможностей — чуть более 100MBPS.

ADATA SU630 Unbuffered Native

 

Поскольку в сценарии теста Unbuffered Native операции чтения и записи чередуются, логично предположить, что тес­ти­ру­е­мый накопитель ADATA SU630, как видно, после некоторого количества итераций уже не успевает подготовить SLC-кэш — его заполнение происходит быстрее освобождения. Важный вопрос: почему не успевает? Из-за того, что QLC ба­наль­но медленнее или из-за недоработанной микропрограммы? Изменится ли количество итераций, после ко­то­ро­го про­ис­хо­дит спад, в результате обновления прошивки?

Огромное значение имеет объем кэширующей области и стратегия ее использования в контексте ак­се­ле­ра­ции чте­ния и за­пи­си. Если регионы NAND-матрицы выделяются под SLC-кэш динамически (одни и те же ячейки могут вза­им­но пе­ре­оп­ре­де­лять­ся из SLC в QLC), то об­нов­ле­ние про­шив­ки мо­жет из­ме­нить си­ту­а­цию.

Возможно ADATA в сотрудничестве с Maxiotek намеренно манипулирует этим параметром, позиционируя устройства в разные ценовые ниши. Реализуется это не сложно — в ячейке, способной хранить 4 бита, можно использовать только два состояния, выбрав их наиболее разумным способом. По критерию устойчивости чтения логично ис­поль­зо­вать па­ру край­них со­сто­я­ний, максимально избегая взаимного влияния. Энер­го­сбе­ре­же­ние записи требует двух смежных со­сто­я­ний. Выбор будет трудным компромиссом, детали которого нам неизвестны.

Парадокс блочного чтения

Возвращаясь к обмену блоками по 4K, который в AS SSD продемонстрировал скорость чтения худшую, чем скорость за­пи­си, можно осторожно выстроить гипотезу этого парадокса. В данном сценарии теста осу­ще­ст­вля­ет­ся доступ к фраг­мен­ти­ро­ван­ным данным. На момент получения запроса часть блоков запоминающей матрицы может быть за­ня­та дли­тель­ны­ми операциями, прерывать которые не­воз­мож­но или не­же­ла­тель­но — это операции стирания и записи. Ожидание их завершения, как мы видим по производительности записи в NIOBench, многократно увеличивает время обработки запроса. Даже одно «невезение», связанное с не­об­хо­ди­мо­стью обращения к занятому блоку, на серию из тысячи запросов приведет к заметному падению скорости чтения.

Почему такого «невезения» не случается при записи? Даже в условиях перегрузки SLC-кэ­ши­ро­ва­ния на­ко­пи­тель может сохранить записанные данные в первый свободный блок, компенсируя такую ре­ло­ка­цию внесением изменений в ад­рес­ные таблицы, расписание операций отложенной записи и другие структуры. При чтении места для маневра нет — нужно обратиться конкретно к тому блоку, который хранит искомые данные. А если он занят, приходится ждать.

Фундаментальный факт: при чтении подмена адресуемого блока невозможна, при записи возможна, делает операцию записи более «ма­нев­рен­ной» для спекулятивных алгоритмов, реализуемых firmware накопителя.

Квант оптимизма

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

Увы, устройство не содержит дискретных микросхем DRAM, а точные сведения о внутреннем ОЗУ интерфейсного кон­т­рол­ле­ра отсутствуют. Логично предположить, что его характеристики скромны, и в этом контексте следует в пер­вую оче­редь говорить о рабочем ОЗУ встроенного процессора, а не о кэшировании данных. Могут ли ско­ро­ст­ные по­ка­за­те­ли устройства улучшиться с обновлением firmware? Небольшой повод для оптимизма в ответе на этот во­п­рос да­ет ди­на­ми­че­ское SLC-кэширование, алгоритмы и численные параметры которого не фик­си­ро­ва­ны ап­па­рат­ным ди­зай­ном и на­хо­дят­ся во влас­ти вну­т­рен­ней ми­кро­про­грам­мы накопителя.