При использовании репликации:
- Задержка чтения в 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). Либопроизводительность сети * N/(N+K), если в сеть упрётся раньше. Если точнее, то:- С новым хранилищем: сумма смешанного IOPS всех дисков при
(N-1)/(2 + N-1 + K*2)*100 %чтения, делённая на(2 + N-1 + K*2).- Например, при EC 2+1 это:
(сумма IOPS при 20% чтения) / 5. - При EC 6+3 это:
(сумма IOPS при 38% чтения) / 13.
- Например, при EC 2+1 это:
- Со старым хранилищем: сумма смешанного IOPS всех дисков при
(N-1)/(3 + N-1 + K*3)*100 %чтения, делённая на(3 + N-1 + K*3).- Например, при EC 2+1 это:
(сумма IOPS при 14% чтения) / 7. - При EC 6+3 это:
(сумма IOPS при 30% чтения) / 17.
- Например, при EC 2+1 это:
- С новым хранилищем: сумма смешанного IOPS всех дисков при
WA (Write Amplification, мультипликатор записи):
- С новым хранилищем для 4 КБ записи: WA всегда примерно 1, если только вы не установите atomic_write_size вручную в 0.
- С новым хранилищем и большими записями (8-124 КБ): WA примерно 1, если вы используете NVMe-диски с поддержкой атомарной записи, или примерно 2, если вы используете другие диски.
- Со старым хранилищем, WA примерно
(2 * размер записи + 4 КБ) / (размер записи). То есть, для 4 КБ записи WA=3, а для 8-124 КБ WA ближе к 2. - И с новым, и со старым хранилищем и для записи размером block_size: WA примерно равен 1.
Мультипликатор записи состоит из:
- С новым хранилищем:
- Запись блока буфера, если диски без поддержки атомарной записи
- Запись блока данных
- Запись(-и) блоков метаданных (амортизированные)
- Со старым хранилищем:
- Запись блока журнала (амортизированная)
- Запись данных в журнал
- Запись блока метаданных
- Ещё одна запись блока журнала для EC/XOR пулов (амортизированная)
- Запись блока данных
Другими потенциальными возможностями снижения WA могли бы быть SSD с внутренним 512-байтным блоком либо NVDIMM, но и то, и другое сейчас выглядит недоступным на рынке.
На практике
На практике, используя тесты 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 при использовании репликации