Ga naar inhoud

Eerlijke benchmarking

Spec: ISO/IEC 25010 Spec: ISO/IEC 17025 Evidence: Benchmark-backed

Een benchmarkgetal zonder bijbehorende methode zegt vrijwel niets. “NextPDF rendert een document in N milliseconden” zegt je niets, tenzij je het document, de hardware, het aantal runs en de variantie kent. Deze pagina legt uit hoe NextPDF prestaties meet, waarom het een gefilterd signaal rapporteert in plaats van een opvallend getal, en waarom het geen los snelheidsgetal publiceert.

Prestatieclaims zijn makkelijk te publiceren en makkelijk te vervalsen, meestal per ongeluk. Eén enkele opgewarmde run op een niet-belaste laptop, het snelste resultaat uit tien pogingen of een microbenchmark van een functie die niemand op een hot path aanroept, kunnen allemaal een echt getal opleveren dat niets voorspelt over je werklast. Spec: ISO/IEC 25010 definieert prestatie-efficiëntie als het uitvoeren van functies binnen tijdparameters en doorvoerparameters onder gespecificeerde omstandigheden (ISO/IEC 25010, §3.10). Haal “onder gespecificeerde omstandigheden” weg en het getal is geen meting meer. Dan blijft er een betekenisloos getal over.

Er bestaat ook een stillere fout: een getal dat ooit klopte. Zodra je een benchmarkresultaat in tekst plakt, zet je het vast. Ondertussen blijven de code, de runtime en de hardware veranderen. Een verouderde claim dat iets “snel” is, helpt niet alleen weinig. Die claim is onjuist, en stilzwijgend onjuist.

  • Een prestatiegetal is betekenisloos zonder de bijbehorende methode: de invoer, de omgeving, het aantal runs, het opwarmbeleid en de spreiding.
  • NextPDF meet met herhaalde runs, verwerpt opwarmiteraties en rapporteert een verdeling, niet één enkel best-case-getal.
  • Regressiedetectie is statistisch: een resultaat wordt met de t-toets van Welch aan een baseline getoetst, zodat een verandering zowel statistisch significant als groot genoeg om ertoe te doen moet zijn voordat die als regressie telt.
  • Een instabiele omgeving wordt gedetecteerd en gerapporteerd, niet stilzwijgend weggemiddeld — een hoge variantie tussen runs maakt het resultaat ongeldig in plaats van stilletjes in het gemiddelde te verdwijnen.
  • Prestaties worden gepubliceerd als een levend signaal dat met de build wordt gegenereerd, nooit als een vastgezette kopregel — daarom verschijnt op deze pagina geen getal in milliseconden.

De prestatiepoort van de engine is een statistische toets, geen losse getimede run. De gedocumenteerde methode voert de te meten suite meerdere keren uit, verwerpt een geconfigureerd aantal opwarmruns en berekent het gemiddelde, de standaarddeviatie en de variatiecoëfficiënt voor zowel duur als geheugen. Vervolgens vergelijkt de poort het huidige resultaat met een vastgelegde baseline:

  1. Repeat Run the measured suite N times under fixed conditions.
  2. Discard warmup Drop the first W runs so cold-start noise is excluded.
  3. Summarise Compute mean, standard deviation, and coefficient of variation for duration and memory.
  4. Test vs baseline Welch's t-test (two-sample, unequal variance) against the committed baseline.
  5. Decide Significant AND effect over threshold → regression. Variance over threshold → unreliable, not a pass. Absolute ceiling breach → hard fail.
Hoe de benchmarkpoort van NextPDF beslist over geslaagd, mislukt of onbetrouwbaar: voer herhaalde metingen uit, verwerp opwarmingen, vat de verdeling samen en pas vervolgens de t-toets van Welch toe tegen een vastgelegde baseline. Een regressie vereist statistische significantie EN een wezenlijke effectgrootte; buitensporige variantie wordt als onbetrouwbaar gerapporteerd in plaats van weggemiddeld tot een oordeel.

