benchmark replaces and NOPs
Merge request reports
Activity
added 3 commits
-
d12f100d...6379a7e5 - 2 commits from branch
master
- 7e393734 - test: benchmark replaces
-
d12f100d...6379a7e5 - 2 commits from branch
added 2 commits
- Resolved by Yaroslav Dynnikov
- Resolved by Valentin Syrovatskiy
- Resolved by Yaroslav Dynnikov
- Resolved by Yaroslav Dynnikov
- Resolved by Yaroslav Dynnikov
added 2 commits
Я считаю ПР пора мержить, с задачей он справляется. Хотя есть ряд вещей, которые имеет смысл улучшить в будущем. Выпишу их здесь.
- Зависимость результата от количества файберов.
Любую операцию в тарантуле можно модельно представить в виде двух частей - "полезную нагрузку", когда файбер что-то делает и занимает tx тред, и латенси - когда файбер йилдит и ждет, например, записи в wal.
Как замеры не проводи, результирующий рпс будет показывать нам их сумму. А хочется все-таки видеть полезную нагрузку в чистом виде. Чтобы этого добиться, мы запускаем много файберов, но надо еще дождаться насыщения по цпу. Неплохо было бы эту задачу автоматизировать, но я пока не заю как.
- Время выполнения тестов.
test_benchmark_replace сейчас делат
n*c
реплейсов, гдеc
- количество файберов. Это приводит к линейному росту времени выполнения. Тест и так выполняется примерно минуту, а если я добавляю в табличку тест на 500 файберов, то получаю еще + 100 секунд примерно (500 файберов * 100_000 реплейсов / 500_000 рпс).Другой подход к измерениям - ограничивать суммарное время и смотреть сколько операций влезло. Это чуть сложнее по коду, но в будущем стоит сделать.
- Сбор результатов.
Сейчас каждый бенчмарк считает и репортит рпсы сам по себе. Это дублирование кода. Это можно объединить.
- Вывод результатов.
Чтобы увидеть результаты,
test_benchmark_replace
иtest_benchmark_nop
приходится запускать по-одному. К тому же,with capsys.disabled()
как-то странно себя ведет, и я периодически наблюдаю логи пикодаты в консоли.На эту тему можно посмотреть в сторону https://smarie.github.io/python-pytest-harvest/. Идея простая - рядом заводится отдельная фикстура, в которую каждая тест функция отправляет свои репорты. А печатает их teardown фикстуры в конце всех тестов.
Другой интересный проект - https://pypi.org/project/pytest-benchmark/. Сам по себе он нам вряд ли подойдет, но там можно почерпнуть идей - скриншоты с репортами у них красивые.
- Старт кластеров разного размера.
Это тоже дублирование кода. Все то же самое можно было бы сделать при помощи
@pytest.mark.parametrize
added 2 commits
added 2 commits
mentioned in issue #135 (closed)
enabled an automatic merge when the pipeline for ae55e9f7 succeeds
enabled an automatic merge when the pipeline for ae55e9f7 succeeds
enabled an automatic merge when the pipeline for ae55e9f7 succeeds