CBT и rook
Изначально CBT разработан с учётом установки цефа прямиком в хостовую систему, то есть безо всяких контейнеров. К сожалению, прогресс не стоит на месте, смузи пьётся и спиннеры крутятся, а значит повсеместное присутствие контейнеров приходится принимать как данность. К счастью, ЦБТ способен выполнять бОльшую часть своих функций даже с учётом контейнеризации. Плохая новость состоит в том, что ЦБТ не работает с кубовой инсталляцией, потому что полагается на pdsh в части распараллеливания нагрузки и эмуляции мультипроцессности . Для того, чтобы цбт работал в кубе, я выпилил все параллельные ssh запросы, а также существенно упростил код для обеспечения работы с голым радос слоем.
Как запустить
Для начала деплоим в нужный НС с уже развёрнутым кластером. Пример манифеста деплоя лежит в cbt.yaml. Это практически полная копия тулбокса рука, потому что необходимы собранные конфиги и кейринги кластера для непосредственной работы с ним. Исключение составляет лишь образ, который должен быть уже собран и запушен в какое нибудь режистри.
Файл настроек выглядит так
cluster: # Глобальные настройки для всех тестов
iterations: 1 # Сколько раз прогониться каждый тест
tmp_dir: "/tmp/cbt" # Временная дира для хранения всякой дичи, нужной цбт
health_wait: 60 # Время ожидания готовности пула (при бОльшем кол-ве ПГ нужно бОльшее время. на 2048 ПГ 60 секунд хватает вроде бы)
pool_profiles: # Список профилей, которые будут подтягивать тесты
rep_test: # Имя профиля с последующими характеристиками
pg_size: 32
pgp_size: 32
replication: 3
erasure42:
pg_size: 2048
pgp_size: 2048
replication: 'erasure'
erasure_profile: 'ec42' # Имя ЕС профиля для создания пула
ec_overwrites: True
erasure_profiles:
ec42:
erasure_k: 4
erasure_m: 2
plugin: isa
benchmarks: # Список тестов
radosbench: #Подтянет класс Radosbench
op_size: # Размер объектов в байтах. Замечу, что цеф оперирует в MiB, а не в MB. Можно указать списком
- 4096
- 4194304
write_only: true # Пока что только запись. Тесты на чтение не работают
# read_only: True
# readmode: seq
# prefill_time: 30
time: 300 # Время прогона одного теста
concurrent_ops: # Кол-во потоков в одном процессе
concurrent_procs: # Кол-во процессов. Можно указать списком
- 1
- 4
target_pool: test # Целевой пул, куда лить. Если его нет, то цеф создаст
rebuild_every_test: True # Пересоздавать пул после каждого теста. Если False, то нужно перед тестом создать пул руками
pool_profile: erasure42 # Профиль, который применится при создании пула
Запуск происходит следующим образом -
python3 cbt.py -a output examle/rados-test.yaml
output - это имя диры, куда оно будет складывать результаты.
второй параметр - конфиг.
Обработка результатов
В корневом каталоге находится скрипт rados_parser.py.
usage: rados_parser.py [-h] --dir DIR [--details] [--comma]
parse results of radosbench tests
options:
-h, --help show this help message and exit
--dir DIR find files to parse
--details Show results of all processes files
--comma comma instead of dot in output
Флаг --dir ожидает увидеть директорию, по предыдущим примерам, output/results. Флаг --details покажет детали обработки каждого из файлов Флаг --comma заменит точки на запятые в плавающих числах (гугол шитс, например, хочет запятые)
Суть его работы заключается в следующем:
- рекурсивно пройтись по всем подкаталогам
- найти файлы json_output.* и benchmark_config.yam
- распарсить каждый джсон и получить оттуда иопсы, латенси и бв. Затем это всё просуммировать, а где-то даже и разделить
- вывести результат в терминал
Отдельно замечу, что лучше диру output очищать перед каждым новым запуском бенчилки, потому что иначе результаты сложно разбирать визуально (но может кому то будет норм)