Изменения

Производительность Ceph

227 байтов добавлено, 21:07, 12 ноября 2018
Нет описания правки
Важная особенность Ceph — ''вся запись, даже та, для которой никто этого явно не просит, ведётся транзакционно''. То есть, никакая операция записи не завершается, пока она не записана в журналы всех OSD и не сделан fsync() диска. Так сделано, чтобы предотвращать RAID WRITE HOLE-подобные ситуации рассинхронизации данных между репликами при отключении питания, потере сети и т.п…
Сама запись на устройство При этом оптимизацией транзакций там, похоже, вообще никто нормально не занимался и репликация с других поэтому при работе OSD происходит отложенно и асинхронноsync-ов не то что столько же, но какая разница — она все равно создаёт дополнительную нагрузку на устройства и притормаживает последующие запросысколько запросов записи — их даже БОЛЬШЕ (смешно, да). В таких условиях «deferred» операции превращаются не в deferred, а непонятно во что, поэтому понятия «асинхронности» там фактически никакого нет.
Всё это приводит к тому, что типичная настольная SSD-шка в Ceph выдаёт '''неприлично низкие IOPS-ы''' — обычно от 500 до 2000. И это при том, что при обычном тестировании почти любая SSD выдаёт > 20000 iops. Даже самый паршивый китайский noname выдаёт не менее 10000 iops. NVMe легко выжимает 150000 и больше. Но стоит начать использовать fsync… и та же NVMe выдаёт 600 iops (на 2.5 порядка меньше).
{{Box|1={{Note}} Старый FileStore на плохих дисках быстрее BlueStore где-то в 1.5 раза. На хороших FileStore менее латентный; хорошие он лучше утилизирует в один поток, то есть, даёт больше iops в один поток (у него меньше задержки). Но это не значит, что его надо использовать — по остальным параметрам FileStore устарел. Например, снапшоты там работают со скоростью снапшотов LVM (очень медленно), нет частичной перезаписи объектов в EC-пулах, нет контрольных сумм (вследствие чего вообще нельзя использовать size=2). Также CPU filestore жрёт сильнее и пиковые параллельные IOPS-ы у него хуже bluestore.}}
В общем, чтобы понять, сколько у вас будет IOPS-ов на запись в Ceph, диски под него нужно тестировать с опцией fio '''fsyncfdatasync=1'''. Или fdatasyncЛибо можно fsync=1, если тестируете но в файле поверх ФС. Или будут различия, либо можно sync=1 iodepth=1, эффект обычно 1 — почти тот то жесамое, что от fsync=1но чуть с другого бока. Разница между опциями (см. man fio):
* fsync=1 синхронизирует данные и метаданные тестируемого файла после каждой операции записи. Именно так работает BlueStore. Именно поэтому мы будем использовать именно эту опцию.
* fdatasync=1 синхронизирует только данные (но не метаданные) тестируемого файла после каждой операции записи. Соответственно, от fsync=1 это отличается, только если тестируется '''файл в ФС''', а не блочное устройство.<br /> {{Note}} fdatasync=1 надо использовать, когда на диске уже есть ФС, а прогнать тест хочется. Результаты будут достаточно корректными.