68 lines
6.9 KiB
Markdown
68 lines
6.9 KiB
Markdown
[Документация](../../README-ru.md#документация) → Производительность → Теоретическая максимальная производительность Vitastor
|
||
|
||
-----
|
||
|
||
[Read in English](theoretical.en.md)
|
||
|
||
# Теоретическая максимальная производительность Vitastor
|
||
|
||
При использовании репликации:
|
||
- Задержка чтения в 1 поток (T1Q1): 1 сетевой RTT + 1 чтение с диска.
|
||
- Запись+fsync в 1 поток:
|
||
- С мгновенным сбросом: 2 RTT + 1 запись.
|
||
- С отложенным ("ленивым") сбросом: 4 RTT + 1 запись + 1 fsync.
|
||
- Линейное чтение: сумма МБ/с чтения всех дисков, либо общая производительность сети (сумма пропускной способности сети всех нод), если в сеть упрётся раньше.
|
||
- Линейная запись: сумма МБ/с записи всех дисков / число реплик, либо производительность сети / число реплик, если в сеть упрётся раньше.
|
||
- Параллельное случайное мелкое чтение: сумма IOPS чтения всех дисков, либо производительность сети, если в сеть упрётся раньше.
|
||
- Параллельная случайная мелкая запись: сумма IOPS записи всех дисков / число реплик / WA, либо производительность сети / число реплик, если в сеть упрётся раньше.
|
||
|
||
При использовании кодов коррекции ошибок (EC N+K):
|
||
- Задержка чтения в 1 поток (T1Q1): 1.5 RTT + 1 чтение.
|
||
- Запись+fsync в 1 поток:
|
||
- С мгновенным сбросом: 3.5 RTT + 1 чтение + 2 записи.
|
||
- С отложенным ("ленивым") сбросом: 5.5 RTT + 1 чтение + 2 записи + 2 fsync.
|
||
- Под 0.5 на самом деле подразумевается (N-1)/N, где N - число дисков данных,
|
||
что означает, что дополнительное обращение по сети не нужно, когда операция
|
||
чтения обслуживается локально.
|
||
- Линейное чтение: сумма МБ/с чтения всех дисков, либо общая производительность сети, если в сеть упрётся раньше.
|
||
- Линейная запись: сумма МБ/с записи всех дисков * N/(N+K), либо производительность сети * N / (N+K), если в сеть упрётся раньше.
|
||
- Параллельное случайное мелкое чтение: сумма IOPS чтения всех дисков либо производительность сети, если в сеть упрётся раньше.
|
||
- Параллельная случайная мелкая запись: грубо `(сумма IOPS / (N+K) / WA)`. Если точнее, то:
|
||
сумма смешанного IOPS всех дисков при `(N-1)/(N*4 + K*5 + 1)*100 %` чтения, делённая на `(N*4 + K*5 + 1)`.
|
||
Либо, производительность сети * N/(N+K), если в сеть упрётся раньше.
|
||
- Например, при EC 2+1 это: `(сумма IOPS при 7% чтения) / 14`.
|
||
- При EC 6+3 это: `(сумма IOPS при 12.5% чтения) / 40`.
|
||
|
||
WA (мультипликатор записи) для 4 КБ блоков в Vitastor обычно составляет 3-5:
|
||
1. Запись метаданных в журнал
|
||
2. Запись блока данных в журнал
|
||
3. Запись метаданных в БД
|
||
4. Ещё одна запись метаданных в журнал при использовании EC
|
||
5. Запись блока данных на диск данных
|
||
|
||
Если вы найдёте SSD, хорошо работающий с 512-байтными блоками данных (Optane?),
|
||
то 1, 3 и 4 можно снизить до 512 байт (1/8 от размера данных) и получить WA всего 2.375.
|
||
|
||
Если реализовать поддержку NVDIMM, то WA можно, условно говоря, ликвидировать вообще - все
|
||
дополнительные операции записи смогут обслуживаться DRAM памятью. Но для этого необходим
|
||
тестовый кластер с NVDIMM - пишите, если готовы предоставить такой для тестов.
|
||
|
||
Кроме того, WA снижается при использовании отложенного/ленивого сброса при параллельной
|
||
нагрузке, т.к. блоки журнала записываются на диск только когда они заполняются или явным
|
||
образом запрашивается fsync.
|
||
|
||
## На практике
|
||
|
||
На практике, используя тесты fio со страницы [Понимание сути производительности систем хранения](understanding.ru.md),
|
||
нормальную TCP-сеть, хорошие серверные SSD/NVMe, при отключённом энергосбережении процессоров вы можете рассчитывать на:
|
||
- От 5000 IOPS в 1 поток (T1Q1) и на чтение, и на запись при использовании репликации (задержка до 0.2мс)
|
||
- От 5000 IOPS в 1 поток (T1Q1) на чтение и 2200 IOPS в 1 поток на запись при использовании EC (задержка до 0.45мс)
|
||
- От 80000 IOPS на чтение в параллельном режиме на 1 ядро, от 30000 IOPS на запись на 1 ядро (на 1 OSD)
|
||
- Скорость параллельного линейного чтения и записи, равная меньшему значению из скорости дисков или сети
|
||
|
||
Худшие результаты означают, что у вас либо медленные диски, либо медленная сеть, либо что-то неправильно настроено.
|
||
|
||
Зафиксированный на данный момент рекорд задержки:
|
||
- 9668 IOPS (0.103 мс задержка) в 1 поток (T1Q1) на запись с TCP и NVMe при использовании репликации
|
||
- 9143 IOPS (0.109 мс задержка) в 1 поток (T1Q1) на чтение с TCP и NVMe при использовании репликации
|