Эволюция технологий хранения данных: от NVMe до KV-SSD

1. Что такое NVMe и зачем он нужен в СХД?

NVMe (Non-Volatile Memory Express) — протокол связи и интерфейс для доступа к твердотельным накопителям (SSD) через шину PCI Express (PCIe).

Чтобы лучше погрузиться в тему, важно понять, что из себя представляют твердотельные накопители (SSD).

SSD (Solid State Drive) — это название любого типа постоянного хранилища, которое является полностью электронным и не имеет подвижных частей (именно отсюда и определение — твердотельное), в отличии, например, от электромагнитных вращающихся дисков, которые известны, как жесткие диски.

SSD — то же самое, что и флэш-накопитель?

Часто понятия SSD и Flash считают взаимозаменяемыми, однако это разные вещи. Как сказано выше, любой накопитель, не имеющий механических движущихся частей, называется SSD.

Архитектура современных твердотельных накопителей SSD представляет собой сложную систему из различных компонентов. Ключевым элементом в этой конструкции является контроллер. От его возможностей во многом зависит не только скорость SSD, но и его долговечность. На нее влияет способность контроллера эффективно распределять нагрузку, а также обеспечивать равномерный износ и корректировать ошибки. 

Современные SSD используют многоуровневую систему кэширования.
  • Первый уровень представляет собой DRAM-кэш. Это быстрая  оперативная память, встроенная непосредственно в диск.
  • Второй уровень — это SLC-кэш, создаваемый из основной памяти накопителя. В этой части данные временно хранятся в формате один бит на ячейку.

Ведущими мировыми производителями SSD являются следующие компании:

  • Samsung
  • WD (Western Digital)
  • Crucial (Micron Technology)
  • Transcend
  • XPG
Какие бывают форм-факторы твердотельных накопителей?

Среди основных типов форм-факторов можно выделить:

  • 2,5 дюйма: похож по форме на традиционные жесткие диски (HDD);
  • M.2: стандартный тип хранилища для тонких портативных компьютеров и ноутбуков;
  • mSATA: уменьшенная версия полноразмерного твердотельного накопителя SATA, но имеет компактный форм-фактор, как и M.2;
  • U.2 и U.3. U.2 — это интерфейс для накопителей, напоминающих по форме 2,5-дюймовые диски, но имеющих чуть большую толщину. Он поддерживает функцию горячей замены, что позволяет заменять устройства без отключения системы. U.2 использует интерфейс PCI-E для передачи данных, обеспечивая высокую скорость и производительность. U.3 — более продвинутое решение, которое включает дополнительный трёхрежимный контроллер. Этот интерфейс позволяет использовать твердотельные накопители NVMe, жесткие диски SAS и SATA в одном слоте, что значительно упрощает процесс развёртывания и модернизации хранилищ. Благодаря поддержке нескольких типов накопителей, U.3 предоставляет большую гибкость в подключении и управлении устройствами.
Что такое флэш-память на базе NAND?

Флэш-память на основе NAND — популярный электронный носитель информации для SSD, но не единственный. Поэтому ничто не мешает использовать другой носитель для SSD. Фактически, ранние SSD применяли технологии, отличные от флэш-памяти. Связь SSD и Flash похожа на связь CD-привода и CD. CD — это носитель для CD-приводов. Точно так же и флэш- память является носителем для SSD.

Что делает вентиль NAND и что в нем особенного? Почему он, а не другие типы вентилей?

НЕ-И — это логическая операция, которая определяется как отрицание операции И.

Логическая операция NAND и ее символ
Рисунок 1. Логическая операция NAND и ее символ

NAND (а также NOR) обладает важным свойством, известным как функциональная полнота, что означает возможность выражать любую булеву формулу с использованием только операции NAND. Благодаря этому можно хранить различные данные, используя вентили NAND. Сделать такое, например, с вентилями AND нельзя.

Типичная архитектура SSD показана на рисунке 2.

Архитектура SSD
Рисунок 2. Типичная архитектура SSD.
Принцип работы SSD и NVMe

