Изменения

Перейти к: навигация, поиск

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

858 байтов убрано, 22:39, 15 февраля 2019
Нет описания правки
== Производительность случайной записи ==
{{[[Файл:Warning}} Сначала плохая icon.svg|32px]] Плохая новость!
Важная особенность Ceph — ''вся запись, даже та, для которой никто этого явно не просит, ведётся транзакционно''. То есть, никакая операция записи не завершается, пока она не записана в журналы всех OSD и не сделан fsync() диска. Так сделано, чтобы предотвращать RAID WRITE HOLE-подобные ситуации рассинхронизации данных между репликами при отключении питания, потере сети и т.п…
Всё это приводит к тому, что типичная настольная 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 устарел. Например, снапшоты там работают со скоростью снапшотов LVM (очень медленно), нет частичной перезаписи объектов в EC-пулах, нет контрольных сумм (вследствие чего вообще нельзя использовать size=2). Также CPU filestore жрёт сильнее и пиковые параллельные IOPS-ы у него хуже bluestore.}} В общем, чтобы понять, сколько у вас будет теоретически может быть IOPS-ов на запись в Ceph, диски под него нужно тестировать с опцией fio '''fdatasync=1'''. Либо можно fsync=1, но в файле поверх ФС будут различия, либо можно sync=1 iodepth=1 — почти то же самое, но чуть с другого бока. Разница между опциями (см. man fio):
* fsync=1 синхронизирует данные и метаданные тестируемого файла после каждой операции записи. Именно так работает BlueStore. Именно поэтому мы будем использовать именно эту опцию.
* fdatasync=1 синхронизирует только данные (но не метаданные) тестируемого файла после каждой операции записи. Соответственно, от fsync=1 это отличается, только если тестируется '''файл в ФС''', а не блочное устройство.<br /> {{Note}} fdatasync=1 надо использовать, когда на диске уже есть ФС, а прогнать тест хочется. Результаты будут достаточно корректными.

Навигация