Drie eigenschappen houden dit eerlijk. Ten eerste vereist een regressie twee dingen tegelijk: statistische significantie (het is onwaarschijnlijk dat het verschil ruis is) en een effectgrootte boven een drempel (het verschil is groot genoeg om ertoe te doen). Een minuscule, echte vertraging veroorzaakt geen vals alarm. Een grote vertraging in ruisrijke gegevens wordt niet gemist. Ten tweede is instabiliteit een oordeel: wanneer de variatie tussen runs een grens overschrijdt, rapporteert de poort de omgeving als onbetrouwbaar. De poort middelt ruis niet weg tot een betekenisloos gemiddelde om het resultaat daarna geslaagd te noemen. Ten derde is er nog altijd een absoluut plafond — een harde bovengrens die de build laat mislukken, ongeacht de statistische uitkomst. Daardoor kan “geen significante regressie” nooit een resultaat goedpraten dat al te traag is.

Dit is de meetdiscipline die ISO/IEC 17025 voor elke geloofwaardige metriek beschrijft: resultaten verkregen onder vooraf bepaalde omstandigheden — herhaalbaarheid binnen één omgeving (ISO/IEC 17025, §3.7) en reproduceerbaarheid tussen omgevingen (ISO/IEC 17025, §3.5). Een prestatiegetal van NextPDF is alleen betekenisvol als “deze methode, deze baseline, deze run”. Precies daarom hoort het bij de build die het heeft voortgebracht, niet in een zin op deze pagina.

Evidence: Benchmark-backed De benchmarkpoort van de engine past herhaalde metingen toe, verwerpt opwarmruns, vat resultaten samen met gemiddelde / standaarddeviatie / variatiecoëfficiënt, en gebruikt een tweesteekproefs-t-toets van Welch voor toetsing tegen een vastgelegde baseline, met expliciete uitkomsten geslaagd / regressie / onstabiel / hard plafond. Prestatiebenchmarks bestaan ook als een specifieke, afzonderlijk uitvoerbare suite en een PHPBench-harnas. Prestaties worden bewust gemeten, niet geschat.

Evidence: Standard-backed “Onder gespecificeerde omstandigheden” is geen redactionele voorzichtigheid. Het is de definitie. Spec: ISO/IEC 25010, §3.10 koppelt prestatie-efficiëntie aan gespecificeerde omstandigheden voor tijd, doorvoer en resources. Een getal zonder bijbehorende omstandigheden is geen zwakkere meting. Het is geen meting.

Evidence: Standard-backed De beschrijving van herhaalbaarheid en reproduceerbaarheid volgt Spec: ISO/IEC 17025 : een resultaat is alleen geloofwaardig binnen vooraf bepaalde omstandigheden, waarbij onderscheid wordt gemaakt tussen herhaalbaarheid binnen dezelfde omgeving en reproduceerbaarheid over verschillende omgevingen heen. Een benchmark die zijn omstandigheden niet kan vermelden, kan op geen van beide aanspraak maken.

Zo ziet “eerlijk” er in de praktijk uit: een methodeverklaring, geen getal:

<?php
declare(strict_types=1);
// The gate is invoked with its conditions made explicit, e.g.:
//
// php ci/scripts/benchmark-gate.php \
// --runs=5 --warmup=1 --testsuite=Unit \
// --baseline=<committed-baseline>
//
// It then reports, for duration AND memory:
// - mean, standard deviation, coefficient of variation (the spread)
// - Welch's t-test p-value and effect size vs the baseline
// - a verdict: PASS | REGRESSION | UNSTABLE | hard-ceiling FAIL
//
// An honest performance statement is therefore shaped like:
// "<suite>, <runs> runs (<warmup> warmup), <hardware/runtime>,
// no statistically significant regression vs baseline <id>;
// coefficient of variation within bound."
//
// It is NEVER shaped like:
// "NextPDF is fast" — or a bare millisecond number with no method.