Диск подключается к остальной части компьютерной системы через интерфейс. У каждого интерфейса есть спецификация, которая определяет, как можно взаимодействовать с диском. Ранние SSD использовали более медленные интерфейсы, такие как SATA, и спецификации, например, как AHCI, разработанные Intel. Но SATA и AHCI созданы для вращающихся жестких дисков. Поэтому они не позволяют в полной мере использовать возможности SSD. Для этих целей появилась NVMe — спецификация, определяющая, как мы можем взаимодействовать с SSD через высокоскоростной PCI Express (PCIe) вместо более медленных интерфейсов.  

Главное преимущество NVMe — значительное повышение производительности SSD.

О каком улучшении идет речь?

О cущественном!

Немного цифр:
  • Современный  жесткий диск со скоростью вращения шпинделя 7200 об/мин обеспечивает производительность чтения/записи ~100 МБ/с.
  • Твердотельный накопитель SATA работает со скоростью ~500 МБ/с.
  • Твердотельный накопитель NVMe (с PCIe 3) выполняет чтение и запись на сервере со скоростью ~3500 МБ/с. Это в 7 раз быстрее, чем твердотельные накопители SATA, и в 35 раз быстрее, чем вращающиеся жесткие диски! Но важно учитывать, что не все твердотельные накопители NVMe обеспечивают такую производительность. Эти цифры приведены для предварительной оценки.
Значит, NVMe — это не обозначение специального оборудования?

Нет. Это спецификация. Это название документа, который написан консорциумом лидеров отрасли.

Какие есть на отечественном рынке твердотельные накопители с поддержкой NVMe?

Пионером в производстве отечественных флэш-драйвов является компания GS Nanotech, которая начала массовое производство SSD собственной разработки в 2018 году, в городе Гусеве Калининградской области. В 2021 году в реестр были включены накопители с PCIe NVMe в форм-факторе U.2. В конце 2023 года GS Group представила два новых SSD в форм-факторе M.2.


В России свои SSD выпускают следующие компании:

  • Бештау (г. Ростов-На-Дону), ООО «БЕШТАУ ЭЛЕКТРОНИКС»
  • mStore (п. Невское, Калининградская область), ООО «ЭМСТОР»
  • GS Nanotech (г. Гусев, Калининградская область), АО «ДЖИЭС-НАНОТЕХ»
  • ТМИ (г. Москва), ООО «ТЕЛЕКОМ И МИКРОЭЛЕКТРОНИК ИНДАСТРИЗ»

При этом уровень локализации SSD на российских заводах – средний и высокий, не сильно ниже мировых брендов.

Почему многие пользователи не использовали их раньше?

Использование твердотельных накопителей было ограничено из-за высокой стоимости флэш-памяти по сравнению со стоимостью жестких дисков.

Форм-факторы NVMe дисков

Твердотельные накопители NVMe поддерживают несколько форм-факторов, благодаря чему подходят для использования в различных платформах и для разных задач.

2. NVMe SSD со встроенным хранилищем ключей и значений

 

Обычные хранилища ключей и значений

Сперва разберемся, как выглядит вся система при запуске хранилища «ключей- значений», например, RocksDB поверх SSD.

Рисунок 3 – это схема основных компонентов, где замыкающим верхним звеном является приложение «ключ-значение» (Key-Value Application), которое использует API ключ-значение.

Хранилище ключей и значений (Key-Value Store) использует файловую систему, управляемую операционной системой, для чтения/записи своих данных. ОС использует драйвер SSD для связи с SSD. В обычном SSD единицей связи между ОС и SSD является блок, и в этом случае ОС обладает возможностью записывать/считывать блоки, каждый из которых может включать несколько пар «ключ-значение».

Программный стек поверх SSD-накопителей в обычных хранилищах «ключ-значение»
Рисунок 3. Программный стек поверх SSD-накопителей в обычных хранилищах «ключ-значение»

