Гостевой пост: работа с in-memory database с помощью Intel Optane

Сегодня мы публикуем гостевой пост, написанный в соавторстве с Константином Бояндиным — системным администратором из Новосибирска.

Константин использовал сервер с Intel Optane SSD для работы с in-memory database (memcached, Redis в соответствующем режиме, Apache ignite и так далее). Использованное в тестах устройство хранения информации Intel Optane SSD DC P4800X подключалось как IMDT (с использованием Intel Memory Drive Technology), доступная ОС и приложениям как оперативная память.


Другой областью применения может являться использование Memory Drive для содержания большой фермы виртуальных машин. Предполагается, что большое количество оперативной памяти в этом случае существенно упростит и удешевит процедуру тестирования программных продуктов.

NVMe сами по себе не новость. NVMe в режиме Memory Drive — это нечто новое. Для одного из проектов, которыми занимается Константин, важна эффективная обработка большого массива данных. Результаты тестов самые обнадеживающие, DRAM-режим с использованием Intel Memory Drive Technology поможет существенно сократить ресурсы на обработку.

Надеемся, что опыт Константина будет интересен нашим читателям.

Описание задачи

Исследовался вопрос производительности Intel Optane в режиме IMDT (запускались тесты на производительность Redis и memcached, поставляемые в тестировочном пакете Phoronix, а также тест производительности RAM, ramspeed, из того же пакета). Одни и те же тесты работали при Intel Optane в режиме IMDT, и, для сравнения, при отключенном носителе Intel Optane, на том же самом сервере и той же самой ОС.

Сервер, на котором велось тестирование, работает под управлением CentOS 7.4 (64-разрядная), и на следующих аппаратных компонентах:

  • материнская плата: Supermicro X10SRi-F
  • оперативная память: 64Gb (8×8), 2133MHz
  • процессор: Intel(R) Xeon(R) E5-1650 v4 (3.60GHz)
  • диски (SATA): Intel SSD DC S3700 (480Gb)
  • накопитель NVMe: Intel Optane SSD DC P4800X (375Gb)

Первая фаза тестов проводилась без перезагрузки.

Вкратце об указанных СУБД:

  • Memcached используется для хранения и быстрой выборки данных в формате ключ-значение; первоначально создана для ускорения блог-сервиса LiveJournal, в 2003 году.
  • Redis (сокращение от «remote dictionary server», «удалённый словарный сервер») — сетевое журналируемое хранилище данных, ориентированное на скоростную обработку данных. В данном случае сконфигурирована для работы только в оперативной памяти без сброса WAL (лог изменений на случай аварийного отключения) на диск.

Цель тестов: сопоставить производительность упомянутых СУБД, использующих хранилище в оперативной памяти, в случае использования режима IMDT и без участия NVMe вообще.

Подготовка к работе

Для тестов были выбраны тесты ramspeed (операции в RAM), redis (производительность Redis), mcperf (производительность memcached), под управлением OS CentOS 7.4 (64-bit).

В обоих случаях в ОС не использовался файл выгрузки (swap), чтобы не искажать результаты тестирования.

Использовался пакет Phoronix test suite 7.4 (и входящие в него redis, mcperf), а также пакет ramspeed 3.5.

В конфигурации «Intel Optane в режиме IMDT» (далее «IMDT») OS и приложениям доступно 320Gb оперативной памяти.

В конфигурации с отключенным Intel Optane (далее «RAM») OS и приложениям доступно 64Gb оперативной памяти.

В каждом случае делалось минимум три прогона тестов, использовались усредненные значения (среднее арифметическое). Все сервисы, подлежащие тестированию, перезагружались перед каждым прогоном тестов.

Измерения, практические примеры и сценарии использования

Для тестирования использовалась программа memtest. Память забиралась случайным образом из интервала 50-75% не используемой тестом области.

Последовательная запись в ramfs

Первым тестом являлся замер производительности RAM, подключенной как ramfs (последовательная запись), использовались команды:

IMDT:

mkdir -p /mnt/ram
mount -t ramfs -o size=300G ramfs /mnt/ram
dd if=/dev/zero of=/mnt/ram/256gb.dat bs=4096 count=67108864

Итог:
274877906944 bytes (275 GB) copied, 184,756 s, 1,5 GB/s