Wat een benchmark moet opleveren, is de reproduceerbare methode en het oordeel. De ruwe waarde in milliseconden hoort bij de build die deze heeft voortgebracht, waar die opnieuw af te leiden is — niet in documentatie waar dat niet kan.

Het eerste misverstand is dat een benchmark een getal is. Een benchmark is een procedure die een verdeling oplevert. Het getal is slechts één waarneming uit die verdeling. Het beste resultaat van meerdere runs rapporteren, of één opgewarmde run gebruiken, is niet optimistisch. Het is iets anders meten (piek onder ideale omstandigheden) en dat bestempelen als typische prestatie.

Het tweede is dat “geen statistisch significante regressie” “gegarandeerd net zo snel als voorheen” betekent. Het betekent dat de methode, gegeven dit aantal runs en deze variantie, het waargenomen verschil niet van ruis kan onderscheiden. Dat is een begrensde, voorwaardelijke uitspraak. Precies daarom houdt NextPDF het absolute plafond aan als een onafhankelijke waarborg en weigert het het resultaat samen te persen tot een ongekwalificeerde claim — voor zichzelf of tegenover wie dan ook.

Deze pagina beschrijft hoe NextPDF prestaties meet en rapporteert. Er wordt opzettelijk geen doorvoergetal, latentiegetal of geheugengetal vermeld. Dat zijn levende signalen die onder vermelde omstandigheden uit continuous-integration-artefacten worden gegenereerd; de actuele waarden worden met de build gepubliceerd. Een getal dat hier wordt herhaald, zou losstaan van zijn omstandigheden en verouderen — precies de fout waartegen deze pagina pleit. Er is geen stabiele prestatieconstante om te citeren, dus wordt die ook niet geciteerd. De discipline is het eigenlijke resultaat dat wordt opgeleverd.

Het aantal runs, het opwarmbeleid, de drempels en de baseline vallen onder de benchmarkconfiguratie van de engine en evolueren mee met de engine en de bijbehorende hardware. Als die configuratie ooit van deze uitleg afwijkt, is de configuratie gezaghebbend. NextPDF maakt geen prestatievergelijking met een andere bibliotheek — gunstig of ongunstig — omdat zo’n vergelijking zonder identieke, vermelde omstandigheden precies de ongekwalificeerde claim zou zijn die deze pagina juist afwijst.

  • Golden-file-testen — dezelfde reproduceerbaarheidsdiscipline toegepast op de juistheid van de uitvoer, inclusief de bitsgewijze / structurele / semantische profielen.
  • De testpiramide van NextPDF — waar de prestatielaag zich bevindt en waarom die opt-in is in plaats van bij elke wijziging.
  • Mutatietesten uitgelegd — nog een plaats waar NextPDF een gefilterd signaal rapporteert in plaats van een ijdelheidsgetal.
  • Benchmark — een gedefinieerde procedure die onder vermelde omstandigheden een verdeling van metingen oplevert, niet één enkel getal.
  • Opwarmrun — een eerste iteratie die wordt verworpen, zodat koudestarteffecten (JIT, caches, autoload) het gemeten resultaat niet vervuilen.
  • Variatiecoëfficiënt — de standaarddeviatie gedeeld door het gemiddelde; een eenheidsloze maat voor spreiding die wordt gebruikt om te beoordelen of een run stabiel genoeg is om erop te vertrouwen.
  • t-toets van Welch — een statistische tweesteekproefstoets voor ongelijke varianties, hier gebruikt om te bepalen of een resultaat meer van de baseline afwijkt dan door ruis verklaarbaar is.
  • Effectgrootte — hoe groot een verschil is, los van statistische significantie; NextPDF vereist beide voordat het een regressie vaststelt.
  • Herhaalbaarheid / reproduceerbaarheid — overeenstemming van resultaten onder vooraf bepaalde omstandigheden binnen één omgeving (herhaalbaarheid) of over verschillende omgevingen heen (reproduceerbaarheid), volgens ISO/IEC 17025.
  • Absoluut plafond — een harde bovengrens die de build laat mislukken, ongeacht de statistische vergelijking.