Düşük RAM'li sistemlerde shader derleme takılmasının daha sık görülmesinin nedeni, derleme sırasında üretilen ara verinin belleğe sığmaması ve Windows'un bu veriyi diske taşımaya başlamasıdır. Shader derleme görünüşte ilk açılışta bir kere olup biten bir iş gibi durur, ama perde arkasında sürekli bellek ayırıp serbest bırakan bir yüktür. RAM ya da VRAM dolduğunda ara veri sayfa dosyasına yazılır; derleme artık işlemci hızında değil, disk gecikmesiyle ilerler. Oyuncunun gördüğü şey de tam olarak budur: "shader derleniyor" yazısının yanında saniyelerce kıpırdamayan bir yüzde.
Bu ayrımı kafamda oturtmam, aynı oyunun derleme ekranını iki farklı kasada izlemekle oldu. Birinde çubuk akıyordu, diğerinde aynı yüzdede neredeyse duruyordu. İkinci kasada Görev Yöneticisi'ni açtığımda tablo netti: bellek sınırdaydı, disk sürekli meşguldü ve "Ayrılmış" satırı fiziksel belleğin üstüne çıkmıştı. O günden sonra shader derleme takılmasına "oyunun suçu" diye bakmayı bıraktım.
Derleme sırasında bellekte ne birikiyor
Shader, GPU'nun çalıştırdığı küçük bir program parçası. Her ekran kartı ve her sürücü sürümü için ayrı ayrı derlenmesi gerekiyor, çünkü derleyicinin ürettiği makine kodu karta ve sürücüye özel.
DirectX 11 döneminde bu işin büyük kısmını sürücü arka planda hallediyordu; oyun ilk saniyelerde biraz takılıyor, sürücü önbelleği doldukça düzeliyordu. DirectX 12 ve Vulkan'da derleme sorumluluğu büyük ölçüde oyuna geçti. Bu yüzden modern oyunlarda "shader compiling" ekranı var. Oyun, kartın anlayacağı programları toplu halde üretiyor; üretirken de her iş parçacığı kendi ara tamponunu, bytecode'unu, sabit arabelleklerini bellekte tutuyor.
Bu işin iki ayağı var ve ikisi de bellek istiyor. Birincisi işlemcinin ürettiği ara veri: derlenmemiş kaynak, derleme sırasındaki geçici yapılar, paralel çalışan iş parçacıklarının tamponları. İkincisi sonuç: derlenmiş shader'lar ve gölgelendirici kaynakları, ki bunlar hem shader önbelleğine yazılıyor hem de ekran kartının belleğinde duruyor. Yani aynı anda hem okuma hem yazma, hem de ciddi miktarda geçici tahsis var. Bellek daraldığında bu tahsislerin bir kısmı tutulamıyor.
Bellek dolunca devreye giren şey: sayfa dosyası
Windows, fiziksel RAM yetmediğinde sayfaları disk üzerindeki sayfa dosyasına taşır. Bu bir arıza durumu değil, normal çalışma biçimi; sistem bunu her gün yapıyor. Sorun, shader derleme gibi yoğun ve gecikmeye duyarlı bir işin ortasında yapıldığında ortaya çıkıyor. Çünkü disk, RAM'e göre kıyas kabul etmeyecek kadar yavaş; oraya taşınan bir veriyi geri getirmek, derleme iş parçacığını bekletiyor.
Görev Yöneticisi'nde bunun izini görebiliyorsunuz. Performans sekmesinde "Ayrılmış" (committed) değeri fiziksel bellek miktarını aştığı anda sistem sayfa dosyasını kullanmaya başlamış demektir. Disk sütununun derleme boyunca yüksek kalması, bellek sütununun tavana yapışması ve "Sıkıştırılmış" satırının şişmesi aynı hikâyenin üç farklı anlatımı. Kaynak İzleyicisi'ne geçip "Sabit Hatalar/sn" değerine baktığınızda ise olay netleşir: sabit hata, sayfanın gerçekten diskten okunmak zorunda kaldığı durumdur ve derleme sırasında bu sayı zıplıyorsa darboğaz bellekte demektir.
Sayfa dosyasını kapatmak neden işi büsbütün bozar
Burada sık yapılan bir hata var: "SSD var, sayfa dosyasına gerek yok" deyip kapatmak ya da birkaç yüz megabayta sabitlemek. RAM'i bol bir sistemde bu genelde sorun çıkarmaz, ama belleği zaten dar olan bir makinede tam tersi etki yapar. Sayfa dosyası yoksa Windows'un elinde taşıyacak yer kalmaz; derleme sırasında yapılan büyük ayırmalar başarısız olur. Sonuç, derleme yüzde altmışlardayken masaüstüne atma, bellek yetersizliği hatası ya da oyunun hiç açılmaması olur.
Doğru kurgu basit: sayfa dosyasını Windows'un yönetmesine izin vermek. Sistem onu ihtiyaç halinde büyütür, iş bitince geri çeker. Elle sabit boyut verecekseniz de küçük değil, rahat bir değer vermek gerekir. Ayrıca sayfa dosyasının bulunduğu disk ile oyunun kurulu olduğu disk aynıysa, derleme sırasında okuma ve yazma aynı aygıtı paylaşır ve takılma uzar.
VRAM tarafı: görünmeyen ikinci darboğaz
Sistem RAM'i kadar önemli olan, hatta çoğu zaman daha önce dolan şey VRAM. Doku ve shader kaynakları orada duruyor. VRAM dolduğunda sürücü iki şeyden birini yapıyor: ya dokuların bir kısmının çözünürlüğünü düşürüyor, ya da bir kısmını sistem RAM'ine taşıyor. İkinci durumda ekran kartı, PCIe üzerinden sistem belleğine erişmek zorunda kalıyor ki bu, kartın kendi belleğine erişmekle aynı şey değil.
Görev Yöneticisi'nin Performans sekmesindeki "Paylaşılan GPU belleği" satırı tam bu noktayı gösterir: ekran kartının sistem RAM'inden ne kadar kullandığını. Oyun oynarken bu sayının belirgin şekilde artmaya başlaması, VRAM'in taştığının işaretidir. GPU-Z'nin Sensors sekmesinde "Memory Used" ve "Shared Memory" değerlerini yan yana izlemek daha net bir tablo verir, üstelik herhangi bir test çalıştırmaya gerek yoktur.
1080p için sık tekrarlanan 6 GB VRAM eşiğinin altındaki kartlarda en sık karışan durum şudur: oyuncu takılmayı shader derleme sanır, oysa olan şey doku akışıdır. Kamerayı çevirdiğinizde dokuların bir an bulanık görünüp sonra netleşmesi, takılmanın dokudan geldiğinin en açık göstergesidir. Shader derleme takılmasında böyle bir bulanıklık olmaz; sadece hareket durur.
Çift kanal meselesi nerede devreye giriyor
Tek kanal çalışan bir sistemde bellek bant genişliği ciddi biçimde düşer. Bu, takılmanın sebebini değiştirmez ama hissedilme biçimini değiştirir: bant genişliği daraldıkça doku akışı ve bellekten beslenen işler daha görünür hale gelir, takılmalar uzar. Yani aynı miktarda RAM'e sahip iki sistemden tek kanal olanı, aynı oyunda daha sinir bozucu bir deneyim verebilir. İki kanal kapasiteyi artırmaz; var olan kapasitenin daha verimli kullanılmasını sağlar.
Benchmark yapmadan hangi takılmanın hangisi olduğunu anlamak
Burada asıl mesele, takılmayı hissettiğiniz anda ne olduğunu ayırt edebilmek. Bunun için test yazılımına gerek yok; birkaç davranış kalıbı neredeyse kesin ayrım sağlıyor.
Derleme takılması ilk dakikalarda, menüden çıkıp oyuna girdiğiniz anda ve daha önce görülmemiş bir efekte ilk kez rastladığınızda ortaya çıkar. Aynı sahneye ikinci kez gittiğinizde büyük ölçüde kaybolur. Sürücü güncelledikten ya da oyun büyük bir yama aldıktan sonra geri gelir, çünkü shader önbelleği geçersiz olmuştur ve her şey baştan derlenir. Sürücü klasörlerindeki önbellek dosyaları ile oyunun kendi klasöründeki önbelleğin sıfırlanması bu yüzdendir.
Doku akışı takılması ise kamerayı hızlı çevirdiğinizde, yeni bir bölgeye girdiğinizde ve doku kalitesi ayarı yüksekken ortaya çıkar; dokuların netleşmesiyle birlikte geçer. VRAM taşması belirtisi olarak "Paylaşılan GPU belleği" tam bu anlarda yükselir.
Gezinme takılması hep aynı yerde, aynı koridorun başında tekrarlar; bellekten bağımsız olarak oyunun kendi sahne yüklemesinden gelir ve RAM eklemek bunu değiştirmez.
Bellek kaynaklı olduğunu düşündüren asıl işaretler şunlar: arka planda tarayıcı veya Discord açıkken takılmanın belirgin şekilde kötüleşmesi, uzun bir oturumdan sonra sorunun artması, alt-tab yapıp geri dönünce ilk saniyelerde belirgin bir sarsıntı yaşanması. Son madde özellikle öğretici: Windows, arka plana attığınız oyunun çalışma kümesini kırpar, yani sayfaları bellekten atar. Geri döndüğünüzde o sayfaların diskten geri yüklenmesi gerekir. Belleği bol bir sistemde bu bir an sürer; dar bir sistemde oyunun kendine gelmesi saniyeler alır.
RAM'in suçlu olmadığı durumlar
Her derleme takılması bellek yüzünden değil. Bazı oyunlar derleme işini ana iş parçacığına bindirir; burada darboğaz bellek değil işlemcidir ve RAM eklemek hiçbir şeyi değiştirmez. Bazı oyunlar da her açılışta önbelleği doğrulayıp derlemeyi baştan yapar; bu bir oyun tarafı sorunudur, donanım tarafında çözümü yoktur.
Bir de kullanım alışkanlığından kaynaklanan durumlar var. Derleme başladıktan sonra oyunu kapatmak, işin yarıda kalmasına ve sonraki oturumda baştan başlamasına yol açar. Derlemenin tamamlanmasını beklemek ilk oturumda can sıkıcı olsa da sonraki oturumları kurtarır.
Yapılabilecekler sınırlı ve basit: sayfa dosyasını açık ve yeterli bırakmak, oyun oynarken arka planda bellek yiyen uygulamaları kapatmak, derleme sırasında Görev Yöneticisi'nden bellek ve disk sütunlarını izleyip tabloyu görmek. VRAM tarafında ilk kısılacak ayarlar doku kalitesi ve gölge çözünürlüğü; ikisi de doğrudan bellek tüketir, işlemciye yük bindirmez. Kısılan ayarın hangi bileşene yüklendiğini bilmek, deneme yanılma turunu kısaltır.
Kısacası düşük RAM'li sistemde shader derleme takılması, oyunun shader'ları kötü derlemesinden değil, derlemenin ihtiyaç duyduğu çalışma alanının diskle takas edilmesinden kaynaklanır. Bellek baskısını görmeyi öğrendiğinizde, elinizdeki sistemin nerede zorlandığını da tahmin edebilir hale gelirsiniz.