Гостевой пост: работа с in-memory database с помощью Intel Optane
T-Rex
Тираннозавр Рекс

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

Константин использовал сервер с 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.10IMDTRAM
SADD1 748 516,671 727 879,00
LPUSH1 343 129,581 310 077,82
SET1 562 944,631 490 965,52
GET2 026 167,622 213 292,12

Тест mcperf

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

Memcached v1.4.15IMDTRAM
1515
add54 931.255 197.259 613.959 174.8
delete85 361.383 259.489 181.688 235.4
append57 834.257 666.159 252.860 652.4
prepend58 441.958 168.559 359.360 115.8
replace57 231.257 046.059 223.559 233.0
get86 657.085 842.889 468.989 107.4
set54 546.955 570.158 311.657 725.3

Тест ramspeed

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

Ramspeed v3.5 (smp)IMDTRAM
Integer & read104 548,28112 535,63
Integer & write33 238,7334 085,68
Integer Copy30 063,0830 105,97
Integer Scale29 916,0329 757,79
Integer Add33 356,1433 192,47
Integer Triad33 235,3233 184,95
Floating Point & Reading102 796,84106 513,01
Floating Point & Writing33 826,0434 037,25
Floating Point Copy30 061,6730 060,73
Floating Point Scale30 094,4729 964,92
Floating Point Add33 144,8532 979,58
Floating Point Triad33 184,8433 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.

Что еще почитать по теме

Владимир Туров 1 сентября 2020

Дело совершенно секретного iPod

Это был обычный серый день в конце 2005 года. Я сидел на рабочем месте и писал код для следующей версии iPod. Вдруг без стука ворвался директор ПО для iPod, начальник моего начальника, и закрыл дверь.
Владимир Туров 1 сентября 2020

Новое в блоге

Андрей Зайцев 8 сентября 2021

Продуктовый дайджест: новые серверы, Selectel Connect и обновления «Облачной платформы»

У нас обновления в конфигурациях серверов, кластерах Kubernetes и разделах базы знаний. А еще обратите внимание на сервис Selectel Connect. В конце дайджеста — анонс конференции по ML и записи митапов…
Андрей Зайцев 8 сентября 2021
Ульяна Малышева 12 августа 2021

RHVoice Lab: как серверы помогают создавать голоса для синтезаторов речи

В этом году Selectel стал поддерживать некоммерческий проект RHVoice Lab — лабораторию по созданию новых голосов для одноименного отечественного синтезатора речи. Его особенность в том, что синтезатор…
Ульяна Малышева 12 августа 2021
Ульяна Малышева 11 августа 2021

Продуктовый дайджест: автомасштабирование в Managed Kubernetes и две услуги в бете

Запустили две услуги в бете — «Файловое хранилище» и «Бэкапы по расписанию», реализовали автомасштабирование нод в Managed Kubernetes, а также добавили возможность арендовать виртуальные серверы с гар…
Ульяна Малышева 11 августа 2021