Изменения

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

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

306 байтов убрано, 16:04, 16 октября 2019
Нет описания правки
Как тестировать Ceph после сборки:
* rados bench лучше не использовать — он создаёт для тестирования очень мало объектов (в 1 поток всего 2, в 128 — несколько сотен). Изfio -за этого, например, на заполненном HDD результаты будут сильно оптимистичнее, так как снимается необходимость постоянного поиска метаданных в RocksDBioengine=rbd.Нужно сделать следующее:* # fio в RBD: {{Cmd|-ioengine=rbd -direct=1-name=test -bs=4M -iodepth=16 -rw=write -pool=rpool_hdd -runtime=60 -rbdname=testimg*# fio -ioengine=rbd -direct=1 -invalidatename=test -bs=4k -iodepth=1 -rw=randwrite -pool=rpool_hdd -runtime=60 -rbdname=testimg*# fio -ioengine=rbd -direct=1 -name=test -bs=4k -iodepth=128 -rw=randwrite -pool=rpool_hdd -runtime=60 -rbdname=testimg}}*: И потом то же самое для read/randread.* лучше запускать с другого узла — результат будет : Смысл в 1том, чтобы протестировать а) задержку в идеальных условиях б) линейную пропускную способность в) случайные iops-ы.5 раза лучше, видимо*: Образ сначала нужно заполнить линейной записью, так как чтение из-за отсутствия переключения контекстов между ceph OSD и fioпустого образа очень быстрое :)*: Запускать оттуда, где будут реальные пользователи RBD. можно запускать два теста параллельноВ целом, bluestore любит параллелизм — суммарный результат вполне может оказаться ещё в 2 раза с другого узла результаты обычно лучше.*Всё то же самое через krbd.* для мазохистов — параметр # fio -ioengine=libaio -sync=1 -direct=1 -name=test -bs=4M -iodepth=128 поменять на 16 -rw=write -pool=rpool_hdd -runtime=60 -rbdname=testimg*# fio -ioengine=rbd -direct=1 -name=test -bs=4k -iodepth=1. цифра будет раз в 20 хуже и она будет отражать -rw=randwrite -pool=rpool_hdd -runtime=60 -rbdname=testimg*# fio -ioengine=rbd -direct=1 -name=test -bs=4k -iodepth=128 -rw=randwrite -pool=rpool_hdd -runtime=60 -rbdname=testimg* Всё то, сколько примерно TPS сможет выполнить ваша OLTP СУБД же самое изнутри Ceph.виртуалки или через krbd:* Встроенной утилитой {{Cmd|rbd bench # fio -ioengine=libaio -iodirect=1 -size 4096 name=test -bs=4M -ioiodepth=16 -threads 64 rw=write -runtime=60 -iofilename=/dev/rbdX*# fio -total 10G ioengine=libaio -direct=1 -iosync=1 -pattern rand name=test -bs=4k -ioiodepth=1 -type write rpool_hddrw=randwrite -runtime=60 -filename=/testimg}}dev/rbdX* Можно тестировать и # fio изнутри виртуалки, rbd драйвер нормально создаёт параллельную нагрузку — проверено.-ioengine=libaio -direct=1 -name=test -bs=4k -iodepth=128 -rw=randwrite -runtime=60 -filename=/dev/rbdX* Производительность может отличаться на заполненном и незаполненном RBD: Заметьте, что при тестировании задержки добавилась опция -образеsync=1. Но отличия небольшиеЭто не случайно, думатьа соответствует режиму работы СУБД (транзакционная запись в 1 поток). В ioengine=rbd понятие sync отсутствует, что там будет разница в несколько раз — не нужновсё всегда «sync».* При тестировании случайной записи в ceph в один поток (fsync-gobench*: Или https:/fdatasync/syncgithub.com/iodepth=1vitalif/rados ceph-bench , что примерно то же самое. Родоначальник идеи — @socketpair Марк Коренберг ([https://github.com/socketpair/ceph-t 1bench оригинал]) вы фактически всё время тестируете ОДИН диск. То есть, всё время тестируются разные диски, но в каждый отдельный момент времени запрос идёт Бенчилка тестирует '''только к одной placement groupотдельные OSD''' (тройке-четвёрке, что очень помогает понять, кто же из них тупит-пятёрке дисков)то.* Соответственно: Перед запуском надо создать пул без репликации {{Cmd|ceph osd pool create bench 128 replicated; ceph osd pool set bench size 1; ceph osd pool set bench min_size 1}} и с числом PG, вы '''не увидите''' 100 % утилизации дисков на хостах при тестировании в один потокдостаточным, однопоточная нагрузка '''не может''' полностью загрузить кластер.чтобы при случайном выборе туда попали все OSD
Как тестировать производительность отдельных OSDПримечания:* Создать pool без репликации {{Cmd|ceph osd pool create bench 128 replicated; ceph osd pool set bench size 1; ceph osd pool set bench min_size 1}} и с числом PG, достаточным, чтобы при случайном выборе туда попали все OSD* Воспользоваться одной из бенчилок https://githubdd не использовать вообще никогда.com/rumanzo/ceph-gobench или https://github.com/vitalif/ceph-bench*: Обе — прокачанные аналоги бенчилки Марка https://githubrados bench использовать тоже не надо, т.к.com/socketpair/ceph-bench он создаёт для тестирования очень мало объектов (её раньше запускали {{Cmd|python mainв 1 поток всего 2, в 128 — несколько сотен).py "Случайная" запись в такое число объектов не очень--keyring /etc/ceph/cephто и случайная.client.admin.keyring * rbd bench osd}} — использовать можно, но она даёт некорректные результаты в HDD+SSD сетапах с Bluestore, так как всё время перезаписывает один и тот же блок)fio лучше.* Полученный результат, в частностиНе надо удивляться, что Ceph не может помочь выявить отдельную тупящую OSDзагрузить диски на 100 % при случайной записи. Он тормоз :)
== О транзакционности записи ==

Навигация