Метрики

Система метрик Argenta предоставляет инструменты для измерения производительности ключевых компонентов библиотеки. Это позволяет отслеживать регрессию/прогрессию производительности между релизами и оптимизировать критические участки кода.


Запуск метрик

Для работы с метриками необходимо склонировать репозиторий и установить зависимости:

git clone https://github.com/koloideal/Argenta.git
cd Argenta
uv sync --group metrics

Запуск системы метрик:

python -m metrics

После запуска откроется интерактивная сессия с доступными командами для работы с бенчмарками.


Доступные команды

run-all

Запускает все зарегистрированные бенчмарки и выводит результаты в виде таблиц.

Синтаксис:

run-all [--without-gc] [--without-system-info]

Флаги:

  • --without-gc — отключает сборщик мусора во время выполнения бенчмарков для более стабильных результатов

  • --without-system-info — скрывает информацию о системе в выводе


list-types

Выводит список всех доступных типов бенчмарков с количеством тестов в каждой категории.

Синтаксис:

list-types

Пример вывода:

Available benchmark types:

  • flag_validation (9 benchmarks)
  • input_command_parse (7 benchmarks)
  • finds_appropriate_handler (5 benchmarks)

run-type

Запускает бенчмарки определённого типа.

Синтаксис:

run-type --type <type_name> [--without-gc] [--without-system-info]

Флаги:

  • --type — тип бенчмарков для запуска (обязательный)

  • --without-gc — отключает сборщик мусора

  • --without-system-info — скрывает информацию о системе


diagrams-generate

Генерирует визуальные диаграммы сравнения производительности для всех бенчмарков.

Синтаксис:

diagrams-generate [--iterations <number>] [--without-gc]

Флаги:

  • --iterations — количество итераций для каждого бенчмарка (по умолчанию 100)

  • --without-gc — отключает сборщик мусора

Диаграммы сохраняются в директорию metrics/reports/diagrams/<timestamp>/.


release-generate

Генерирует полный отчёт о производительности для текущей версии библиотеки. Используется при подготовке релизов.

Синтаксис:

release-generate

Команда автоматически:

  1. Определяет текущую версию библиотеки

  2. Запускает все бенчмарки с 1000 итераций и отключённым GC

  3. Генерирует JSON-отчёты и диаграммы сравнения

  4. Сохраняет результаты в metrics/reports/releases/<version>/


Интерпретация результатов

Результаты бенчмарков включают следующие метрики:

Среднее время (mean)

Среднее время выполнения операции. Основная метрика для сравнения производительности.

Медиана (median)

Медианное значение времени выполнения. Менее чувствительна к выбросам, чем среднее.

Стандартное отклонение (std)

Показывает стабильность измерений. Меньшее значение означает более предсказуемую производительность.


Рекомендации по использованию

Для оптимизации

Используйте run-type для фокусировки на конкретной области и --without-gc для более точных измерений.

Для визуализации

Команда diagrams-generate создаёт наглядные графики, удобные для презентаций и документации.

Для стабильных результатов

Закройте ресурсоёмкие приложения, используйте флаг --without-gc и увеличивайте количество итераций через --iterations.


Добавление новых бенчмарков

Вы можете реализовать свои бенчмарки для тестирования специфичных юнитов библиотеки. Новые бенчмарки добавляются через декоратор @benchmarks.register:

1from metrics.benchmarks.entity import benchmarks
2
3@benchmarks.register(
4    type_="my_category",
5    description="Description of what is being measured"
6)
7def benchmark_my_operation() -> None:
8    # Code whose performance is being measured
9    pass

Важно

Бенчмарк должен быть импортирован в metrics/benchmarks/__init__.py для автоматической регистрации.