Кеш из топора
Как производители SSD обманывают тесты и покупателей
Многие обозреватели сейчас проводят отдельный раунд тестирования, чтобы выявить характеристики псевдо-SLC-кеша и выяснить реальную скорость записи по всему объему диска. И вот недавно вскрылось, что накопители с динамическим pSLC-кешем теряют ресурс еще быстрее, чем все думали. В этой статье мы рассмотрим, как падает скорость записи на SSD с течением времени и как производители обманывают обозревателей.
Небольшой ликбез
Как тебе наверняка известно, существует множество типов NAND-памяти, отличающихся плотностью записи. Возможно, ты догадываешься и о том, что сами чипы мало отличаются между собой, а «тип» памяти — это всего лишь режим работы, который может быть произвольно выбран производителем. Более того, современные чипы поддерживают не только статическую конфигурацию плотности ячеек, но и динамическое переключение между режимами. Но не будем забегать вперед и рассмотрим основные типы памяти, использующиеся в современных накопителях.
- SLC (однобитный режим) появился раньше всего; одна ячейка — один бит. В потребительских устройствах в чистом виде больше не встречается, однако в режим псевдо-SLC можно перевести практически любую память.
- MLC («многобитный» режим). Были времена, когда «много» означало «два». Изначально в MLC-накопителях использовалась память NAND, в каждой ячейке которой хранилось два бита данных. С появлением «более многобитных» типов TLC и QLC маркетологи освоили хитрый трюк: раз MLC — это «много», то давайте мы напишем на наших TLC- и QLC-накопителях этот термин; авось кто и купится. Например, в пресс‑релизе Samsung со всех сторон прорекламировано использование памяти MLC «высочайшего качества», но на практике быстро выяснилось, что в картах установлены чипы TLC, после чего компания тихо убрала тип памяти из спецификаций. Последним потребительским накопителем с честной двухбитной MLC стал Samsung 970 Pro.
- TLC (трехбитный режим). Самый популярный на сегодня тип памяти. Ранние версии TLC на чипах, изготовленных по планарной технологии, отличались отвратительной надежностью (напомню историю Samsung 840 Evo), но современные многослойные чипы даже надежнее старой планарной двухбитной памяти. Неизменным осталась лишь скорость записи в режиме TLC, которая во много раз ниже, чем в режиме с меньшей плотностью.
- QLC (четырехбитный режим) — если у тебя есть выбор, постарайся не иметь ничего общего с такими дисками. Те же чипы, те же контроллеры, низкая надежность и предельно низкая скорость записи за пределами кеша; пониженная себестоимость и практически та же цена — вот описание типичного QLC-накопителя. К сожалению, отказаться от QLC ты сможешь далеко не всегда. OEM очень любят устанавливать QLC-накопители в готовые системы, особенно ноутбуки и ультрабуки, причем независимо от цены (не забываем о себестоимости и норме прибыли; потребитель же покупает не надежность, а гигабайты). Производители третьего эшелона обожают трюк, когда первая партия накопителей поставляется с чипами TLC, а спустя время (и после волны обзоров) новые партии идут уже с QLC. Производители второго эшелона тоже не брезгуют подобной тактикой. Так, Patriot Viper VP3000 Lite объемом 2 Тбайт поставляется с быстрой и качественной памятью TLC, а его версия на 4 Тбайт — с чипами QLC. По цене накопитель при этом мало отличается от модели Lexar NM790 на том же контроллере и той же памяти, но сконфигурированной в режиме TLC.
Псевдо-SLC и динамическое переключение режимов
Современные накопители используют контроллеры, которые могут работать с чипами NAND в разных режимах в пределах одной аппаратной платформы. В настройках контроллера производитель может сконфигурировать NAND-память в режим TLC или ее же — в режим QLC, получив дополнительный объем на той же платформе и за те же деньги. Кроме того, разные области памяти могут быть сконфигурированы по‑разному для работы в разных режимах. Как правило, из дополнительного, неадресуемого пула ячеек выделяется область, которую конфигурируют для работы в режиме SLC. Эта область используется в качестве буфера: запись в режиме SLC во много раз быстрее записи в режиме TLC (про QLC промолчим), а сконфигурированные таким образом ячейки выдерживают кратно большее число циклов записи‑стирания.

