Sayaç 200 diyor, oyun 90 gibi hissettiriyor. Hiçbir şey bozuk değil, hiçbir şey tam bir saniye donmuyor, ama bir çatışma hiçbir zaman sayının vaat ettiği gibi hissettirmiyor. Bu deneyimin bir adı ve bir ölçüsü var, ve onu okuyabildiğin an yanlış sayının peşinden koşmayı bırakıyorsun.
Önce dürüst cümle. Bu sayfa bir düzeltmeyi değil, bir ölçümü anlatıyor. w0a hiçbir yerde "kazanılan FPS" diye bir sayı basmıyor; bir değişikliğin işe yarayıp yaramadığını kendi önce-sonra kayıtlarından, kendi koşudan koşuya gürültüne karşı okursun — ve aşağıdaki her sayı Benchmark sayfasının kaydettiği dosyadan yeniden hesaplanabilir.
Üç sayı aslında ne
Bir koşudaki her kareyi en yavaştan en hızlıya sırala.
- Ortalama FPS hepsinin aritmetik ortalamasıdır. Sayfadaki en işe yaramaz rakam.
- %1 low o karelerin en kötü yüzde biridir. Genellikle bir FPS değeri olarak yazılıyor, yani "70'lik bir %1 low", en kötü karelerinin her birinin 70 FPS'lik bir oyundaki bir kare kadar sürdüğü anlamına geliyor.
- %0,1 low ise bindeki en kötü olandır — nadir, derin olaylar.
Kare süresi aynı verinin milisaniye hâli, ve aritmetiğini ezberlemeye değer çünkü bu sayfanın geri kalanını somutlaştırıyor: 16,7 ms 60 FPS, 6,9 ms 144, 4,2 ms 240.
Yani 200 ortalamalı ve 70'lik %1 low'lu bir koşu, tipik karenin yaklaşık 5 ms, en kötü yüzde birlik dilimin ise yaklaşık 14 ms sürdüğü bir koşudur — neredeyse üç katı. Ve 200 FPS'te karelerinin yüzde biri saniyede iki kare demek. Saniyede iki kez, görüntü üç kare süresi kadar yerinde duruyor. Hissettiğin şey bu, ve hiçbir ortalama sana bunu söylemiyor.
Sayıyı değil, aradaki farkı oku
70'lik bir %1 low, 90 FPS'lik bir koşuda mükemmel, 200 FPS'lik bir koşuda endişe verici. İşe yarayan okuma aradaki ilişki:
| Gördüğün | Genellikle ne anlama geliyor |
|---|---|
| Ortalama ile %1 low birbirine yakın | Tutarlı teslimat. Mütevazı bir kare hızında bile "akıcı" dediğin şey bu. |
| %1 low ortalamanın çok altında | Başka türlü sağlıklı bir koşuyu bir şey kesiyor — bir olay, bir iş yükü değil. |
| %0,1 low, %1 low'un çok altında | Nadir, derin olaylar: bir sürücü sıfırlaması, bir sayfalama fırtınası, uzun bir disk okuması. |
| Hepsi birlikte düşük | Donanımın verdiğinden fazlasını istiyorsun. Bir ayarı düşür. |
Üçüncü satırı yanlış okumak kolay. %1 low'un iyiyse ve %0,1 low'un berbatsa bir tempo sorunun yok — elinde bir avuç belirli olay var, ve olaylar bulunabilir.
Kötü bir kuyruk neden düşük bir ortalamadan farklı bir sorun
Düşük bir ortalama bir iş yükü sorusudur: makine yapabileceğinin en fazlasını yapıyor ve bu yetmiyor. Cevabı bir ayar, bir çözünürlük ya da başka bir donanım.
Kötü bir kuyruk ise bir olay sorusudur: makine çoğunlukla yetişiyor ve bir şey onu belli aralıklarla durduruyor. Cevap, o şeyi bulmak. Liste kısa ve her maddesi iz bırakıyor — bir işlemci çekirdeğini tutan bir sürücü, diskten geri gelen sayfalar, bir varlık okuması, bir arka plan işi, derlenen bir shader, bir sürücü sıfırlaması. Windows 11'de oyunlar neden takılıyor o listeyi sebep sebep geziyor; takılma taraması neye bakıyor ise otomatik hâli — hak etmediği bir güven puanı vermek yerine her bulguyu kanıtlanmış, olası, aday ya da bakılmadı diye etiketliyor.
Bir de ara durum var: ortalamada GPU sınırlı olmayan ama en yoğun anlarda bir sınıra çarpan bir makine. Geride kalan kareler tam olarak en çok şeyin olduğu kareler — yani çatışma. Low'lar kötüyken GPU'n tam doluluğun epey altında duruyorsa, bunun teşhis sayfası GPU %100'de değil.
Bütün bunları yapmaya değer kılan ölçüm disiplini
Yüzdelikler ortalamalardan daha gürültülüdür, çünkü daha az kareden hesaplanıyorlar. Değiştirilmemiş aynı yapılandırmanın iki koşusu aynı %1 low'u vermiyor, ve aradaki fark senin genel olarak tespit edebildiğin en küçük değişiklik.
Bir ölçüm koşusunun ancak kendi gürültüsünün yanında işe yaramasının sebebi bu. Benchmark sayfası her koşunun kendi dakikadan dakikaya yayılımından bir ölçüm gürültüsü hesaplıyor ve bunu ortalama, %1 low ve %0,1 low için ayrı ayrı yazıyor — ve o gürültünün içine düşen bir farkı iddia etmiyor. Disiplinin tamamı tek bir davranışta: kendi koşudan koşuya oynamandan küçük bir sonuç, sonuç değildir.
Pratik hâli:
- Aynı oyun, aynı harita ya da tekrar kaydı, aynı uzunluk, aynı oyun içi ayarlar.
- Aynı şekilde oyna. Duvara bakarak geçen bir koşu ile çatışmada geçen bir koşu karşılaştırılamaz.
- Hiçbir şeyi değiştirmeden önce değiştirilmemiş yapılandırmayı en az üç kez koştur, böylece kendi gürültünün neye benzediğini bilirsin.
- Tek bir şeyi değiştir. Beş değişiklik ve tek ölçüm, hangisinin fark ettiği hakkında sana hiçbir şey söylemiyor — ve ayrı ayrı ölçülmüş beş kazancı toplamak aritmetiktir, ölçüm değil.
- Low'ları karşılaştır. Sayfadaki her sayının ne işe yaradığını benchmark'ı okumak anlatıyor.
Aritmetiğin tam hâli, sayı sayı
Benchmark sayfasının bir kayıtla yaptığı şey bu, yaptığı sırayla.
| Adım | Kural | Neden orada |
|---|---|---|
| Hangi kareler sayılır | Yalnızca oyun öndeki pencereyken çizilen kareler. Oyun öne geri geldikten sonraki ilk saniye dışarıda bırakılıyor; algılanan bir odak kaybından önceki son 0,2 saniye de dışarıda bırakılıyor. Dışarıda bırakılan süre koşuyla birlikte raporlanıyor. | Bir kayıt w0a'nın kendi penceresinden başlıyor ve duruyor, yani kenarları arka plandaki oyun. Kaydedilmiş bir koşuda %1 low'un arkasındaki 185 karenin 94'ü bu kenarlardı. Bir saniyelik değer seçilmiş bir değer, ölçülmüş değil. |
| Duraklamalar | 200 ms'den uzun bir kare aralığı ortalamanın ve her yüzdeliğin dışında tutuluyor, ve ayrıca sayılıyor. | 200 ms'nin üstünde bu bir yükleme ekranı, bir alt-tab ya da bir sürücü duraklaması; render değil. Ortalamaya katılsaydı gerçek her kareyi gömerdi. |
| Ortalama FPS | Sayılan karelerin, sürdükleri zamana bölümü: kare × 1000 ÷ toplam milisaniye. | |
| %1 low | Sayılan kare sürelerini sırala. En yavaş %1'ini al — yukarı yuvarlanmış ve asla bir kareden az değil —, o kare sürelerinin ortalamasını al ve sonucu FPS'e çevir: 1000 ÷ o ortalama. | Öteki yaygın tanım, yani 99. yüzdelik kare süresindeki kare hızı, bilerek reddedildi: karelerin tam %1'i takıldığında sınırın üstüne düşüyor ve neredeyse ortalamayla aynı sayıyı raporluyor. |
| %0,1 low | Aynısı, en yavaş %0,1 ile. | |
| 99. ve 99,9. yüzdelik kare süresi | Ayrıca, milisaniye olarak raporlanıyor. | Yüzdelik tanımını kullanan okurlar ve araçlar için. |
| Okunamayacak kadar kısa | 900 karenin altında, yüzdeliğin bir anlam taşıması için yeterli kare yok. | |
| Takılma sayısı | Bir saniyeye kadar uzunluktaki bir kare, hem çevresindeki üç saniyenin medyanının iki katından hem de o medyan artı 8 ms'den uzunsa takılmadır. | Sabit bir kare sayısı yerine üç saniye, böylece kural 60 FPS'te de 300'de de aynı anlama geliyor. 8 ms'lik terim, yüksek kare hızlarındaki sıradan titremenin takılma sayılmasını engelliyor. 200 ms ile bir saniye arasındaki kareler yüzdeliklerin dışında ama burada dahil: 250 ms'lik bir shader derleme aksaması tam da bu sayının yakalamak için var olduğu şey. |
| Gürültü tabanı | Kayıt 60 saniyelik bloklara bölünüyor. Bir karşılaştırmanın her iki tarafı da en az iki tam blok istiyor; yoksa sayfa bir sayıyı renklendirmek yerine "karşılaştırılamaz" diyor. Taban, iki tarafın bloktan bloğa yayılımından (Welch yöntemi) çıkan %95'lik bir aralık, "önce" değerinin yüzdesi olarak. Yalnızca hiç olay kaybetmemiş tam bloklar sayılıyor, ve sıfır bir taban asla üretilmiyor. | Kendi bloktan bloğa oynamanın içindeki bir fark sonuç değildir. |
| Eşli seri | Bir A/B serisi koşturduğunda bir değişiklik yalnızca şu durumda raporlanıyor: kesin bir işaretli sıra testi ve medyan farkın %95'lik bootstrap aralığı (10.000 yeniden örnekleme) ikisi de sıfırı dışarıda bırakıyor, ve medyan en az, 10 koşuluk bir pilotun bu düzenin tespit edebildiğini gösterdiği en küçük etki kadar. Seri en az 6 çift istiyor — 5 ile mümkün olan en küçük p değeri 0,0625 — ve ABBA sırasıyla koşturulan 8 çift öneriyor. | Tek bir önce-sonra çifti, bir değişikliği ısınmış bir GPU'dan ya da farklı bir doğma noktasından ayıramaz. |
Kendin kontrol et: CSV'den yeniden hesapla
Benchmark sayfasındaki CSV kaydet, side,kind,name,value sütunlarından oluşan tek bir tablo yazıyor. kind = metric olan satırlar özet rakamlar; kind = frame olan satırlar ise kare aralıkları, her satırda bir tane, kare süresi milisaniye olarak value içinde. Kare satırları duraklamalar dahil bütün seriyi tutuyor; tam da 200 ms kuralını kendin uygulayıp aynı sayılara varabilesin diye.
Başlamadan önce iki şey:
- Dosyadaki sayılar, Windows bölge ayarın ne derse desin, ondalık ayırıcı olarak her zaman nokta kullanıyor. Türkçe bölge ayarında ondalık ayırıcı virgül olduğu için içe aktarırken bunu elektronik tablona söyle; yoksa
6.94sayı yerine metin olarak gelir. - Sütun adları sabit İngilizce tanımlayıcılar. Betikler için düşünüldüler ve her dilde aynılar.
Elektronik tabloda: tek bir side ve kind = frame için filtrele, 200'ün üstündeki satırları çıkar, value'yu büyükten küçüğe sırala, ilk N satırın ortalamasını al — N, satır sayısının 100'e bölünüp yukarı yuvarlanmışı — ve 1000'i o ortalamaya böl. Sonuç o tarafın low_1pct_fps değerine eşit olmalı.
PowerShell'de (öteki taraf için before yerine after yaz):
$ms = Import-Csv .\capture.csv |
Where-Object { $_.kind -eq 'frame' -and $_.side -eq 'before' } |
ForEach-Object { [double]::Parse($_.value, [Globalization.CultureInfo]::InvariantCulture) } |
Where-Object { $_ -le 200 } |
Sort-Object
$take = [Math]::Max(1, [Math]::Ceiling($ms.Count * 0.01))
1000 / ($ms | Select-Object -Last $take | Measure-Object -Average).Average
%0,1 low için 0.01 yerine 0.001 kullan. Aynı dosyadan iki hızlı tutarlılık kontrolü: 200 ve altındaki kare satırlarının sayısı frames metriğine, 200'ün üstündekilerin sayısı da excluded_over_stall_ms'e eşit.
Bir yüzdeliği sessizce mahveden iki şey
Kare üretimi. Araya eklenen kareler yeni bir oyun durumu taşımıyor. Kare sayarak elde edilen bir %1 low yine de bir sayı üretiyor, ama artık tepkiselliği anlatmıyor — ki ona bakmanın tek sebebi buydu. Ölçerken kare üretimini kapat. Bu, tanım gereği böyle; kare üretiminin takılma yaptığı iddiası değil.
Yükleme ekranları ve duraklamalar. Üç saniyelik bir yükleme duraklaması, üç bin milisaniyelik tek bir "kare aralığı" demek, ve veride bırakılırsa senin %0,1 low'un olup gerçek olan her şeyi gömüyor. Bu uzunluktaki aralıklar tam da bu yüzden yüzdeliklerin dışında tutuluyor ve ayrıca raporlanıyor; böylece hiçbir sayı sessizce onun üstüne kurulmuyor.
%1 low'u kıpırdatmayanlar
Bunu açıkça söylemeye değer, çünkü ikisini karıştırmak kolay: gecikme özellikleri ile yüzdelik kararlılığı farklı iddialardır. Üreticilerin düşük gecikme modları render kuyruğunun derinliğini azaltıyor, ve o azalma ölçüldü. Kare süresi yüzdeliklerini iyileştirdiklerini gösteren yayımlanmış bir ölçüm yok. İkisi de sahip olmaya değer olabilir; aynı şey değiller, ve birini öteki diye sunan bir sayfa sana bir şey satıyor. En stabil %1 low için sıfırdan kurulum yayımlanmış kanıtı kaynaklarıyla işliyor, hiçbir yazılımın düzeltemediği girdi gecikmesi ise gecikme çalışmasının nereye ulaşıp nereye ulaşamadığının dürüst muhasebesi.
Aynı uyarı, daha iyi low'lar vaat eden kayıt defteri listeleri için de geçerli. Çekirdek bellek yönetimi değerleri ve zamanlayıcı çözünürlüğü zorlamaları burada doğrudan reddediliyor; egzotik oldukları için değil, hiç kimse onlar hakkında bir yöntemle temas ettiğinde ayakta kalan bir ölçüm yayımlamadığı için.
Benchmark sayfasının basmadıkları
- "Kazanılan FPS" rakamı yok; hiçbir ayar için, w0a'nın hiçbir yerinde. Kazanç, kendi iki kaydının gösterdiği şeydir; ya da hiçbir şey.
- Sebep yok, yalnızca zamanlama. Bir takılma başka bir olayla denk geldiğinde kart, ikisinin aynı pencereye düştüğünü söylüyor. Birinin ötekine sebep olduğunu söylemiyor.
- Gürültü tabanının içindeki hiçbir fark, hangi yönde olursa olsun, değişiklik olarak gösterilmiyor.
Low'ların kötüyse ve sayılardan çok sebepleri istiyorsan, liste Windows 11'de oyunlar neden takılıyor sayfasında; w0a'nın otomatik olarak neyi kontrol ettiği ise takılma taraması neye bakıyor sayfasında. Özellikle CS2 için CS2'de düşük FPS ve takılma bütün bunları tek bir oyuna uyguluyor.
İlgili
- Windows 11'de oyunlar neden takılıyor
- GPU %100'de değil
- Benchmark'ı okumak
- Input lag nasıl azaltılır: yazılım neyi kısaltabilir, neyi kısaltamaz
- Shader derleme takılması
- CS2'de düşük FPS ve takılma
CS2 mi oynuyorsun? Hangi başlatma seçeneğinin hâlâ bir şey yaptığı ve görüntü menüsünde karelerin asıl nerede olduğu: CS2'de FPS nasıl artırılır, kasma neden olur? Ölçüme dayalı kontrol listesi
Bu sayfa yardımcı oldu mu?
Eksik olan neydi, ya da ne işe yaramadı? Bunların hepsini okuyoruz.
Bu sayfa sorununu çözmediyse bize yaz — hangi makaleyi okuduğunu da ekle, o makaleyi düzeltelim.