Statystyczny harness regresji wydajności
Natywny konsolowy harness mierzy HotPDF na Win32 i Win64 i zwraca status błędu procesu, gdy workload przekroczy swój wersjonowany próg
Uruchomienie bramki
Tests\Performance\Run-HotPDFPerformance.bat
python tools\validate_performance_report.py ^
Tests\Performance\Reports\performance-Win32.json ^
Tests\Performance\Reports\performance-Win64.json
Plik bat buduje runner'y w trybie release, wykonuje trzy rozgrzewki, a potem 30 zmierzonych próbek na workload, stosuje Tests\Performance\thresholds.json i zapisuje po jednym raporcie na platformę w Tests\Performance\Reports
Uruchamiaj bramkę w izolacji na maszynie poza tym bezczynnej, bo konkurencja szeregowca i I/O niepowiązanych procesów są celowo widoczne w pomiarach
Workloady
- load otwiera deterministyczny fixture czterech stron i materializuje geometrię stron
- save serializuje współdzielony załadowany dokument do świeżego pliku i zrzuca go do pamięci masowej
- render rasteryzuje każdą stronę fixture'a w 72 DPI
- extract wyciąga i weryfikuje tekst na każdej stronie fixture'a
Fixture ma stałe bajty PDF i przypiętą tożsamość SHA-256, więc zmiana wejścia nie może po cichu użyć starych progów
Schemat raportu
hotpdf.performance.v1 zapisuje wersje produktu i harnessu, znacznik czasu UTC, stan rozgrzanego cache, środowisko, tożsamość fixture'a, surowe próbki, podsumowania, zastosowane progi, błędy i ogólny stan zaliczenia
Każde podsumowanie zawiera minimum, p50 i p95 metodą nearest-rank, maksimum, średnią arytmetyczną, wariancję próbkową N-1, odchylenie standardowe, zaobserwowany i szczytowy RSS procesu, maksymalny dodatni przyrost working setu oraz łączne I/O procesu: odczyt, zapis i inne
Walidator niezależnie przelicza statystyki czasów, RSS, sumy I/O, decyzje progowe i ogólny stan zaliczenia ze surowych próbek
Opcje runnera i kody wyjścia
HotPDFPerformanceRunner.exe \
--output=report.json \
--thresholds=thresholds.json \
--warmup=3 \
--samples=30
--samples nie może być mniejsze niż 30, a --warmup nie może być mniejsze niż 1
- Kod wyjścia
0oznacza, że każdy workload został zaliczony - Kod wyjścia
1oznacza błąd konfiguracji, fixture'a, parsowania lub wykonania - Kod wyjścia
2oznacza, że przynajmniej jeden próg wydajności niezaliczony
Utrzymanie progów
Utrzymuj osobne sufity Win32 i Win64 dla p50, p95, zaobserwowanego RSS, przyrostu working setu, bajtów odczytu i bajtów zapisu
Zmieniaj próg dopiero po przeglądzie surowych próbek, warunków maszyny, tożsamości fixture'a, intencji implementacji i powtórzonych izolowanych uruchomień na obu platformach
Zobacz też: Skalowalne ładowanie z dostępem losowym, Parsowanie prostych obiektów na wycinkach, Diagnostyka renderowania i telemetria operacji