diff --git a/README-ru.md b/README-ru.md index 3af0ec3b..8c6d306e 100644 --- a/README-ru.md +++ b/README-ru.md @@ -68,6 +68,7 @@ Vitastor поддерживает QEMU-драйвер, протоколы NBD и - [Понимание сути производительности](docs/performance/understanding.ru.md) - [Теоретический максимум](docs/performance/theoretical.ru.md) - [Пример сравнения с Ceph](docs/performance/comparison1.ru.md) + - [Более новый тест Vitastor 1.3.1](docs/performance/bench2.ru.md) ## Автор и лицензия diff --git a/README.md b/README.md index f34b4590..030365f6 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,7 @@ Read more details below in the documentation. - [Understanding storage performance](docs/performance/understanding.en.md) - [Theoretical performance](docs/performance/theoretical.en.md) - [Example comparison with Ceph](docs/performance/comparison1.en.md) + - [Newer benchmark of Vitastor 1.3.1](docs/performance/bench2.en.md) ## Author and License diff --git a/docs/config/src/included.en.md b/docs/config/src/included.en.md index dc37def3..a7aef8aa 100644 --- a/docs/config/src/included.en.md +++ b/docs/config/src/included.en.md @@ -64,4 +64,6 @@ {{../../performance/comparison1.en.md}} +{{../../performance/bench2.en.md}} + {{../../intro/author.en.md|indent=1}} diff --git a/docs/config/src/included.ru.md b/docs/config/src/included.ru.md index 49d00475..9c85133e 100644 --- a/docs/config/src/included.ru.md +++ b/docs/config/src/included.ru.md @@ -64,4 +64,6 @@ {{../../performance/comparison1.ru.md}} +{{../../performance/bench2.ru.md}} + {{../../intro/author.ru.md|indent=1}} diff --git a/docs/intro/features.en.md b/docs/intro/features.en.md index 26beaa6c..3b83f853 100644 --- a/docs/intro/features.en.md +++ b/docs/intro/features.en.md @@ -13,7 +13,7 @@ ## Server-side features - Basic part: highly-available block storage with symmetric clustering and no SPOF -- [Performance](../performance/comparison1.en.md) ;-D +- [Performance](../performance/bench2.en.md) ;-D - [Multiple redundancy schemes](../config/pool.en.md#scheme): Replication, XOR n+1, Reed-Solomon erasure codes based on jerasure and ISA-L libraries with any number of data and parity drives in a group - Configuration via simple JSON data structures in etcd (parameters, pools and images) diff --git a/docs/intro/features.ru.md b/docs/intro/features.ru.md index a4a03175..2be4213f 100644 --- a/docs/intro/features.ru.md +++ b/docs/intro/features.ru.md @@ -13,7 +13,7 @@ ## Серверные функции - Базовая часть - надёжное кластерное блочное хранилище без единой точки отказа -- [Производительность](../performance/comparison1.ru.md) ;-D +- [Производительность](../performance/bench2.ru.md) ;-D - [Несколько схем отказоустойчивости](../config/pool.ru.md#scheme): репликация, XOR n+1 (1 диск чётности), коды коррекции ошибок Рида-Соломона на основе библиотек jerasure и ISA-L с любым числом дисков данных и чётности в группе - Конфигурация через простые человекочитаемые JSON-структуры в etcd diff --git a/docs/performance/bench2.en.md b/docs/performance/bench2.en.md new file mode 100644 index 00000000..c5f2e495 --- /dev/null +++ b/docs/performance/bench2.en.md @@ -0,0 +1,154 @@ +[Documentation](../../README.md#documentation) → Performance → Newer benchmark of Vitastor 1.3.1 + +----- + +[Читать на русском](bench2.ru.md) + +# Newer benchmark of Vitastor 1.3.1 + +- [Test environment](#test-environment) +- [Notes](#notes) +- [Raw drive performance](#raw-drive-performance) +- [2 replicas](#2-replicas) +- [3 replicas](#3-replicas) +- [EC 2+1](#ec-2-1) + +## Test environment + +Hardware configuration: 3 nodes, each with: +- 8x NVMe Samsung PM9A3 1.92 TB +- 2x Xeon Gold 6342 (24 cores @ 2.8 GHz) +- 256 GB RAM +- Dual-port 25 GbE Mellanox ConnectX-4 LX network card with RoCEv2 +- Connected to 2 Mellanox SN2010 switches with MLAG + +## Notes + +Vitastor version was 1.3.1. + +Tests were ran from the storage nodes - 4 fio clients per each of 3 nodes. + +The same large 3 TB image was tested from all hosts because Vitastor has no +performance penalties related to running multiple clients over a single inode. + +CPU power saving was disabled. 4 OSDs were created per each NVMe. +Checksums were not enabled. Tests with checksums will be conducted later, +along with the newer version of Vitastor, and results will be updated. + +CPU configuration was not optimal because of NUMA. It's better to avoid 2-socket +platforms. It was especially noticeable in RDMA tests - in the form of ksoftirqd +processes (usually 1 per server) eating 100 % of one CPU core and actual bandwidth +of one network port reduced to 3-5 Gbit/s instead of 25 Gbit/s - probably because +of RFS (Receive Flow Steering) misses. Many network configurations were tried during +tests, but nothing helped to solve this problem, so final tests were conducted with +the default settings. + +# Raw drive performance + +- Linear write ~1000-2000 MB/s, depending on current state of the drive's garbage collector +- Linear read ~3300 MB/s +- T1Q1 random write ~60000 iops (latency ~0.015ms) +- T1Q1 random read ~14700 iops (latency ~0.066ms) +- T1Q16 random write ~180000 iops +- T1Q16 random read ~120000 iops +- T1Q32 random write ~180000 iops +- T1Q32 random read ~195000 iops +- T1Q128 random write ~180000 iops +- T1Q128 random read ~195000 iops +- T4Q128 random write ~525000 iops +- T4Q128 random read ~750000 iops + +These numbers make obvious that results could be much better if a faster network +was available, because NVMe drives obviously weren't a bottleneck. For example, +theoretical maximum linear read performance for 24 drives could be 79.2 GByte/s, +which is 633 Gbit/s. Real Vitastor read speed (both linear and random) was around +16 Gbyte/s, which is 130 Gbit/s. It's important to note that it was still much +larger than the network bandwidth of one server (50 Gbit/s). This is also correct +because tests were conducted from all 3 nodes. + +## 2 replicas + +| | TCP | RDMA | +|------------------------------|--------------|--------------| +| Linear read (4M T6 Q16) | 13.13 GB/s | 16.25 GB/s | +| Linear write (4M T6 Q16) | 8.16 GB/s | 7.88 GB/s | +| Read 4k T1 Q1 | 8745 iops | 10252 iops | +| Write 4k T1 Q1 | 8097 iops | 11488 iops | +| Read 4k T12 Q128 | 1305936 iops | 4265861 iops | +| Write 4k T12 Q128 | 660490 iops | 1384033 iops | + +CPU consumption OSD per 1 disk: + +| | TCP | RDMA | +|------------------------------|---------|---------| +| Linear read (4M T6 Q16) | 29.7 % | 29.8 % | +| Linear write (4M T6 Q16) | 84.4 % | 33.2 % | +| Read 4k T12 Q128 | 98.4 % | 119.1 % | +| Write 4k T12 Q128 | 173.4 % | 175.9 % | + +CPU consumption per 1 client (fio): + +| | TCP | RDMA | +|------------------------------|--------|--------| +| Linear read (4M T6 Q16) | 100 % | 85.2 % | +| Linear write (4M T6 Q16) | 55.8 % | 48.8 % | +| Read 4k T12 Q128 | 99.9 % | 96 % | +| Write 4k T12 Q128 | 71.6 % | 48.5 % | + +## 3 replicas + +| | TCP | RDMA | +|------------------------------|--------------|--------------| +| Linear read (4M T6 Q16) | 13.98 GB/s | 16.54 GB/s | +| Linear write (4M T6 Q16) | 5.38 GB/s | 5.7 GB/s | +| Read 4k T1 Q1 | 8969 iops | 9980 iops | +| Write 4k T1 Q1 | 8126 iops | 11672 iops | +| Read 4k T12 Q128 | 1358818 iops | 4279088 iops | +| Write 4k T12 Q128 | 433890 iops | 993506 iops | + +CPU consumption OSD per 1 disk: + +| | TCP | RDMA | +|------------------------------|--------|---------| +| Linear read (4M T6 Q16) | 24.9 % | 25.4 % | +| Linear write (4M T6 Q16) | 99.3 % | 38.4 % | +| Read 4k T12 Q128 | 95.3 % | 111.7 % | +| Write 4k T12 Q128 | 173 % | 194 % | + +CPU consumption per 1 client (fio): + +| | TCP | RDMA | +|------------------------------|--------|--------| +| Linear read (4M T6 Q16) | 99.9 % | 85.8 % | +| Linear write (4M T6 Q16) | 38.9 % | 38.1 % | +| Read 4k T12 Q128 | 100 % | 96.1 % | +| Write 4k T12 Q128 | 51.6 % | 41.9 % | + +## EC 2+1 + +| | TCP | RDMA | +|------------------------------|--------------|--------------| +| Linear read (4M T6 Q16) | 10.07 GB/s | 11.43 GB/s | +| Linear write (4M T6 Q16) | 7.74 GB/s | 8.32 GB/s | +| Read 4k T1 Q1 | 7408 iops | 8891 iops | +| Write 4k T1 Q1 | 3525 iops | 4903 iops | +| Read 4k T12 Q128 | 1216496 iops | 2552765 iops | +| Write 4k T12 Q128 | 278110 iops | 821261 iops | + +CPU consumption OSD per 1 disk: + +| | TCP | RDMA | +|------------------------------|---------|---------| +| Linear read (4M T6 Q16) | 68.6 % | 33.6 % | +| Linear write (4M T6 Q16) | 108.3 % | 50.2 % | +| Read 4k T12 Q128 | 138.1 % | 97.9 % | +| Write 4k T12 Q128 | 168.7 % | 188.5 % | + +CPU consumption per 1 client (fio): + +| | TCP | RDMA | +|------------------------------|--------|--------| +| Linear read (4M T6 Q16) | 88.2 % | 52.4 % | +| Linear write (4M T6 Q16) | 51.8 % | 46.8 % | +| Read 4k T12 Q128 | 99.7 % | 61.3 % | +| Write 4k T12 Q128 | 35.1 % | 31.3 % | diff --git a/docs/performance/bench2.ru.md b/docs/performance/bench2.ru.md new file mode 100644 index 00000000..65025dbe --- /dev/null +++ b/docs/performance/bench2.ru.md @@ -0,0 +1,157 @@ +[Документация](../../README-ru.md#документация) → Производительность → Более новый тест Vitastor 1.3.1 + +----- + +[Read in English](bench2.en.md) + +# Более новый тест Vitastor 1.3.1 + +- [Описание стенда](#описание-стенда) +- [Примечания](#примечания) +- [Производительность голых дисков](#производительность-голых-дисков) +- [2 реплики](#2-реплики) +- [3 реплики](#3-реплики) +- [EC 2+1](#ec-2-1) + +## Описание стенда + +Железо: 3 сервера, в каждом: +- 8x NVMe Samsung PM9A3 1.92 TB +- 2x Xeon Gold 6342 (24 ядра @ 2.8 GHz) +- 256 GB RAM +- Двухпортовая 25 GbE сетевая карта Mellanox ConnectX-4 LX с поддержкой RoCEv2 +- Подключение к 2 коммутаторам Mellanox SN2010 в MLAG + +## Примечания + +Версия Vitastor 1.3.1. + +Тесты проводились с самих серверов хранения - по 4 клиента fio с каждого из 3 серверов. + +Тестировался один большой образ размером 3 ТБ со всех хостов - создавать отдельные образы +для тестов в Vitastor необязательно, т.к. в Vitastor нет замедления при записи в один +узел несколькими клиентами. + +Экономия энергии CPU отключена. На каждый NVMe создавалось 4 OSD. +Контрольные суммы не включались. Тесты с контрольными суммами будут проведены +позднее. Тогда же будет протестирована более новая версия Vitastor, и результаты +будут обновлены. + +Конфигурация CPU стенда неоптимальна из-за NUMA - двухпроцессорных серверов лучше +избегать. Особенно это проявлялось во время тестов с RDMA - выражалось это в потреблении +100% одного ядра CPU одним процессом ksoftirqd и работой одного из двух сетевых портов +на скорости 3-5 ГБит/с вместо 25 ГБит/с - предположительно, из-за "непопаданий" RFS +(Receive Flow Steering) на нужные ядра. Решить эту проблему во время проведения тестов +не получилось. Было перепробовано множество различных настроек, но в итоге тесты проведены +с настройками по умолчанию, т.к. улучшения добиться не удалось. + +# Производительность голых дисков + +- Линейная запись ~1000-2000 МБ/с, в зависимости от состояния сборщика мусора диска +- Линейное чтение ~3300 МБ/с +- T1Q1 запись ~60000 iops (задержка ~0.015ms) +- T1Q1 чтение ~14700 iops (задержка ~0.066ms) +- T1Q16 запись ~180000 iops +- T1Q16 чтение ~120000 iops +- T1Q32 запись ~180000 iops +- T1Q32 чтение ~195000 iops +- T1Q128 запись ~180000 iops +- T1Q128 чтение ~195000 iops +- T4Q128 запись ~525000 iops +- T4Q128 чтение ~750000 iops + +Из данных цифр очевидно, что при наличии более быстрой сети результаты были бы +значительно лучше, так как в диски тест, очевидно, не упирался. Например, теоретический предел по +линейному чтению для 24 таких дисков был бы около 79.2 ГБайт/с, то есть, +633 гигабита в секунду. Реальная скорость чтения (и случайного, и линейного) +Vitastor составила примерно 16 ГБайт/с, то есть 130 гигабит в секунду. При этом +следует заметить, что этот результат всё равно значительно лучше пропускной способности +сети отдельно взятого узла - что тоже вполне логично, так как тест выполнялся со +всех трёх узлов. + +## 2 реплики + +| | TCP | RDMA | +|------------------------------|--------------|--------------| +| Линейное чтение (4M T6 Q16) | 13.13 ГБ/с | 16.25 ГБ/с | +| Линейная запись (4M T6 Q16) | 8.16 ГБ/с | 7.88 ГБ/с | +| Чтение 4k T1 Q1 | 8745 iops | 10252 iops | +| Запись 4k T1 Q1 | 8097 iops | 11488 iops | +| Чтение 4k T12 Q128 | 1305936 iops | 4265861 iops | +| Запись 4k T12 Q128 | 660490 iops | 1384033 iops | + +Потребление CPU OSD на 1 диск: + +| | TCP | RDMA | +|------------------------------|---------|---------| +| Линейное чтение (4M T6 Q16) | 29.7 % | 29.8 % | +| Линейная запись (4M T6 Q16) | 84.4 % | 33.2 % | +| Чтение 4k T12 Q128 | 98.4 % | 119.1 % | +| Запись 4k T12 Q128 | 173.4 % | 175.9 % | + +Потребление CPU на 1 клиента (fio): + +| | TCP | RDMA | +|------------------------------|--------|--------| +| Линейное чтение (4M T6 Q16) | 100 % | 85.2 % | +| Линейная запись (4M T6 Q16) | 55.8 % | 48.8 % | +| Чтение 4k T12 Q128 | 99.9 % | 96 % | +| Запись 4k T12 Q128 | 71.6 % | 48.5 % | + +## 3 реплики + +| | TCP | RDMA | +|------------------------------|--------------|--------------| +| Линейное чтение (4M T6 Q16) | 13.98 ГБ/с | 16.54 ГБ/с | +| Линейная запись (4M T6 Q16) | 5.38 ГБ/с | 5.7 ГБ/с | +| Чтение 4k T1 Q1 | 8969 iops | 9980 iops | +| Запись 4k T1 Q1 | 8126 iops | 11672 iops | +| Чтение 4k T12 Q128 | 1358818 iops | 4279088 iops | +| Запись 4k T12 Q128 | 433890 iops | 993506 iops | + +Потребление CPU OSD на 1 диск: + +| | TCP | RDMA | +|------------------------------|--------|---------| +| Линейное чтение (4M T6 Q16) | 24.9 % | 25.4 % | +| Линейная запись (4M T6 Q16) | 99.3 % | 38.4 % | +| Чтение 4k T12 Q128 | 95.3 % | 111.7 % | +| Запись 4k T12 Q128 | 173 % | 194 % | + +Потребление CPU на 1 клиента (fio): + +| | TCP | RDMA | +|------------------------------|--------|--------| +| Линейное чтение (4M T6 Q16) | 99.9 % | 85.8 % | +| Линейная запись (4M T6 Q16) | 38.9 % | 38.1 % | +| Чтение 4k T12 Q128 | 100 % | 96.1 % | +| Запись 4k T12 Q128 | 51.6 % | 41.9 % | + +## EC 2+1 + +| | TCP | RDMA | +|------------------------------|--------------|--------------| +| Линейное чтение (4M T6 Q16) | 10.07 ГБ/с | 11.43 ГБ/с | +| Линейная запись (4M T6 Q16) | 7.74 ГБ/с | 8.32 ГБ/с | +| Чтение 4k T1 Q1 | 7408 iops | 8891 iops | +| Запись 4k T1 Q1 | 3525 iops | 4903 iops | +| Чтение 4k T12 Q128 | 1216496 iops | 2552765 iops | +| Запись 4k T12 Q128 | 278110 iops | 821261 iops | + +Потребление CPU OSD на 1 диск: + +| | TCP | RDMA | +|------------------------------|---------|---------| +| Линейное чтение (4M T6 Q16) | 68.6 % | 33.6 % | +| Линейная запись (4M T6 Q16) | 108.3 % | 50.2 % | +| Чтение 4k T12 Q128 | 138.1 % | 97.9 % | +| Запись 4k T12 Q128 | 168.7 % | 188.5 % | + +Потребление CPU на 1 клиента (fio): + +| | TCP | RDMA | +|------------------------------|--------|--------| +| Линейное чтение (4M T6 Q16) | 88.2 % | 52.4 % | +| Линейная запись (4M T6 Q16) | 51.8 % | 46.8 % | +| Чтение 4k T12 Q128 | 99.7 % | 61.3 % | +| Запись 4k T12 Q128 | 35.1 % | 31.3 % |