Идея ускорения жестких дисков с помощью твердотельных накопителей не нова. «Гибридные» SSHD, решения для нескольких промышленных центров обработки данных и многоуровневые кэши в профессиональных серверах NAS существуют уже давно. Относительно недорогой домашний NAS также предлагает этот вариант. Но стоит ли прилагать усилия? Мы провели испытания и готовы поделиться результатами.
Домашний NAS всегда имел возможность создать кэш на быстром SSD, но требовал, чтобы SSD был установлен в один из доступных слотов для дисков. По этой причине он не пользовался особой популярностью. Ситуация начала меняться три года назад с выпуском Synology DS918 +. Эта модель имеет два выделенных слота для компактных и быстрых твердотельных накопителей формата M. Текущая линейка продуктов Synology для дома и энтузиастов (DS720 +, DS420 + и DS920 +) также включает слоты для кэш-памяти NVME. Учитывая относительно невысокую стоимость современных твердотельных накопителей NVME, трудно устоять перед соблазном заполнить два пустых слота.
Потенциальные проблемы
В большинстве статей раздел о потенциальных проблемах может быть расположен ближе к концу текста, если он вообще есть, но это явно не так. Технология кэширования с использованием NVME — палка о двух концах, которая может привести к внезапному перезапуску устройства, неожиданной потере записанных данных, ухудшению качества всего тома с последующим долгим восстановлением (и не очевидным) и чрезвычайно быстрое, не оправданное объемом записываемых данных, исчерпание ресурса кэширования перезаписываемых ячеек SSD. Однако большинства проблем можно избежать, правильно выбрав диски и правильно настроив кеш. К сожалению, большинство пунктов, описанных ниже, не отражены в документации Synology, поэтому пользователи снова и снова используют одни и те же грабли.
Спонтанные перезагрузки с потерей данных
При интенсивном использовании кеша в режиме r/w (для этого тебе придется создать зеркальный массив из двух NVME-накопителей) некоторые пользователи отмечали неожиданные перезагрузки устройства, приводившие к потере только что записанных данных (возникновение так называемой write hole). К примеру, пользователь DS918+ настроил пару не самых дешевых дисков Samsung 970 Evo в качестве кеша, но от потери данных его это не спасло. Аналогичную проблему обсуждают в соседней ветке. С чем это связано?
Дело здесь в том, что на некоторых моделях накопителей NVME на основе технологий TLC и QLC после того, как закончится кеш SLC, могут возникнуть задержки в обработке команды записи. Вот и готовый рецепт. Получите одни из самых дешевых твердотельных накопителей NVME с наименьшей емкостью. Включите кеш чтения и записи и не забудьте включить кеш последовательного прохода. Выделите все доступное пространство для хранения в кэш — и начните запись.
Все современные SSD кешируют операции записи.Данные, которые записываются первыми, попадают в область псевдо-SLC, которая записывается очень быстро. Привод будет сжимать данные, перезаписывая ячейки TLC / QLC в спящем режиме.
Поток данных не прекращается. Через короткое время буфер SLC переполняется, и контроллер SSD должен одновременно получать новые данные и уплотнять уже записанные данные. Свободные блоки быстро заканчиваются, и к операции компактности добавляется операция удаления ранее записанных блоков — а в таких накопителях она выполняется очень медленно. Через короткое время контроллер переполняется, и следующая попытка записи приводит к таймауту.
Напомню, что накопители NVME подключаются не через контроллер SATA, который умеет самостоятельно обрабатывать ошибку, а напрямую к шине PCIe. Пользователи DS918 + отметили, что тайм-аут записи вызвал самопроизвольную перезагрузку устройства, за которой последовало ухудшение как кеша, так и всего тома (r /w кэш становится его неотъемлемой частью).
Подобные ошибки отмечали пользователи разных моделей Kingston и ADATA с контроллерами SMI. Отдельные пользователи жалуются на периодические ошибки тайм‑аута с накопителями WD Black; в то же время диски Samsung 970 Evo в возникновении этой ошибки не замечены (впрочем, как и любые другие диски, эти модели также подвержены преждевременному износу).
Честно говоря, я никогда не слышал о таких ошибках в устройствах поколения 2020.
Преждевременное исчерпание ресурса SSD
Пользователь DS918 + и пара Samsung 960 Evo 256 ГБ отмечают преждевременное исчерпание ресурса SSD. SSD содержит всего 30 ТБ данных, что даже отдаленно не близко к заявленному производителем ресурсу. Брак? Возможно, но маловероятно: это не единичный случай.
В этом и подобных случаях проблема в факторе коэффициента усиления записи (write amplification), а точнее — несовпадение оптимального для SSD сценария работы с фактическим.
Как вы знаете, чтобы записать один байт информации на SSD, вам нужно записать целую страницу данных. Большинство современных SSD-накопителей работают с относительно большими страницами — иногда несколько мегабайт. В то же время кеширование подразумевает работу с множеством небольших блоков данных размером в десятки и сотни килобайт. Запись каждого такого блока требует перезаписи всей страницы, что заставляет контроллер перезаписывать гораздо большие (иногда на порядки) объемы данных, чем он получает извне. Результат более чем логичен: диск исчерпывает заявленный производителем ресурс, что и отображается в данных S.M.A.R.T.; DSM присваивает накопителю соответствующий статус, сбрасывая содержимое кеша на диски и переводя кеширование в режим read-only. Ситуация штатная и к потере данных приводить не должна, но в реальности иногда приводит.
Кстати: Synology DSM не позволяет использовать диск, который, согласно S.M.A.R.T. полностью исчерпал свои ресурсы в качестве буферного диска, даже несмотря на то, что фактическое состояние ячеек NAND могло выдержать десятикратный объем записи.
Минимизируем риски
Как избежать описанных выше проблем? Достаточно убрать факторы риска.
- Если твой сетевой накопитель работает в режиме 24/7, рекомендую использовать кеш в режиме «только для чтения». Это и безопаснее для сохранности твоих данных, и щадит ресурс накопителя. Если же ты периодически выключаешь NAS, то содержимое кеша «только для чтения» будет сбрасываться каждый раз при загрузке, что только добавит нагрузки на SSD. В таком случае может иметь смысл режим r/w, в котором содержимое кеша переживает перезагрузку.
- При создании кеша в режиме r/w разреши использовать под кеш не более 70–80% объема накопителя. Контроллер SSD сможет подменять «грязные» блоки незанятыми, что заметно увеличит скорость циклической перезаписи и уменьшит фактор write amplification.
- Откажись от использования дисков с QLC в качестве кеширующих накопителей. Да, QLC — самая дешевая технология, но такие диски способны поддерживать высокую скорость записи лишь в рамках доступного объема псевдо-SLC. При исчерпании буфера скорость записи в ячейки резко падает. Кроме того, память QLC при постоянной перезаписи изнашивается заметно быстрее TLC, так что экономия в любом случае окажется липовой.
- Не используй сквозное кеширование последовательных операций совместно с недорогими NVME SSD небольшого объема. Очевидный совет, который тем не менее многие успешно игнорируют.
- По возможности используй специализированные накопители Optane (кроме серии H). У таких накопителей проблемы с тайм‑аутами отсутствуют принципиально. Другой вариант — специализированные NVME-накопители Synology, о которых я расскажу дальше.
С подводными камнями разобрались; можно приступать к экспериментам.
Типы кеширования: неочевидная разница
В текущей версии DSM (Synology OS) вы можете выбрать один из двух типов кэширования: только чтение (r / o) и чтение-запись (чтение-запись — r / w). Кроме того, доступна настройка, позволяющая управлять кэшированием последовательных операций чтения-записи (например, при потоковой передаче видео или записи другой резервной копии на диск). По умолчанию он отключен: эффективность такого кеширования сомнительна, а ресурс SSD может исчерпать за считанные недели.
Каждый из двух типов кеша имеет очевидные и неочевидные подводные камни. Однако некоторые важные параметры в документации не упоминаются в принципе.
Кеш «только для чтения»
Все просто: один том — один NVME-накопитель (почему нельзя использовать один NVME SSD или зеркальную пару для кеширования двух и более томов — загадка). Кешируются данные, которые считываются с диска как внешними пользователями, так и запущенными на устройстве процессами (например, виртуальными машинами).
Кэширование только для чтения имеет одну неприятную недокументированную функцию: содержимое кеша очищается при выключении или перезапуске устройства. Следовательно, если ваш NAS выключен большую часть времени, вы можете положить конец эффективности этого типа кеша: скорее всего, кеш достигнет более или менее заметной эффективности только тогда, когда вы закончите работу с NAS и выключите его.
Приблизительно так выглядит КПД моего кеша «только для чтения» во время работы.
Чтобы определить эффективность кеша, я протестировал его, синхронизируя содержимое двух сетевых папок с идентичным содержимым (чуть более ста пятидесяти тысяч файлов): идеальные условия для демонстрации ускорения операций произвольного доступа.
Вот характеристики сетевой папки.
Первый раунд тестирования, NVME-кеш отсутствует. Синхронизация заняла 35 мин 23 с.
Включаю NVME-кеш, повторяю попытку. 33 мин 7 с. Ожидаемо: кеш пуст, заполняется в процессе синхронизации.
Повторная синхронизация той же папки с включенным NVME-кешем заняла 1 мин 40 с. Полезность этого теста сомнительна: данные находятся как в кеше, так и в оперативной памяти устройства.
А что будет, если отключить NVME-кеширование? Отключаю кеш, повторяю синхронизацию. 1 мин 39 с — разница в пределах погрешности. Действительно, предыдущий тест оказался бесполезным — данные система брала в основном из оперативной памяти, а не из кеша NVME.
В чем преимущество кэша только для чтения в этом сценарии? Практически нет: кеш не переживает перезагрузки. Сразу после включения синхронизация сетевой папки занимает 35 минут вместо полутора. Точно так же ведет себя кеш в оперативной памяти устройства, который проще и дешевле расширить, чем возиться с кешированием на NVME.
В каких сценариях имеет смысл кэш только для чтения? Особенно в тех, которые предполагают непрерывную работу NAS в режиме 24/7 с преобладанием операций произвольного доступа. Кэш также будет полезен, если к устройству одновременно обращаются несколько пользователей. Для меня кеш в этой конфигурации оказался совершенно бесполезным.
Кеш на чтение и запись
Начиная тестирование, я не ожидал, что кеш «только для чтения» будет сбрасываться каждый раз при загрузке устройства. Этот момент не был отражен в документации, и я не первый, кто с удивлением обнаружил эту особенность. С моей точки зрения, для «временного» кеширования есть оперативная память, а кеш на SSD должен сохраняться между перезагрузками. Однако моя логика не совпадает с логикой разработчиков DSM, поэтому для включения постоянного кеша приходится активировать более опасный и менее стабильный режим кеширования чтения‑записи.
Важно понимать, что при включении этого режима необходимо использовать два твердотельных накопителя NVME в зеркале (RAID 1); будет кэшироваться единственный выбранный том. Если ваша установка содержит только один том для хранения, вам повезло. Если имеется несколько томов, вам нужно будет выбрать, какой из них вы хотите ускорить.
Еще один важный момент: в режиме чтения / записи кэш на NVME становится частью тома. Если что-то случится с SSD или, например, вы захотите переместить жесткие диски на другое устройство без предварительного отключения кеша, основной том будет поврежден. И все это даже после выключения NAS. Поэтому перед выполнением таких дисковых операций необходимо отключить кеш.
Приступаем к тестированию. Число файлов успело измениться — перед получением второго NVME-накопителя прошло некоторое время.
При создании кеша я указал возможность использовать в качестве кеша до 400 Гбайт (из 465 доступных).
Первый раунд синхронизации с пустым кешем не отличается по времени от ситуации «без кеша»; я его пропущу. После того как кеш был заполнен, синхронизация сетевых папок заняла 1 мин 38 с — результат, аналогичный предыдущему эксперименту.
Перезагружаю устройство, чтобы убедиться в сохранности кеша. Сразу после загрузки запускаю синхронизацию. 3 мин 12 с! Только в этом тесте наконец удалось увидеть разницу между производительностью кеша в оперативной памяти и кеша на NVME.
Месяц спустя
Я внимательно наблюдал за работой устройства в течение месяца. В моем сценарии использования NAS включается три‑четыре раза в неделю с сессиями примерно на час‑два. Впрочем, статистика SSD-кеша позволяет точно узнать и количество сессий, и часы работы устройства за этот месяц.
Постоянно используемый кэш чтения-записи достиг почти 24 ГБ — несмотря на то, что резервные копии и снятые фотографии последовательно сохранялись на устройстве в течение месяца. На снимке экрана показано текущее состояние кеша.
Как видим, в моем сценарии использования беспокоиться об износе SSD не приходится: ресурса должно с избытком хватить на несколько лет. Данной конфигурацией я доволен. Вот мои наблюдения:
- Периодическая синхронизация папок с целью резервного копирования на порядок быстрее, чем без кеша.
- Доступ к файлам ощутимо быстрее не стал: я единственный активный пользователь, и скорости жестких дисков вполне хватает.
- Заметно (в разы!) уменьшился шум от позиционирования головок дисков как при чтении, так и при записи данных. Диски стали работать спокойнее, преобладают операции последовательного доступа, а операции случайного доступа перехватывает и берет на себя кеш NVME.
Однако одной ожидаемой вещи не произошло. В моей сети NAS ведет себя довольно беспокойно в состоянии ожидания, время от времени просыпаясь просто из-за того, что я открываю окно проводника на своем компьютере, в котором, помимо прочего, отображаются доступные сетевые папки.
Я ожидал, что NAS сможет останавливать вращение дисков более стабильно и оставаться в «спящем» состоянии при описанных условиях. Если бы это произошло, я мог бы оставить NAS работающим круглосуточно и без выходных (сейчас я не хочу этого делать из-за шума диска). Увы, не вышло: активация кеша NVME никак не повлияла на гибернацию дисков и их периодическое включение при любом пинге.
Специализированные диски для кеширования
Как я уже упоминал, DSM отключает кеш на чтение‑запись (и не позволяет больше использовать SSD для кеширования), как только уровень оставшегося ресурса SSD по данным S.M.A.R.T. достигает нулевого значения. С учетом того, что производители SSD весьма консервативны, «ноль» по S.M.A.R.T. может означать исчерпание менее 10% реального ресурса ячеек памяти. Нерационально? Возможно, но другого способа обеспечить целостность данных у системы нет.
DS918 + был отличным испытательным шаром. Армия невежественных бета-тестеров предоставила Synology отчеты о проблемах и данные телеметрии. Убедившись, что пользователи действительно не понимают специфику контроллеров SSD и принципы организации NAND (честно говоря, почему они должны понимать?), Компания решила выпустить выделенные твердотельные накопители NVME для кэширования под своим собственным именем.
Что они собой представляют? Рассмотрим модель SNV3400-400G. Фактически серия SNV3400 — ODM-диски на контроллере Phison PS5012-E12DC. Найди отличия.
SNV3400 от Synology
Дженерик от Phison
Чем эти блоки кэширования отличаются от аналогичных решений ODM? Прежде всего, в смысле избыточного выделения ресурсов: емкость 400 ГБ предполагает наличие пула резервных ячеек просто гигантского размера. С наилучшими пожеланиями, пользователь не сможет «задушить» этот диск потоком данных — страницы замещающего фонда будут молча принимать новые данные и не будет никакого отказа в обслуживании тайм-аута. Кроме того, TBW диска 400 ГБ составляет 500 ТБ. В сочетании с низким коэффициентом усиления записи из-за большого запасного пула такой заявленный ресурс позволит такому специализированному диску работать как кэш чтения / записи намного дольше, чем альтернативные решения, даже с такой же реальной надежностью NAND.
Однако если вы все же понимаете принцип работы контроллеров памяти SSD и NAND и установите какой-нибудь Samsung Evo 970 с 500 ГБ в качестве кэша, а кеш создадите всего на 400, то результат, скорее всего, будет не хуже, а лучше специализированного хранилища (у Samsung более мощные контроллеры и очень выносливая память). Однако я не могу проверить это утверждение: статистика пока недоступна.
Еще один интересный вариант — использовать диски Intel Optane в качестве кеша (за исключением серии H, у которой есть два отдельных SSD — небольшой Optane и основной объем памяти QLC). Накопители Optane объемом 16 ГБ можно найти за копейки. Накопители такого размера мало кого интересуют, но использовать их так, как хотела Intel (как, обратите внимание, кеш для основного накопителя), пользователям десктопов это неинтересно. Современные твердотельные накопители NVME дают компактному Optane фору и по объему, и по производительности, и по цене за гигабайт.
Если кеш бесполезен
Мне удалось перестать бояться и полюбить кеш, но если для тебя он оказался бесполезен, а SSD уже куплены и установлены в слоты — что можно с ними сделать?
В устройствах от конкурентов ты мог бы создать еще один том для хранения самых часто используемых данных. Соответствующая функция давно присутствует в QNAP, а совсем недавно появилась в прошивке ADM 3.5.2.RAG2 (20 октября 2020-го) и для устройств ASUSTOR с соответствующими разъемами.
В DSM 6.2 использовать накопители NVME для создания тома нельзя. По слухам, в грядущем обновлении DSM 7.0 такая функциональность должна появиться. Но сроки выхода этого обновления неизвестны. Сейчас тестируется лишь первая предварительная версия.
Впрочем, если нельзя, но очень хочется, то можно. В статье Use NVME SSD as storage volume instead of cache in DS918 приводятся подробные инструкции, как создать тома на таких накопителях. Нужно отметить, что решение имеет ограниченную применимость: загружаться с таких томов устройство не будет.
Заключение
Кэширование NVME — одна из самых спорных функций NAS. Многочисленные программные ограничения. Потом иногда очень странная логика разработчика, сомнительная производительность кэша только для чтения. И еще потенциальный риск и износ SSD в режиме чтения-записи. Это будет удерживать многих, если не большинство, от использования этой функции. В то же время, если ваш вариант использования попадает в одну из нескольких узких ниш, для которых необходима буферизация, вы можете ускорить работу своего NAS и отключить его с минимальными усилиями.