На графике видна ступенька сверхбыстрой записи (данные записываются в статический SLC-кеш), после чего скорость записи резко проседает: данные сохраняются напрямую в ячейки TLC. Никаких побочных эффектов не наблюдается; данные из SLC-кеша будут записаны в основную область тогда, когда контроллер освободится.
info
Статический SLC-кеш не зависит от свободного места на диске, а использующиеся для его создания ячейки берутся из дополнительной, неадресуемой емкости твердотельного накопителя.
Поскольку для создания статического буфера используются дополнительные ячейки, которые не входят в основной объем накопителя, такой кеш выгоден для пользователя, но невыгоден производителю: приходится устанавливать некоторый объем дополнительной памяти, который невозможно «продать», включив в паспортный объем. Соответственно, размер статического кеша всегда невелик, а в некоторых бюджетных моделях отсутствует вовсе.
В то же время производителю нужно продать не только объем, но и скорость. Обозреватели стали опытными и для тестирования SSD используют не только CrystalDiskMark (который показывает практически только запись в быструю буферную область), но и специальные инструменты, быстро выявляющие реальную скорость записи.
Вот как это выглядит на графиках.

Далее тестируется средняя скорость записи за пределами буфера.

info
Динамический pSLC-кеш использует часть свободного пространства накопителя, временно переключая ячейки в режим псевдо-SLC. Объем доступного динамического кеша малопредсказуем; он зависит от соотношения занятого и свободного места на диске, конфигурации контроллера и степени износа ячеек. Подходы производителей к выделению динамического pSLC-буфера сильно отличаются.
С работой статического кеша разобрались; ничего сложного в ней нет. Однако со временем производители осознали, что за дополнительную память приходится платить — или увеличением числа физических ячеек, или сокращением доступного пользователю объема (например, с терабайта до 960 Гбайт — наверное, ты еще помнишь такие диски). В результате в дополнение к статическому (а впоследствии для некоторых бюджетных моделей — и вместо него) появился динамический кеш псевдо-SLC (pSLC).
Производитель может как ограничить размер буфера pSLC, так и разрешить использовать в качестве кеша pSLC до 100% свободного места на диске (разумеется, доступный для записи объем кеша будет меньше в силу меньшей плотности ячеек). Чем сильнее заполнен SSD, тем меньше доступного пространства для динамического кеша и тем быстрее будет падать скорость записи данных.
Универсального подхода нет; выгода от объема кеша зависит от сценария использования. При записи небольших объемов данных выгоднее использовать только статический кеш; средних — динамический достаточного объема; при записи больших объемов и в любых сценариях непрерывной записи (например, при сохранении потоков с камер видеонаблюдения) кеш не только не нужен, но и вреден.
Работает динамический кеш следующим образом. Записываемые данные сначала попадают в статический буфер (если он есть), а затем — в динамический. Когда оба типа кеша заполняются, начинается так называемая свертка (folding), в процессе которой данные перемещаются в основной массив NAND с одновременным переключением освободившихся ячеек в режим TLC.

А вот более наглядный график, снятый с реального накопителя в процессе исследования влияния кеша pSLC на производительность.

