Lewati ke konten

Tolok ukur yang jujur

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

Angka tolok ukur tanpa metode hampir tidak berarti apa-apa. “NextPDF merender sebuah dokumen dalam N milidetik” tidak banyak memberi tahu Anda kecuali Anda mengetahui dokumennya, perangkat kerasnya, jumlah eksekusinya, dan variansinya. Halaman ini menjelaskan bagaimana NextPDF mengukur performa, mengapa NextPDF melaporkan sinyal yang dinilai oleh gerbang alih-alih angka utama, dan mengapa NextPDF tidak menampilkan angka kecepatan apa pun.

Klaim performa mudah dipublikasikan dan mudah menjadi keliru, biasanya tanpa sengaja. Satu eksekusi panas pada laptop yang menganggur, hasil tercepat dari sepuluh percobaan, atau mikrobenchmark atas sebuah fungsi yang tidak dipanggil siapa pun pada jalur panas semuanya dapat menghasilkan angka yang tampak nyata tetapi tidak memprediksi apa pun tentang beban kerja Anda. Spec: ISO/IEC 25010 mendefinisikan efisiensi performa sebagai menjalankan fungsi dalam parameter waktu dan throughput di bawah kondisi yang ditentukan (ISO/IEC 25010, §3.10). Jika “di bawah kondisi yang ditentukan” dihilangkan, angka itu berhenti menjadi pengukuran. Yang tersisa hanyalah angka tanpa makna.

Ada pula kegagalan yang lebih tersembunyi: angka yang dulu pernah benar. Begitu hasil tolok ukur ditempelkan ke dalam prosa, angka itu membeku. Sementara itu, kode, runtime, dan perangkat keras terus berubah. Klaim “cepat” yang usang bukan sekadar tidak membantu; klaim itu salah, dan salahnya diam-diam.

  • Sebuah angka performa tidak bermakna tanpa metodenya: masukan, lingkungan, jumlah eksekusi, kebijakan pemanasan, dan sebarannya.
  • NextPDF mengukur dengan eksekusi berulang, membuang iterasi pemanasan, dan melaporkan sebuah distribusi, bukan satu angka kasus terbaik.
  • Deteksi regresi bersifat statistik: sebuah hasil dinilai terhadap garis dasar dengan uji-t Welch, sehingga sebuah perubahan harus signifikan secara statistik sekaligus cukup besar untuk diperhatikan sebelum dihitung sebagai regresi.
  • Lingkungan yang tidak stabil dideteksi dan dilaporkan, bukan diam-diam dirata-ratakan — varians antar-eksekusi yang tinggi membatalkan hasil, bukan bersembunyi di dalam rata-rata.
  • Performa dipublikasikan sebagai sinyal hidup yang dihasilkan bersama build, tidak pernah sebagai angka utama yang membeku — itulah sebabnya tidak ada angka milidetik yang muncul di halaman ini.

Gerbang performa otomatis ini bertumpu pada uji statistik, bukan pada satu eksekusi tunggal yang diukur waktunya. Metodologi yang terdokumentasi menjalankan suite yang diukur berkali-kali, membuang jumlah eksekusi pemanasan yang telah dikonfigurasi, dan menghitung rata-rata, deviasi standar, serta koefisien variasi untuk durasi maupun memori. Kemudian gerbang membandingkan hasil saat ini terhadap garis dasar yang telah di-commit:

  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.
Bagaimana gerbang tolok ukur NextPDF memutuskan lulus, gagal, atau tidak dapat diandalkan: lakukan pengukuran berulang, buang pemanasan, ringkas distribusinya, lalu terapkan uji-t Welch terhadap garis dasar yang telah di-commit. Sebuah regresi memerlukan signifikansi statistik DAN ukuran efek yang material; varians yang berlebihan dilaporkan sebagai tidak dapat diandalkan alih-alih dirata-ratakan menjadi sebuah putusan.

Tiga sifat membuat mekanisme ini tetap jujur. Pertama, sebuah regresi memerlukan dua hal sekaligus: signifikansi statistik (selisihnya kecil kemungkinannya berupa derau) dan ukuran efek yang melampaui ambang batas (selisihnya cukup besar untuk diperhatikan). Perlambatan kecil yang nyata tidak memicu alarm palsu. Perlambatan besar dalam data yang berderau tidak lolos begitu saja. Kedua, ketidakstabilan adalah sebuah putusan: ketika variasi antar-eksekusi melampaui batas, gerbang melaporkan lingkungan sebagai tidak dapat diandalkan. Gerbang tidak merata-ratakan derau menjadi rata-rata yang tidak bermakna lalu menyebutnya lulus. Ketiga, masih ada plafon mutlak — batas atas tegas yang menggagalkan build terlepas dari statistiknya. Karena itu, “tidak ada regresi signifikan” tidak pernah dapat membenarkan hasil yang memang sudah terlalu lambat.

Ini adalah disiplin pengukuran yang dijelaskan ISO/IEC 17025 untuk setiap metrik yang kredibel: hasil yang diperoleh di bawah kondisi yang telah ditentukan sebelumnya — keterulangan dalam satu lingkungan (ISO/IEC 17025, §3.7) dan keterproduksian ulang lintas lingkungan (ISO/IEC 17025, §3.5). Sebuah angka performa NextPDF hanya bermakna sebagai “metode ini, garis dasar ini, eksekusi ini”. Itulah sebabnya angka tersebut disimpan bersama build yang menghasilkannya, bukan dalam sebuah kalimat di sini.

