vitastor/docs/performance/theoretical.ru.md

6.9 KiB
Raw Permalink Blame History

Документация → Производительность → Теоретическая максимальная производительность Vitastor


Read in English

Теоретическая максимальная производительность 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 со страницы Понимание сути производительности систем хранения, нормальную 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 при использовании репликации