Files
2026-02-06 23:52:26 +03:00

174 lines
6.1 KiB
ReStructuredText

Метрики
=======
Система метрик ``Argenta`` предоставляет инструменты для измерения производительности ключевых компонентов библиотеки. Это позволяет отслеживать регрессию/прогрессию производительности между релизами и оптимизировать критические участки кода.
-----
Запуск метрик
-------------
Для работы с метриками необходимо склонировать репозиторий и установить зависимости:
.. code-block:: bash
git clone https://github.com/koloideal/Argenta.git
cd Argenta
uv sync --group metrics
Запуск системы метрик:
.. code-block:: bash
python -m metrics
После запуска откроется интерактивная сессия с доступными командами для работы с бенчмарками.
-----
Доступные команды
-----------------
run-all
~~~~~~~
Запускает все зарегистрированные бенчмарки и выводит результаты в виде таблиц.
**Синтаксис:**
.. code-block:: shell
run-all [--without-gc] [--without-system-info]
**Флаги:**
- ``--without-gc`` — отключает сборщик мусора во время выполнения бенчмарков для более стабильных результатов
- ``--without-system-info`` — скрывает информацию о системе в выводе
-----
list-types
~~~~~~~~~~
Выводит список всех доступных типов бенчмарков с количеством тестов в каждой категории.
**Синтаксис:**
.. code-block:: shell
list-types
**Пример вывода:**
.. code-block:: text
Available benchmark types:
• flag_validation (9 benchmarks)
• input_command_parse (7 benchmarks)
• finds_appropriate_handler (5 benchmarks)
-----
run-type
~~~~~~~~
Запускает бенчмарки определённого типа.
**Синтаксис:**
.. code-block:: shell
run-type --type <type_name> [--without-gc] [--without-system-info]
**Флаги:**
- ``--type`` — тип бенчмарков для запуска (обязательный)
- ``--without-gc`` — отключает сборщик мусора
- ``--without-system-info`` — скрывает информацию о системе
-----
diagrams-generate
~~~~~~~~~~~~~~~~~
Генерирует визуальные диаграммы сравнения производительности для всех бенчмарков.
**Синтаксис:**
.. code-block:: shell
diagrams-generate [--iterations <number>] [--without-gc]
**Флаги:**
- ``--iterations`` — количество итераций для каждого бенчмарка (по умолчанию 100)
- ``--without-gc`` — отключает сборщик мусора
Диаграммы сохраняются в директорию ``metrics/reports/diagrams/<timestamp>/``.
-----
release-generate
~~~~~~~~~~~~~~~~
Генерирует полный отчёт о производительности для текущей версии библиотеки. Используется при подготовке релизов.
**Синтаксис:**
.. code-block:: shell
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``:
.. literalinclude:: ../code_snippets/metrics/add_new_benchmark.py
:language: python
:linenos:
.. important::
Бенчмарк должен быть импортирован в ``metrics/benchmarks/__init__.py`` для автоматической регистрации.