Evidence: Benchmark-backed Gerbang tolok ukur otomatis mengimplementasikan pengukuran berulang dengan membuang eksekusi pemanasan, ringkasan rata-rata / deviasi standar / koefisien variasi, serta uji-t Welch dua sampel, terhadap garis dasar yang telah di-commit, dengan hasil eksplisit lulus / regresi / tidak stabil / pelanggaran plafon mutlak. Tolok ukur performa juga hadir sebagai suite khusus yang dapat dijalankan secara terpisah dan harness PHPBench. Performa diukur secara sengaja, bukan diperkirakan.

Evidence: Standard-backed “Di bawah kondisi yang ditentukan” bukanlah sekadar kehati-hatian editorial. Itulah definisinya. Spec: ISO/IEC 25010, §3.10 menautkan efisiensi performa ke kondisi waktu, throughput, dan sumber daya yang ditentukan. Sebuah angka tanpa kondisinya bukanlah pengukuran yang lebih lemah. Itu bukan sebuah pengukuran.

Evidence: Standard-backed Kerangka keterulangan dan keterproduksian ulang mengikuti Spec: ISO/IEC 17025 : sebuah hasil hanya kredibel relatif terhadap kondisi yang telah ditentukan sebelumnya, dengan membedakan keterulangan dalam lingkungan yang sama dari keterproduksian ulang lintas lingkungan. Sebuah tolok ukur yang tidak dapat menyatakan kondisinya tidak dapat mengklaim keduanya.

Bentuk “jujur” dalam praktik adalah pernyataan metode, bukan angka:

<?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.

Keluaran sebuah tolok ukur adalah metode yang dapat diproduksi ulang dan putusannya. Nilai milidetik mentah itu menjadi milik build yang menghasilkannya, tempat Anda dapat menelusurinya kembali — bukan disalin ke dalam dokumentasi yang tidak memungkinkan hal itu.

Kesalahpahaman pertama adalah bahwa tolok ukur adalah angka. Tolok ukur adalah sebuah prosedur yang menghasilkan distribusi. Angka itu hanyalah satu sampel darinya. Melaporkan hasil terbaik dari beberapa eksekusi, atau satu eksekusi panas, bukanlah optimisme. Itu mengukur sesuatu yang berbeda (puncak di bawah kondisi ideal) dan melabelinya sebagai performa tipikal.

Yang kedua adalah bahwa “tidak ada regresi yang signifikan secara statistik” berarti “secepat sebelumnya, dijamin”. Artinya, dengan jumlah eksekusi dan varians ini, metode ini belum dapat membedakan selisih yang teramati dari derau. Itu adalah pernyataan yang terbatas dan bersyarat. Itulah persisnya mengapa NextPDF mempertahankan plafon mutlak sebagai pengaman independen dan menolak memadatkan hasilnya menjadi klaim tanpa syarat — baik tentang dirinya sendiri maupun pihak lain mana pun.

Halaman ini menjelaskan bagaimana NextPDF mengukur dan melaporkan performa. Halaman ini sengaja tidak menyebutkan angka throughput, latensi, atau memori apa pun. Itu adalah sinyal hidup yang dihasilkan dari artefak integrasi berkelanjutan di bawah kondisi yang dinyatakan, dan nilai terkini dipublikasikan bersama build. Angka yang diulang di sini akan kehilangan kondisi dan menjadi usang — kegagalan persis yang ditentang halaman ini. Tidak ada konstanta performa stabil untuk dikutip, jadi tidak ada yang dikutip. Disiplin itulah hasil yang diserahkan.

Jumlah eksekusi, kebijakan pemanasan, ambang batas, dan garis dasar dimiliki oleh konfigurasi tolok ukur mesin dan berkembang seiring mesin serta perangkat kerasnya. Konfigurasi itulah otoritasnya jika suatu saat bertentangan dengan penjelasan ini. NextPDF tidak membuat perbandingan performa apa pun terhadap pustaka lain mana pun — menguntungkan maupun merugikan — karena perbandingan semacam itu tanpa kondisi yang identik dan dinyatakan justru merupakan klaim tanpa syarat yang ditolak oleh halaman ini.

  • Pengujian golden-file — disiplin keterproduksian ulang yang sama diterapkan pada kebenaran keluaran, termasuk profil bitwise / struktural / semantik.
  • Piramida pengujian NextPDF — tempat tingkat performa berada dan mengapa ia bersifat opt-in, bukan berjalan pada setiap perubahan.
  • Pengujian mutasi, dijelaskan — tempat lain saat NextPDF melaporkan sinyal yang diberi gerbang alih-alih angka pamer.
  • Tolok ukur (benchmark) — prosedur yang terdefinisi dengan jelas yang menghasilkan distribusi pengukuran di bawah kondisi yang dinyatakan, bukan satu angka tunggal.
  • Eksekusi pemanasan (warmup run) — iterasi awal yang dibuang agar efek cold-start (JIT, cache, autoload) tidak mengontaminasi hasil yang diukur.
  • Koefisien variasi — deviasi standar dibagi rata-rata; ukuran sebaran tanpa satuan yang digunakan untuk menilai apakah sebuah eksekusi cukup stabil untuk dipercaya.
  • Uji-t Welch — uji statistik dua sampel untuk varians yang tidak sama, digunakan di sini untuk memutuskan apakah sebuah hasil berbeda dari garis dasar melampaui derau.
  • Ukuran efek (effect size) — seberapa besar sebuah selisih, terlepas dari signifikansi statistik; NextPDF memerlukan keduanya sebelum menyatakan sebuah regresi.
  • Keterulangan / keterproduksian ulang — kesesuaian hasil di bawah kondisi yang telah ditentukan sebelumnya dalam satu lingkungan (keterulangan) maupun lintas lingkungan (keterproduksian ulang), sesuai ISO/IEC 17025.
  • Plafon mutlak — batas atas tegas yang menggagalkan build terlepas dari perbandingan statistiknya.