Гостевой пост: работа с in-memory database с помощью Intel Optane
Сегодня мы публикуем гостевой пост, написанный в соавторстве с Константином Бояндиным — системным администратором из Новосибирска. Константин использовал сервер с Intel Optane SSD для работы с in-memory database (memcached, Redis в соответствующем режиме, Apache ignite и так далее). Использованное в тестах устройство хранения информации Intel Optane SSD DC P4800X подключалось как IMDT (с использованием Intel […]
Сегодня мы публикуем гостевой пост, написанный в соавторстве с Константином Бояндиным — системным администратором из Новосибирска.
Константин использовал сервер с 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.