Статистический стенд регрессии производительности
Консольный стенд на нативном коде измеряет HotPDF на Win32 и Win64 и возвращает код ошибки процесса, если workload превышает свою версионированную отсечку
Запуск проверки
Tests\Performance\Run-HotPDFPerformance.bat
python tools\validate_performance_report.py ^
Tests\Performance\Reports\performance-Win32.json ^
Tests\Performance\Reports\performance-Win64.json
Bat-файл собирает release-раннеры, выполняет три прогрева и по 30 измеренных выборок на каждый workload, применяет Tests\Performance\thresholds.json и пишет по одному отчёту на платформу в Tests\Performance\Reports
Запускайте проверку изолированно на машине, свободной от другой нагрузки: конкуренция за планировщик и посторонний I/O процессов намеренно попадают в измерения
Workloads
- load открывает детерминированную фикстуру на четыре страницы и материализует геометрию страниц
- save сериализует общий загруженный документ в новый файл и сбрасывает его на хранилище
- render растеризует каждую страницу фикстуры при 72 DPI
- extract извлекает и проверяет текст на каждой странице фикстуры
У фикстуры зафиксированы байты PDF и SHA-256-идентичность, поэтому изменение входных данных не сможет молча переиспользовать старые пороги
Схема отчёта
hotpdf.performance.v1 записывает версии продукта и стенда, UTC-метку времени, состояние тёплого кеша, окружение, идентичность фикстуры, сырые выборки, сводные данные, применённые пороги, сбои и общий статус прохождения
Каждая сводка содержит минимум, p50 и p95 по методу nearest-rank, максимум, среднее арифметическое, выборочную дисперсию с N-1, стандартное отклонение, наблюдаемый и пиковый RSS процесса, максимальный положительный рост working set, а также суммарные read, write и прочий process I/O
Валидатор независимо пересчитывает временные статистики, RSS, суммы I/O, решения по порогам и общий статус прохождения из сырых выборок
Опции раннера и коды выхода
HotPDFPerformanceRunner.exe \
--output=report.json \
--thresholds=thresholds.json \
--warmup=3 \
--samples=30
--samples не может быть меньше 30, а --warmup — меньше единицы
- Код выхода
0означает, что все workload'ы прошли - Код выхода
1означает сбой конфигурации, фикстуры, разбора или выполнения - Код выхода
2означает, что провален хотя бы один порог производительности
Сопровождение порогов
Держите отдельные потолки для Win32 и Win64 по p50, p95, наблюдаемому RSS, росту working set, байтам чтения и байтам записи
Пересматривайте порог только после разбора сырых выборок, состояния машины, идентичности фикстуры, замысла реализации и повторных изолированных прогонов на обеих платформах
См. также: Scalable and Random-Access PDF Loading, Span-Based Simple-Object Parsing, Rendering Diagnostics and Operation Telemetry