Остановимся на важном моменте – LSM ключ-значении в RocksDB. Существуют две основные структуры данных — Memtable и SSTable. Memtable находится в памяти, а SSTables — в постоянном хранилище. Когда ключи помещают в хранилище «ключей-значений», они попадают в Memtable. А как только Memtable достигает определенного размера, он записывается в хранилище как SSTable. Нельзя забывать про журнал упреждающей записи (WAL), который содержит обновления, помещаемые в Memtable. WAL находится в постоянном хранилище, поэтому в случае сбоя можно будет восстановить Memtable из WAL. SSTables же неизменны: каждый раз, когда Memtable достигает определенного размера, создается новый SSTable и сохраняется. Он уже не меняется никогда.

Но если продолжить создавать таблицы SSTables и никогда их не обновлять, то база данных будет расти вечно?

Да. Именно поэтому нужен фоновый процесс, который объединяет эти SSTables. Это называется сжатием.

Где найти ключ, когда понадобится его прочитать?

Чтобы прочитать ключ, сначала необходимо проверить Memtable. Если ключа там нет, смотрим самую последнюю SSTable. Если и там его нет, проверяем вторую по времени SSTable. Продолжаем такие действия, пока не будет найден ключ.

Могут ли обычные хранилища «ключ-значение» в полной мере использовать твердотельные накопители NVMe?

Для хранилища «ключей и значений», такого как RockDB, на заднем плане выполняется немалый объем вычислений, требующий ресурсов центрального процессора (ЦП) и памяти. В обычных хранилищах ключей и значений есть и другие причины, такие как наличие нескольких слоев, конкуренция за ресурсы, поддержка WAL и усиление чтения/записи, которые снижают способность ЦП выдавать больше запросов ввода-вывода устройству. При работе с медленными дисками, ЦП обычно простаивает, ожидая данные, и не является узким местом в производительности системы.

Но теперь возникает вопрос: с гораздо более быстрым хранилищем, таким как NVMe SSD, это все еще верно?

Рассмотрим современный NVMe SSD, который может обрабатывать запросы размером 4 КБ со скоростью 600 МБ/с. Чтобы заполнить такой SSD, системе необходимо сгенерировать 150 000 запросов размером 4 КБ в секунду (600 МБ/с / 4 КБ). Это означает, что ЦП должен обрабатывать каждый запрос менее чем за 7 мкс. В случае, если ЦП не может этого сделать и обрабатывает каждый запрос за 30 мкс, то понадобится 4 таких процессора, чтобы заполнить NVMe SSD.

Теперь рассмотрим несколько экспериментов. Цель первого эксперимента состояла в том, чтобы насытить NVMe SSD с помощью системы с Xeon E5 2.10Ghz с 48 ядрами. На рисунке 4 показаны результаты для различных размеров блоков, количества потоков и режима связи (синхронный/асинхронный). Здесь можно увидеть сравнение результатов с файловой системой и без нее.

 

Левая диаграмма демонстрирует загрузку ЦП. Обратите внимание, что это общая загрузка всех 48 ядер. Таким образом, каждые 2,08% означают 1 полное ядро ЦП. Как правило, с асинхронным вводом-выводом и большими блоками насытить устройство легче. Две точки, отмеченные стрелками, показывают наименьшее количество ЦП, которое необходимо для насыщения SSD с файловой системой и без нее.

 

Проверяя эти точки, мы можем увидеть в этом эксперименте следующие факты:

  1. Для загрузки SSD-накопителя необходимо выделить как минимум 1 ЦП.
  2. При наличии файловой системы понадобится больше ресурсов ЦП для заполнения SSD (то есть больше слоев).
Последовательный тест ввода-вывода с файловой системой и без нее
Рисунок 4. Последовательный тест ввода-вывода с файловой системой и без нее

3. Упрощение стека хранения с помощью KV-SSD

KV-SSD (Key Value SSD) — это NVMe SSD с API ключ-значение, который позволяет хранить и извлекать пары «ключ-значение» переменных размеров непосредственно на устройство или с него. Это может значительно упростить типичные программные стеки, которые есть в существующих хранилищах «ключ-значение», и позволить полностью использовать диски NVMe, а также линейно масштабироваться путем добавления дополнительных устройств NVMe.