Динамический кеш pSLC позволяет быстро записать на диск больше данных, чем это было бы возможно при использовании только статического буфера; первая ступень на графике демонстрирует пиковую — паспортную! — скорость записи.
После заполнения динамического кеша приходит очередь второй ступени. Это прямая запись в ячейки в режиме TLC. В зависимости от конфигурации накопителя и объема свободного места вторая ступень может не наступить никогда, и скорость записи упадет еще сильнее на третьей ступени — «свертки» динамического кеша.
Процесс свертки включает несколько шагов, каждый из которых влияет на производительность:
- Чтение данных из кеша pSLC.
- Запись этих данных в основную область NAND (TLC).
- Очистка использованных ячеек pSLC.
- Переключение ячеек из режима pSLC в режим TLC.
Эти операции требуют времени и ресурсов контроллера, что и приводит к падению скорости записи на третьей ступени. Эта особенность SSD-накопителей известна и учитывается профессиональными обозревателями. Существуют тесты, позволяющие определить конфигурацию pSLC-буфера и скорости записи на всех трех стадиях.
Однако «свертка» — не единственная проблема динамического буфера. Согласно документу, недавно опубликованному производителем индустриальных систем хранения данных, использование динамического кеша pSLC может привести к ускоренной деградации ячеек. Поэтому все (так утверждает отчет) производители SSD рано или поздно (мы вскоре наглядно увидим, что рано) полностью отключают динамический кеш pSLC.
Деградация динамического кеша
В документе (PDF), опубликованном компанией Swissbit, рассказано о некоторых технических особенностях чипов NAND-памяти, малоизвестных широкой публике.
Если верить Swissbit, все без исключения SSD с динамическим кешем рано или поздно, после определенного числа циклов записи или некоторого ограниченного числа переключений ячеек между режимами, перманентно переключаются в режим TLC. До этого момента накопитель может демонстрировать отличную скорость записи в бенчмарках. Но со временем, когда ресурс динамического кеша исчерпывается, скорость записи за пределами статического буфера неизбежно падает.
По утверждению Swissbit, производители NAND-памяти не рекомендуют постоянно переключать блоки между режимами pSLC и TLC из‑за повышенного износа и проблем с надежностью. В индустриальных применениях, в которых накопители постоянно работают под нагрузкой при высоких температурах, такие переключения запрещены полностью или жестко ограничены.
В предельном случае производитель накопителя может лишь единожды сконфигурировать области, работающие в разных режимах (то есть статический SLC-кеш — можно, динамический — уже нет). К потребительским SSD таких требований не предъявляют, но число переключений между режимами тем не менее остается ограниченным.
Если в промышленных накопителях запрещается переключать ячейки по достижении всего 1% износа по числу циклов записи‑стирания, то в потребительских SSD переключение режимов работы ячеек обычно блокируется по достижении максимум 10% износа по числу циклов записи‑стирания.
С износом ячеек скорость записи накопителей падает в разы по сравнению с новыми экземплярами. Схематично этот процесс отображен на графике.

Непрерывная линия показывает скорость записи на пустой неизношенный накопитель, а пунктирная — записи того же объема данных на пустой, но уже поработавший диск. Высокую скорость записи изношенный накопитель может демонстрировать только на очень коротком отрезке в пределах статического кеша pSLC. Далее запись ведется напрямую в режиме TLC; скорость записи может упасть в разы. Если статический pSLC-буфер отсутствует или слишком мал, ты сразу заметишь падение скорости записи. Большие объемы статического буфера могут замаскировать проблему, и особого замедления ты не заметишь.
Почему так происходит?
Согласно отчету Swissbit, ограничения NAND-памяти распространяются не только на количество циклов записи и стирания, но и на количество переключений между режимами TLC и pSLC. Утверждается, что переключение режимов работы ячеек быстро изнашивает их, а производители чипов NAND-памяти накладывают ограничения как на количество возможных переходов между режимами, так и на степень износа ячеек, режимы которых можно безопасно переключать. Когда ресурс переключений между режимами TLC и псевдо-SLC исчерпывается, динамический кеш pSLC перестает функционировать — как утверждают авторы отчета, у всех без исключения производителей.
www
Еще один отчет Swissbit, данные которого были использованы в этой статье, — AN2101en Garbage Collection, PDF.
Как узнать, насколько деградировал диск
Проще простого: проверить последовательную скорость записи утилитой CrystalDiskMark, которую часто критикуют за то, что ей можно тестировать исключительно скорость работы с буфером. Нам же сейчас нужно именно это: проверить, функционирует кеш pSLC или нет.
Примерно так выглядит скорость нового, неизношенного накопителя SK Hynix Platinum P41.