RAM:

mkdir -p /mnt/ram
mount -t ramfs -o size=62G ramfs /mnt/ram
dd if=/dev/zero of=/mnt/ram/60gb.dat bs=4096 count=15728640

Итог:
64424509440 bytes (64 GB) copied, 18,0382 s, 3,6 GB/s

Файловые системы ramfs отмонтированы перед запуском остальных тестов.

Тест redis

В тестировании проверялось, сколько именно команд БД (SADD, LPUSH, SET, GET) исполнялось в секунду.

Чем выше значение, тем выше производительность:

  • IMDT — в конфигурации Intel Optane приложениям доступно 320Gb оперативной памяти;
  • RAM — приложениям доступно 64Gb оперативной памяти с отключенным Intel Optane.
Redis v3.2.10 IMDT RAM
SADD 1 748 516,67 1 727 879,00
LPUSH 1 343 129,58 1 310 077,82
SET 1 562 944,63 1 490 965,52
GET 2 026 167,62 2 213 292,12

Тест mcperf

В тестировании проверялось, сколько команд в секунду исполняется, для 1 и 5 одновременных подключений (скорость измеряется в командах в секунду на каждое подключение).

Memcached v1.4.15 IMDT RAM
1 5 1 5
add 54 931.2 55 197.2 59 613.9 59 174.8
delete 85 361.3 83 259.4 89 181.6 88 235.4
append 57 834.2 57 666.1 59 252.8 60 652.4
prepend 58 441.9 58 168.5 59 359.3 60 115.8
replace 57 231.2 57 046.0 59 223.5 59 233.0
get 86 657.0 85 842.8 89 468.9 89 107.4
set 54 546.9 55 570.1 58 311.6 57 725.3

Тест ramspeed

Тесты проводились для 4 одновременно работающих потоков. Там, где это имеет значение, размер используемого блока памяти составляет 4096 байт. Чем выше значение (MB в секунду), тем выше производительность.

Ramspeed v3.5 (smp) IMDT RAM
Integer & read 104 548,28 112 535,63
Integer & write 33 238,73 34 085,68
Integer Copy 30 063,08 30 105,97
Integer Scale 29 916,03 29 757,79
Integer Add 33 356,14 33 192,47
Integer Triad 33 235,32 33 184,95
Floating Point & Reading 102 796,84 106 513,01
Floating Point & Writing 33 826,04 34 037,25
Floating Point Copy 30 061,67 30 060,73
Floating Point Scale 30 094,47 29 964,92
Floating Point Add 33 144,85 32 979,58
Floating Point Triad 33 184,84 33 149,31

Заключение

Тесты продемонстрировали, что при использовании Intel Optane в режиме IMDT, несмотря на ощутимую разницу скорости записи в файл (средствами стандартной команды dd), в целом производительность СУБД, хранящих данные в памяти, сопоставима.

Преимущество NVMe в режиме IMDT уже в том, что чисто технически в большинство серверов невозможно установить соответствующее количество модулей RAM, чтобы получить такое же количество доступной оперативной памяти.

По соотношению cost-performance (для модулей RAM 8Gb Kingston DDR4 2133MHz) эквивалентный по объёму носитель Intel Optane обойдётся вдвое дешевле (следует учитывать, что использованный в данных тестах Optane сам не является оптимальным по соотношению cost-performance).

Для обоих случаев использования Memory Drive (то есть большое количество оперативной памяти) либо нет технической возможности установить столько памяти (нет таких материнских плат), или же цена такой конфигурации выше минимум в 2 раза (при расчете эквивалентного количества RAM).

Можно предположить, что NVME с поддержкой Memory Drive будут дешеветь (сейчас это относительная редкость и имеет высокую стоимость), так что выигрыш в плане cost-performance может стать еще ощутимее.

Использование NMVe в режиме IMDT представляется перспективным в случаях, когда требуется большое количество оперативной памяти (крупные базы типа Redis/memcached, большое количество виртуальных машин на одном хосте и так далее).

В приведенных тестах считалась достаточно условная производительность. Возведение симуляции того окружения, на котором можно прогнать тесты,  приближенные к проектным, требовало слишком много времени.

Если у вас есть интересные идеи насчёт вариантов использования Intel Optane — добро пожаловать на тестирование SelectelLab.