KV-SSD позволяет избавиться от программных компонентов, необходимых в обычных хранилищах «ключ-значение», напрямую предоставляя API ключ-значение переменного размера для пользовательских приложений.

KV-SSD берет на себя всю обработку, необходимую для хранения и получения пар «ключ-значение», оставляя ЦП и память хост-машины свободными. В обычном хранилище «ключ-значение» стек хранения должен преобразовывать пары «ключ-значение» в блоки хранения перед обращением к устройству хранения. Теперь с KV-SSD можно общаться парами «ключ-значение».

Программный стек поверх KV-SSD
Рисунок 5. Программный стек поверх KV-SSD

Это приводит к значительно меньшему объему памяти. Независимо от пространства ключей, с KV-SSD требования к памяти хост-машины составляют O(1).

 

Чтобы оценить требования к памяти, размер I/Q надо умножить на размер пар «ключ-значение».

Говоря о преимуществах KV-SSD, важно понимать, что, когда удаляются все программные ресурсы между приложением и SSD, следом удаляются возможные источники синхронизации. Предположим, есть хранилище «ключей-значений», которое использует два SSD в узле. В обычном хранилище «ключей-значений» есть структуры данных на вершинах SSD, которые являются общими для этих двух SSD. Эти общие структуры данных увеличивают конкуренцию и являются препятствием для масштабируемости, которую можно достичь путем добавления большего количества SSD.

 

С другой стороны, KV-SSD ничем не делятся, и в этом случае можно легко масштабироваться, добавляя больше KV-SSD.

Что в итоге получается с KV-SSD?

Покажем здесь несколько экспериментов с результатами, которые можно получить при использовании твердотельного накопителя KV-SSD.

Рисунок 6 — интересный результат, демонстрирующий, как масштабировать узел хранения, добавляя больше устройств NVMe. Он показывает загрузку ЦП и пропускную способность одного узла с различным количеством устройств NVMe для трех обычных хранилищ ключей и значений, а именно RocksDB, RockDB-SPDK и Aerospike вместе с KV-SSD. По мере увеличения количества устройств, коллеги, проводящие этот эксперимент, запускают больше экземпляров ключей и значений, чтобы насытить устройства. Как и ожидалось, загрузка ЦП хост-системы значительно меньше при использовании KV-SSD по сравнению с обычными хранилищами ключей и значений. Это объясняется тем, что KV-SSD используют свои внутренние ресурсы и требуют меньше вычислений.

По мере увеличения количества устройств ЦП становится насыщенным для обычных хранилищ ключей и значений, что приводит к ограниченному увеличению пропускной способности.

KV-SSD позволяет масштабировать линейно, добавляя больше устройств
Рисунок 6. KV-SSD позволяет масштабировать линейно, добавляя больше устройств

На рисунке 7 показано усиление записи во время выполнения тестов. При использовании KV-SSD усиление записи на стороне хоста равно 1. То есть, когда нужно записать пару ключ-значение, хост-системе необходима только одна запись. Это ожидаемо, поскольку все управляется внутри KV-SSD. С другой стороны, в обычных хранилищах «ключ-значение» усиление записи выше из-за уплотнения и записи в WAL. Несмотря на то, что KV-SSD не записывает в WAL, благодаря резервному аккумулятору DRAM, достигает той же долговечности, что и RocksDB.

Усиление записи во время выполнения тестов
Рисунок 7. Усиление записи во время выполнения тестов

Подведем итог и выделим основные преимущества KV-SSD.

  1. Управление «ключ-значение» осуществляется самим устройством хранения и потребляет ресурсы (ЦП и DRAM) устройства хранения. Таким образом, можно легко масштабироваться, добавляя больше устройств.
  2. KV-SSD позволяет сократить количество слоев, что приводит к снижению накладных расходов.
  3. KV-SSD в узле ничем не делятся, поэтому между ними нет конкуренции. Следовательно, можно легко масштабироваться.
  4. KV-SSD устраняет необходимость в WAL, обеспечивая при этом те же гарантии надежности хранилищ «ключ-значение» с WAL благодаря резервному аккумулятору DRAM.
Прокрутить вверх