А вот тот же диск спустя полгода.

Это касается действительно всех дисков?
По крайней мере — большинства из них. Некоторые диски подвержены деградации в большей степени (рекордсмен — SK Hynix Platinum P41), некоторые — в меньшей (Crucial P5 Plus), а некоторые, похоже, не деградируют вовсе (WD_BLACK SN850X). Сотрудник компании PCPartPicker протестировал множество моделей и опубликовал на «Реддите» результат. Подробности — в двух разных, несмотря на одинаковый заголовок, статьях SSD Sequential Write Slowdowns: одна — на r/hardware, другая — на r/pcmasterrace.
В рамках теста автор сделал несколько циклов перезаписи. Спустя определенное количество циклов большинство протестированных SSD показали пресловутую деградацию pSLC-кеша; степень деградации постепенно росла с каждым циклом до тех пор, пока скорость записи не падала до некоторого минимума, после чего больше не менялась. Единожды деградировавшие диски более не возвращались к изначальным скоростям ни спустя два часа ожидания, ни после перезагрузки системы.

info
Если ты читаешь эту статью в PDF, то видишь статичные графики. Анимированные версии можешь посмотреть на Reddit или в веб‑версии этой статьи.
Можно наблюдать, как с каждым циклом перезаписи постепенно уменьшается объем доступного динамического кеша псевдо-SLC; начиная с восьмого цикла, очевидно, в качестве буфера используется только статический кеш pSLC, а динамический полностью пропал. Результаты теста коррелируют с информацией из документа Swissbit, в котором говорится, что все (опять же — со слов авторов документа) накопители окончательно прощаются с динамическим кешем pSLC по достижении небольшого числа циклов перезаписи (напомню, озвученный в документе предел — 1% износа ячеек для промышленных накопителей и 10% износа для потребительских).
Интересно, что деградировали не все модели. Единственным однозначным исключением стал диск WD SN850X, который, кстати, неоднократно упоминается в самых разных ветках Reddit как альтернатива деградировавшим SK Hynix P41. После всех циклов перезаписи он замедлился лишь на 7%.

Можно ли вообще отключить кеш pSLC? И нужно ли?
Да, отключить кеш возможно, но не во всех накопителях, а только в тех, контроллеры которых можно перепрограммировать доступным софтом. Автор статьи The impact of SLC Cache in performance of an NVMe SSD проделал большую работу по отключению кеша и сравнению скорости записи с ним и без него.

Для конкретного накопителя, настройки которого показаны на скриншоте, поддерживается только динамический кеш pSLC — или никакого; режим Pure pSLC не имеет отношения к кешу, но переключает всю доступную память в режим pSLC. Автор работы утверждает, что исследуемый контроллер поддерживает как чистый статический кеш pSLC, так и гибридный, однако для их использования нужна другая прошивка.
Всего два графика говорят сами за себя.


