Раньше уже проверяли производительность PostgreSQL в зависимости от числа ядер и встал вопрос, насколько влияет использование разных средств виртуализации на производительность.
Содержание
Тестовое окружение[править]
- 2 процессора Xeon E5-2690v2 (в каждом 10 ядер, 20 потоков). В сумме 20 ядер и 40 HT-потоков частотой 3 ГГц и 3.6 ГГц TurboBust;
- ОЗУ 128 ГБ;
- Дисковая система: RAID 10 из 4 SSD Intel SSD DC S3500 по 800ГБ на контроллере Adaptec 6805 (контроллер имеет производительность где-то на уровне 30-40 тыс. IOPS. Но в процессе тестирования в основном бенчмарк генерировал нагрузку в 2000 IOPS, т.е. сильно меньше потолка контроллера;
На этом сервере последовательно устанавливались и тестировались:
- Hyper-V в Windows Server 2012 (первое поколение ВМ) 2 ГБ vRAM;
- CentOS8 baremetal;
- KVM под управлением CentOS8 2 ГБ vRAM.
Методика тестирования[править]
Тест проводился с помощью sysbench на одиночном файле в 50ГБ с вариацией:
- числа потоков (--num-threads), коэффициента чтения к записям от 0.1 до 10 для случайного ввода-вывода;
- числа потоков (--threads) для последовательных чтения и записи.
Стоит отметить, что в некоторых случаях чтение фактически шло из ОЗУ, поэтому надо относится критично к показателям чтения.
Подготовка:
sysbench --file-total-size=50G --file-num=1 fileio prepare
Запуск производится похожей командой:
sysbench --file-total-size=50G --file-num=1 --file-test-mode=rndrw --time=100 --file-rw-ratio=X fileio run
Результаты[править]
Полные результаты здесь: https://elibsystem.ru/sites/default/files/user/ars/blog/performance/virtualization_sysbench/server_benchmark.ods
Последовательное чтение[править]
Видно, что baremetal читает из ОЗУ. Можно допустить, что VM тоже читают из ОЗУ (скорость в 2 ГБ/c являются характерными для такого чтения), просто память vRAM была выделена в 2ГБ и оказалась на одном канале.
Последовательная запись[править]
Случайные операции в один поток[править]
Случайные операции в 20 потоков[править]
Случайные операции в 38 потоков[править]
Обсуждение результатов[править]
Операции чтения идут из ОЗУ и неадекватно отражают производительность системы. ОЗУ на хосте 128 ГБ больше тестового размера файла в 50 ГБ.
По производительности Hyper-V и KVM часто близки, причем KVM быстрее на последовательных операциях и медленнее на случайных.
Производительность на железе (baremetal) часто заметно больше производительности в виртуальных средах, особенно при большом числе потоков. Скорость по всем основным операциям: IOPS, throuthput, latency.