Sayacın 160 diyor. Oyun yine de sarsılıyor — saniyenin bir kesirinde görüntü duruyor, nişanın koymadığın bir yere iniyor, sonra her şey yeniden yolunda. Sayaç hiç kıpırdamadı; onu yükseltmek için yaptığın hiçbir şeyin işe yaramamasının sebebi de bu.
Bu sayfanın konusu tam olarak o aralık. Takılma, geç gelmiş bir karedir; düşük bir kare hızı değil. Bir kare sayacı bir saniye boyunca ortalama alıyor, yani 90 ms süren tek bir kare, yanındaki 159 kısa karenin içinde kayboluyor. Hissettiğini anlatan sayı kare süresi, ve bir takılma, komşularından çok daha yavaş bir kare.
Önce dürüst cümle. Aşağıdaki on sebepten ikisi w0a'da tek bir kutuya karşılık geliyor: 8. sebepteki zamanlayıcı değeri ve 9. sebepteki arka plan oyun kaydedicisi. İki kutu da yalnızca bir ayarı olması gereken yere koyuyor, ve kimsenin ayarlamadığı bir makinede ilki değiştirecek hiçbir şey bulmuyor. Hissettiğin takılmanın bunlardan biri olup olmadığını sana yalnızca önce ve sonra alınmış bir kayıt söyleyebilir.
Önce, üç sorundan hangisinin sende olduğunu belirle
Aynı sözcükle anılıyorlar ve neredeyse hiçbir ortak yanları yok.
- Ani takılma. Taban iyi ve arada bir uzun bir şey oluyor. Bu sayfa onu anlatıyor.
- Pürüzlü bir taban. Dramatik hiçbir şey yok ama oyun hiçbir zaman akıcı hissettirmiyor. Bu bir yüzdelik sorunu: ortalama FPS yüksek ama %1 low kötü.
- Bir düşme. Kare hızı düşüyor ve saniyelerce ya da dakikalarca aşağıda kalıyor. Tamamen farklı sebepler: oyunlarda ani FPS düşmeleri.
Bir şey değiştirmeden önce kayıt al
Bunu haftalara yayan şey tahmin etmek. Gerçekten oynadığın oyunun, gerçekten takıldığı yerde alınmış bir ölçüm koşusu, "ne olabilir" sorusunu "o sıçramada ne oldu" sorusuna çeviriyor — üstelik sonraki her değişikliğin karşısına konacak "önce" o. Nasıl olduğunu benchmark'ı okumak anlatıyor.
Sebepler, tek tek
1. Bir işlemci çekirdeğini tutan bir sürücü
Bir sürücü bir kesmenin ya da bir ertelenmiş çağrının (DPC) içindeyken o çekirdek var olan her iş parçacığı önceliğinin üstünde çalışıyor: sürücü bırakana kadar hiçbir şey çizmiyor ve hiçbir girdi okumuyor. Gözden kaçması kolay: hiçbir kare süresi grafiğinde ve hiçbir görev yöneticisinde görünmüyor.
Nasıl anlarsın: ölç. Gecikme testini okumak sayfasının çekirdek bölümü, bir çekirdeği tutan her sürücüyü en uzun tutuşa göre, dosya adıyla listeliyor. Yaklaşık 1 ms'nin ötesinde bir sürücü girdi raporlarının yerini alıyor; 4 ms ve üstünde, başka ne değiştirirsen değiştir makine kararlı bir kare süresi tutamıyor.
Ne yaparsın: o tek sürücüyü donanım üreticisinden güncelle — bütün sistemi değil, adı geçen dosyayı. Bunu yapabilen sürücüler arasında ağ, depolama ve ses sürücüleri de var.
2. Derlenen shader'lar
Yeni efekt, yeni bölge, yeni silah, ve oyunun bunu çizebilmek için önce bir shader derlemesi gerekiyor. Derleme, kare beklerken işlemcide oluyor.
Nasıl anlarsın: bir oturumun ya da bir haritanın ilk dakikalarında en kötüsü, sen oynadıkça sönüyor, ve bir sürücü ya da oyun güncellemesinden sonra geri geliyor. Takılman sönmüyorsa sebep bu değil — uzun hâli shader derleme takılması.
Ne yaparsın: oynayarak geç, ve o pencerenin içinde benchmark alma; derleyiciyi ölçmüş olursun.
3. Oyunun akış yaptığı disk
Sen ilerledikçe varlıkları içeri çeken bir oyun, okuma yavaş olduğunda takılıyor, ve o veriyi bekleyen kare, geç kalan kare oluyor.
Nasıl anlarsın: takılmalar yeni bir bölgeye girmekle örtüşüyor, ve uzun kare aralıkları disk etkinliğiyle aynı pencereye düşüyor. Bariz olanlara bak: oyun mekanik bir diskte mi, disk dolmak üzere mi, oyun klasörü her yazmayı yükleyen bulut senkronlu bir klasörün içinde mi, sayfa dosyası dönen bir diskte mi. Akış yapan bir oyun için SSD bir tweak değil, cevabın kendisi.
4. Bellek baskısı
RAM dolduğunda Windows sayfaları diske taşıyor, ve geri gelen sayfalar takılma olarak hissediliyor. Daha az bariz olan durum ayırma limiti: Windows'un dağıtabileceği toplam bellek azaldıkça bellek yöneticisi hâlâ çalışan programlardan sayfa kırpıyor, ve oyun bu kırpmaları saniyenin altında donmalar olarak hissediyor. Kırk sekmeli bir tarayıcıyı kapattığın an ikisi de düzeliyor.
5. Başka bir şey çalışıyor
Windows Update'in işçisi, bir bakım görevi, zamanlanmış bir kötü amaçlı yazılım taraması, unuttuğun bir video dışa aktarımı. Bir oyun başlayınca o iş durmuyor; render iş parçacığıyla aynı çekirdek için kuyruğa giriyor, yani kendini düşük bir ortalama olarak değil, kare süresi sıçramaları olarak gösteriyor. Bitmesini beklemek meşru bir çözüm.
Nasıl anlarsın: bir ölçüm koşusu en uzun kare aralıklarını, aynı pencereye düşen disk işi ve hard fault'larla birlikte saklıyor. Bunlar Windows bakım ya da antivirüs süreçleriyse uzun aralık kartı kaç aralık olduğunu sayıp süreçleri adlandırıyor. Bu birlikte düşen şey, o işin kareyi geciktirdiğinin kanıtı değil: antivirüs herhangi bir programın açtığı her dosyayı okur.
6. Isı ve güç limitleri
Bir yonga sıcaklık ya da güç tavanına vurduğunda frekans tekrar tekrar aşağı çekilip yukarı itiliyor, ve içeriden bakınca bu, dalgalı kare süreleri gibi hissettiriyor. Bu kararı firmware, Windows'a sormadan kendi veriyor. Hemen değil, bir süre sonra başlıyor, ve odanın ne kadar sıcak olduğuyla birlikte gidiyor.
7. Ekran
Desteklediği yenileme hızının altında çalışan bir monitör, donanımın gerektirmediği bir tabanı kare temponun altına koyuyor. Varsaymak yerine gerçek hıza bak; yeni bir kurulumdan ya da bir kablo değişiminden sonra şaşırtıcı sayıda makinede yanlış.
8. Eski bir aracın geride bıraktığı bir zamanlayıcı değeri
Win32PrioritySeparation, bir iş parçacığının işlemciyi ne kadar tuttuğuna ve ön plandaki uygulamanın ne kadar fazla zaman aldığına karar veriyor. Uzun ya da sabit kuantum kullanan veya ön plana 3:1'in altında pay veren değerler, işlemcinin oyunla geri kalan her şey arasında nasıl paylaşıldığını değiştiriyor; bunun kare sürelerine ne yaptığı ölçülmedi. Fix sayfasının Bellek ve sistem varsayılanları kartı Windows varsayılanını geri koyuyor.
9. Overlay'ler ve kayıt katmanı
Overlay'ler oyunun kendi karesinin içine çiziyor, ve arka plandaki bir kaydedici, son birkaç dakika kaydedilebilsin diye her kareyi kodluyor. Hepsini birden değil, teker teker kapatıp test et.
10. Maç, makine değil
Çevrimiçi bir oyun sunucudaki herkes için aynı anda takılabiliyor. Aynı makinedeki tek oyunculu içerik temizse ve kare süresi kaydı oyunun normal sunum yaptığını gösteriyorsa, bu gerçekten işe yarar bir cevap: sorun senin bilgisayarın değil.
w0a'nın kutusu olan iki sebep
8. sebep: "Ön plan önceliğini doğru değerde tut (Win32PrioritySeparation)" (Optimizasyonlar sayfası)
Tek bir DWORD değeri: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\PriorityControl altındaki Win32PrioritySeparation.
Microsoft'un bunun için başvuru kaynağı, Windows 2000 için yazılmış arşivlenmiş bir sayfa; AABBCC diye yazılan ve üç çift hâlinde okunan altı biti anlatıyor:
| Çift | Neye karar verir | Değerler |
|---|---|---|
| AA (en yüksek iki bit) | Bir iş parçacığının her seferinde ne kadar çalışabileceğine | 01 daha uzun, 10 daha kısa, 00 ya da 11 sürümün kendi varsayılanı (iş istasyonu sürümünde daha kısa) |
| BB (ortadaki iki bit) | O uzunluğun değişip değişmediğine | 01 değişken, 10 sabit, 00 ya da 11 sürümün varsayılanı (iş istasyonu sürümünde değişken) |
| CC (en düşük iki bit) | Ön plandaki programın ne kadar fazla zaman aldığına | 00 eşit (ve sabit), 01 2:1, 10 ya da 11 3:1. Yalnızca ortadaki çift değişken anlamına geldiğinde kullanılır. |
- Windows varsayılanı:
0x2(ikilik 000010). İş istasyonu sürümünde bu, daha kısa, değişken aralıklar ve ön plandaki programın arka plandakinin üç katı zaman alması demek. Aynı başvuru, performans seçeneklerinde programları öne alan seçenek için0x26(100110: daha kısa, değişken, 3:1), arka plan hizmetlerini öne alan seçenek için0x18(011000: daha uzun, sabit, eşit) veriyor. - Kutunun yaptığı: önce değeri okuyor. Ön plana zaten 3:1 pay veren, daha uzun aralık ve sabit aralık kullanmayan bir değer olduğu gibi bırakılıyor, ve kutu bunu söylüyor. Yalnızca bu üç koşuldan birini karşılamayan bir değer
0x26olarak yeniden yazılıyor. Windows'un kendi varsayılanında kutu hiçbir şey yazmıyor: istemci sürümünde0x2zaten0x26'nın istediği gibi zamanlıyor. - Ne zaman geçerli olur: yeniden başlattıktan sonra. Çekirdek bu değeri açılışta kendi zamanlama tablosuna çeviriyor; yani kayıt defterinde değiştirmek zaten çalışan zamanlayıcıda hiçbir şeyi değiştirmiyor, ve kutu yazdığında yeniden başlatma istiyor.
- Geri dönüş yolu: bellek ve sistem varsayılanları kartı
2'yi geri yazıyor ve yeniden başlatma istiyor. Aynı anda başka bellek ve zamanlayıcı varsayılanlarını da geri getiriyor.
9. sebep: "Xbox Game DVR'ı kapat" (Optimizasyonlar sayfası)
| Değer | Kutunun yazdığı | Windows varsayılanı (onarım kartının geri getirdiği) |
|---|---|---|
HKCU\System\GameConfigStore, GameDVR_Enabled | 0 | 1 |
HKLM\SOFTWARE\Policies\Microsoft\Windows\GameDVR, AllowGameDVR | 0 | yok |
HKCU\Software\Microsoft\Windows\CurrentVersion\GameDVR, AppCaptureEnabled | 0 | 1 |
HKCU\Software\Microsoft\GameBar, ShowStartupPanel | 0 | yok |
HKCU\Software\Microsoft\GameBar, UseNexusForGameBarEnabled | 0; çift CCD'li Ryzen X3D'de hariç | yok |
Hepsi DWORD. Çift CCD'li bir X3D işlemcide kutu son değere dokunmuyor: kayıt hattı yine kapatılıyor, ama AMD sürücüsünün dinlediği Game Bar parçası çalışmaya devam ediyor. Bu bir ihtiyat, kanıtlanmış bir sebep değil, ve kutunun mesajı hangi yolu izlediğini söylüyor. O parçanın bu yongalarda neden önemli olduğunu Ryzen X3D, Game Bar ve çekirdek park etme anlatıyor.
- Ne zaman geçerli olur: w0a bu kutu için yeniden başlatma istemiyor.
- Vazgeçtiğin şey: Game Bar kaydı. Win+G açılmaz olursa ya da kaydı geri istersen, Game Bar / oyun kaydı kartı Game Bar'ı ve Game DVR'ı Windows varsayılanlarıyla yeniden açıyor.
- Takılma taramasının söylediği:
GameDVR_Enabledya daAppCaptureEnabledhâlâ açıksa bunu bilgi olarak not ediyor; ikisi de temiz kurulumda 1, yani bu bir arıza değil, varsayılan. Üçüncü bir değeri de okuyor,HistoricalCaptureEnabled(arka planda kayıt), ama yalnızca ifadesini seçmek için; kutu o değeri yazmıyor.
Kendin kontrol et
Bu komutlar yalnızca okuyor:
reg query "HKLM\SYSTEM\CurrentControlSet\Control\PriorityControl" /v Win32PrioritySeparation
reg query "HKCU\System\GameConfigStore" /v GameDVR_Enabled
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\GameDVR"
reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\GameDVR" /v AllowGameDVR
reg query "HKCU\Software\Microsoft\GameBar"
Cevaplar nasıl okunur:
- Değerler onaltılık basılıyor:
Win32PrioritySeparation REG_DWORD 0x26,0x26demek. 0x2Windows'un varsayılanı,0x26başvurudaki programlar ayarı; istemci sürümünde ikisi de aynı şekilde zamanlıyor.0x18arka plan hizmetleri ayarı: daha uzun, sabit aralıklar ve ön plan payı yok — 8. sebebin anlattığı tam olarak bu. Başka herhangi bir değer için onu altı ikilik basamak olarak yaz ve yukarıdaki tabloyu oku.- Game DVR için
0x0kapalı (kutu),0x1açık (Windows varsayılanı) demek. AllowGameDVRsorgusu bir satır yerine hatayla bitiyorsa ilke değeri yok demek, bu da Windows varsayılanı.
Taramanın bütün bunlarla yaptığı
Takılma taraması neye bakıyor, bu kontrolleri Windows'un ve sürücülerinin zaten kaydettiği şeylere karşı koşturuyor ve her bulguyu kanıtlanmış, olası, aday ya da bakılmadı diye etiketliyor. Bilmeye değer iki şey: her seferinde on sorun bulan bir tarama sana çözümlerini satıyor, ve koşamayan bir kontrol sessizce temiz sayılmak yerine sayılıyor.
Sonra tek bir şeyi değiştir ve aynı sahneyi yeniden ölç. Beş değişiklik ve tek ölçüm, hangisinin fark ettiği hakkında sana hiçbir şey söylemiyor, ve bir sayıyı kıpırdatmayan ne varsa geri alınmalı.
Sebep olmayanlar
Bunlar takılma çözümü diye durmadan dolaşıyor, ve w0a her birini, kayıtlı gerekçelerle, yazmayı reddediyor:
DisablePagingExecutive,LargeSystemCacheveDisablePageCombiningçekirdeğin bellek yöneticisini değiştiriyor;NtfsMemoryUsageNTFS sürücüsünün havuzunu değiştiriyor;IoPageLockLimitveSecondLevelDataCachede çekirdek varsayımları. Çekirdek seviyesindeki değerler bir ürün kuralı: asla yazılmaz.GlobalTimerResolutionRequests, ürünün doğrudan reddettiği bir anahtar olanSession Manager\kernelaltında duruyor.MSISupportedbir cihazın kesme modunu değiştiriyor; yanlış ayarlanırsa sonuç siyah bir ekran olabilir.FeatureSettingsOverrideveFeatureSettingsOverrideMask, Spectre ve Meltdown azaltmalarını kapatıyor.OverlayTestModeveDisableOverlaysçok düzlemli overlay'i (MPO) kapatıyor. Gerçek bir Windows 11 25H2 makinesinde CS2'yi tamamen ve tekrarlanabilir biçimde dondurdular.TdrDelayveTdrDdiDelaygrafik sürücüsünün bekçisini uzatıyor, bu da yalnızca her donmayı uzatıyor;TdrLevelkurtarmayı kapatıyor.
Belleği kıt olmayan bir makinede bir bellek temizleyici ölçülebilir hiçbir şeyi değiştirmiyor.
İlgili
- Oyunlarda ani FPS düşmeleri
- Shader derleme takılması
- Gecikme testini okumak
- Takılma taraması neye bakıyor
- Ortalama FPS yüksek ama %1 low kötü
- DPC gecikmesi
- w0a'nın yaptığı değişiklikleri geri alma
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.