На первом графике видны все три ступеньки: быстрая запись в буфер, короткий период записи напрямую в TLC, ступенька, во время которой контроллер пытался сворачивать кеш быстрее записи, и последняя ступень — со скоростью всего 842 Мбит/с, — на которой видны все прелести свертки.
На втором никаких ступенек нет; накопитель демонстрирует стабильную и равномерную запись со скоростью 2100–2200 Мбит/с.
Почему же производители не отключают кеш pSLC сразу или по крайней мере не дают пользователю возможность сделать это самостоятельно? Если ты внимательно прочтешь статью, на которую я ссылался выше, то увидишь, что в большинстве реальных задач кеш pSLC все же помогает: сокращается время загрузки ОС и запуска игр, уменьшается время обработки видео, быстрее копируются файлы реалистичного (а не тестового) объема; в ноутбуках использование кеша pSLC заметно экономит энергию. Короче говоря, в целом такой кеш — вещь полезная.
В то же время в исследовании был отключен как динамический, так и статический кеш pSLC, поэтому результат стоит воспринимать с некоторой долей скепсиса. Да, мелкие файлы записываются в кеш pSLC быстрее, чем напрямую в TLC, но автор не исследовал диск, оснащенный только статическим кешем (по описанным выше техническим причинам). Можно предположить, что оборудованный только статическим буфером накопитель будет... скорее всего, он будет похож по производительности на WD_BLACK SN850X, но утверждать это со всей определенностью я не возьмусь.
Выводы
Многие модели SSD страдают от проблем с динамическим кешем pSLC, быстро деградирующим по мере износа ячеек. Острота проблемы — не в самой деградации, а в ее скорости; по материалам Swissbit, все диски без исключения перейдут в этот режим самое позднее по достижении 10% износа (а многие модели, как показывают тесты, и гораздо раньше).
Производителям это известно, но до сих пор продолжают выходить накопители с объемными динамическими буферами, полностью лишенные статической области кеширования. Если информация из документации Swissbit верна (а независимые тесты, опубликованные двумя годами раньше, похоже, ее подтверждают), то производители быстрых SSD обманывают нас как минимум дважды: в первый раз — указывая цифры производительности, которые продержатся ровно столько, сколько необходимо обозревателям для вдумчивого тестирования, и во второй, когда указывают количество циклов стирания‑записи, по достижении десятой доли которых отключается одна из функций накопителя.
Когда накопитель окончательно переходит в режим TLC, скорость записи за пределами небольшого статического буфера резко снижается, но катастрофы не случилось. С одной стороны, запись небольших порций данных, превышающих объем статического кеша, но не выходящих за объем динамического, замедлится в несколько раз. В то же время запись больших объемов данных займет не больше, а меньше времени за счет исключения этапа «свертки». Если же ты хочешь, чтобы твой SSD демонстрировал стабильную производительность в любых условиях, выбирай модели с большим статическим кешем или модели, не подверженные деградации.
Уже после выхода статьи я еще раз внимательно ознакомился не только с самими исследованиями, проведенными PCPartPicker, но и с комментариями под ними. Похоже, при тестировании была допущена ошибка в методологии: на SSD после каждого цикла перезаписи не подавалась команда trim, в результате чего была протестирована не деградация ячеек кеша pSLC, а алгоритмы контроллеров по высвобождению занятых ячеек динамического буфера при отсутствии trim. Таким образом, тест PCPartPicker, несомненно, интересен, но к теме нашей статьи, вероятно, отношение имеет опосредованное.
Деградируют в итоге диски или нет? Да, деградируют, однако не так стремительно, как это было продемонстрировано в исследовании PCPartPicker, в рамках которого деградация, скорее всего, не перманентная и вызвана другой причиной. Тест PCPartPicker выявил, что контроллеры большинства моделей не умеют сворачивать кеш pSLC в отсутствие команды trim; контроллер считает, что все пространство на диске занято, несмотря на то что во время тестирования перезаписывались одни и те же LBA, что говорит о том, что контроллеры, даже мощные и современные, все же далеко не самые «умные» и нуждаются в постоянных подсказках от операционной системы.
Что будет, если на диск подать команду trim и подождать? Восстановится ли скорость? Пока диск новый — да, скорость может восстановиться, но необязательно: у накопителя SK Hynix P41 Platinum динамический буфер тает на глазах (этот факт задокументирован десятками пользователей модели), а у модели WD SN850X скорость записи остается высокой даже в сложных условиях и не деградирует даже спустя много месяцев и циклов перезаписи.
Бюджетные накопители, у которых сконфигурирован только динамический буфер и нет статического, деградируют по описанным в статье причинам, но не сразу, а постепенно, по достижении ячейками определенного уровня износа (в отчете Swissbit утверждается, что это происходит не позднее 10% износа).