Bir p95 yirmi ölçüm ister: altı ölçümden çıkan sayı sadece en kötüsüdür
Altı ölçümden gelen bir `p95: 35s`, size yüzdelik dilimi değil, altı çağrının en yavaşını söylüyor — başka bir adla.
Altı ölçümden p95: 35s yazan bir gösterge size doksan beşinci yüzdelik dilimi anlatmıyor. Size altı çağrının en yavaşını, çok daha güçlü bir şey ima eden bir adla anlatıyor. Bu bir yuvarlama meselesi değil — yirmi örneğin altında ikisi yapısı gereği aynı sayıdır ve değişen tek şey etikettir.
Tam olarak bunu yayına aldık, 2026-08-31’de yakaladık ve düzeltme üç satır. Gerekçesi düzeltmeden daha değerli.
Aritmetik
nearest-rank yöntemi — hızlı uygulamaların çoğunda varsayılan olan ve elle yazılmış bir yüzdelik fonksiyonundan alacağınız yöntem — ölçümleri sıralar ve ceil(p × n) indeksindeki değeri seçer.
95. yüzdelik için o indeks ceil(0,95 × n). Adım adım:
| Örnek (n) | Seçilen indeks | Bu hangi eleman? |
|---|---|---|
| 6 | 6 | sonuncusu — maksimum |
| 10 | 10 | maksimum |
| 12 | 12 | maksimum |
| 15 | 15 | maksimum |
| 19 | 19 | maksimum |
| 20 | 19 | ikinci en yavaş — gerçek bir kuyruk |
| 40 | 38 | üçüncü en yavaş |
Eşik zevkten değil eşitsizlikten çıkıyor. ceil(0,95n) < n olması gerekir ve bu ancak n ≥ 20 olduğunda sağlanır. Altında hesapladığınız her “p95” maksimumdur — sütun başlığında ona ne derseniz deyin.
Medyan ucuz, kuyruk pahalı
Yararlı sonuç şu: bir gecikme sütunundaki iki rakamın maliyeti çok farklıdır ve onları tek eşikli tek bir çift gibi görmek soruna sebep olan şeydir.
| Rakam | Anlam kazanması için gereken örnek | Neden |
|---|---|---|
| Medyan (p50) | ~5 | Beş ölçümün gerçekten bir ortası vardır. Yenileri geldikçe yumuşak hareket eder. |
| p95 | en az 20, fazlası daha iyi | Nadir durum hakkında bir ifadedir ve nadir durumların görünmesi için yeterli çekiliş gerekir. |
Yani ikisini de aynı sayının arkasına koyan bir monitör, ya erken sahte bir kuyruk yayınlar ya da gayet iyi bir medyanı saatlerce saklar. Bizde ilki vardı, ki daha kötü olanı: hassas görünen ama olmayan bir sayı basıyordu.
Tabanları ayırmak iki ucu da düzeltti. Medyan, bir model ölçülmeye başladıktan dakikalar sonra beliriyor; kuyruk ise gerçekten kuyruk olana kadar bekliyor. Bu arada sütun yalnızca medyanı gösteriyor — bakılacak daha az şey ve daha doğru.
İnterpolasyon bunu düzeltmez, ipucunu gizler
İndeksi kendiniz yazmak yerine bir istatistik kütüphanesine uzanırsanız, genellikle nearest-rank yerine doğrusal interpolasyon alırsınız. NumPy ve pandas ikisi de bunu varsayar. İndeks (n − 1) × p olur ve iki ölçümün arasına düştüğünde sonuç aralarında interpole edilir.
Altı örnek için bu 5 × 0,95 = 4,75 — beşinci ölçümden altıncıya doğru yolun dörtte üçü. Yani cevap artık tam olarak maksimum değil ve bu bir iyileşme gibi geliyor.
Değil. Biri 30 saniyede, beşi iki saniye civarında olan ölçümlerle interpole edilmiş p95 yaklaşık 23 çıkar — hâlâ ezici biçimde tek bir en kötü çağrı tarafından belirlenmiş, ama artık ona eşit değil. Sorun aynı, belirti kayboldu. nearest-rank en azından kendini ele verir: en yavaş çağrınıza tam olarak eşit bir p95, herkesin fark edebileceği bir ipucudur. Arada duran interpole edilmiş bir sayı ise gerçek bir tahmin gibi görünür.
Hiçbir yöntem, örnek sayısının içermediği bilgiyi yaratmaz. Yüzdelik dilim, bir şeyin ne sıklıkta olduğuna dair bir iddiadır ve hiçbir aritmetik, altı çekilişten yirmide bir iddiası çıkarmaz.
Beklerken ne göstermeli
Bir rakamı saklamak boşluk bırakır ve tirelerle dolu bir sütun beklemede değil bozuk görünür. Üç seçenek, önerme sırasına göre:
- Yalnızca medyanı gösterin. Neredeyse anında hazır olur ve zaten okuyucuların çoğunun istediği rakamdır. Bizim yaptığımız bu.
- Sütunu elinizdekinin adıyla adlandırın. “12 ölçümün en yavaşı” dürüst, bilgilendirici ve kimse onu dağılım sanmaz.
- Tabanı düşürmek yerine pencereyi genişletin. Düşük trafikli bir uçta yedi günlük bir p95 yirmi örneği geçebilirken beş dakikalık pencere hiç geçemez — değişime yavaş tepki verme pahasına.
Yapmayacağımız şey, etiketi koruyup eşiği düşürmek. Sütun başlığı sayının ne anlama geldiğine dair bir iddiadır ve bir göstergenin okuyucuların tamamen güvene aldığı tek parçasıdır.
Bu neden gözden kaçtı
Bu hatayı ilginç kılan aritmetik değil — yanlış sayının neden ayakta kaldığı.
İlk düzeltmemiz tabanı on ikiye koydu ve yanına on ikinin “nearest-rank indeksinin son elemana düşmeyi bıraktığı nokta” olduğunu açıklayan bir yorum yazdı. Gerekçe doğruydu, sayı yanlıştı: on ikide ceil(11,4) 12’dir, yani hâlâ son eleman. Kendinden emin bir yorum, yanlış bir sabiti düşünülmüş gösterdi.
Testi de vardı. Test, birbirinin aynı ölçümlerden bir fixture kurup p95’in o değere eşit çıktığını doğruluyordu — ki bu her tabanda geçer, çünkü her ölçüm 2000ms olduğunda maksimum da medyan da p95 de aynıdır. Yayılımı olmayan bir fixture, maksimuma çökmüş bir istatistiği tespit edemez.
Yakalayan test, bir değeri değil bir özelliği doğrular: belirgin tek bir aykırı değer içeren ölçümler verildiğinde, yayınlanan p95 o aykırı değere eşit olmamalıdır.
// Yirmi ölçüm içinde bir yavaş çağrı. Onu döndüren bir p95,
// sütun başlığı ne derse desin maksimuma çökmüştür.
const spiky = [30000, ...Array(19).fill(2000)];
assert.notEqual(p95(spiky), 30000); // 20'nin altındaki her tabanda kalır
assert.equal(p95(spiky), 2000);
// Ve bir eksikte nearest-rank gerçekten maksimuma düşer --
// yani asla yayınlanmaması gereken rakama.
assert.equal(p95(spiky.slice(0, 19)), 30000);Kendi göstergelerinizde neye bakmalı
- Her yüzdelik diliminin arkasındaki örnek sayısını bulun. Düşük trafikli bir uçta beş dakikalık pencerede hesaplanan bir p95 için bunun gerçekte kaç istek olduğunu sayın. Yirminin altındaysa o bir maksimumdur.
- Hiç hareket etmeyen yüzdelikleri arayın. Şüpheli biçimde yuvarlak bir en kötü değere sabitlenmiş, saatlerdir değişmeyen bir p95 genelde kılık değiştirmiş bir maksimumdur.
- Test fixture’larınızın yayılımı olsun. Aynı değerler üzerine kurulmuş bir yüzdelik testi, yüzdelikler hakkında hiçbir şey doğrulamaz.
- Medyanı ve kuyruğu ayrı eşikleyin. Farklı miktarda kanıt isterler ve tek eşik ikisine birden hizmet edemez.
- Tahmin etmektense saklayın. Bir tire, dört veri noktasından türetilmiş kendinden emin bir sayıdan daha küçük bir yalandır.
Aynı disiplin bir izleme sayfasının bastığı her oran için geçerli. Üç kontrolden çıkan bir erişilebilirlik yüzdesi, iki hatadan çıkan bir hata oranı, bir avuç değerlendirilmiş yanıttan çıkan bir model ikame oranı — hepsi ölçüm gibi görünür ve ekrandaki ondalıkları destekleyecek kadar çekiliş birikene dek hepsi anekdottur.
Devamı
- Sondanız arızanın kendisi olduğunda — bir monitörün kendi davranışını başkasının arızası olarak raporlamasının üç yolu.
- İstemciniz yeniden denerken erişilebilirlik ne demek — bir durum sayfasındaki, karşılaştırılabilmesi için önce tanımının söylenmesi gereken diğer rakam.
- AI API relay’leri, açıklandı — ölçülen şey ne ve relay gecikmesinin neden raporlanmaya değer bir kuyruğu var.
Bizim gecikme sütunumuz artık beş zamanlanmış yanıttan medyan gösteriyor ve kuyruğu yirmiye kadar tutuyor; durum sayfasında yeni ölçülen modellerde o ikinci konumda tire görmenizin sebebi bu. Tire, dürüst cevap.
Bu rehberdeki rakamlar yanlarında yazan tarihlerde okundu. Fiyatlar değişir; bir iddia sağlayıcının yayınlanmış fiyatına dayanıyorsa bağlantı o sağlayıcının kendi sayfasına gider, böylece bizimkine güvenmek yerine kontrol edebilirsiniz. Bu rehber 2026-11-30 tarihine kadar gözden geçirilecek.
Sayıları kendiniz kontrol edin
Bu istasyondaki her model, token başına fiyatı ve sağlayıcının yayınlanmış liste fiyatı, okumak için hesap gerekmeden fiyat sayfasında duruyor.