
Linux 7.3, VRAM tükendiğinde çok daha iyi performans gösterecek
AMD GPU sürücüsünün VRAM tükenmesiyle başa çıkma biçimini yeniden düzenleyen çekirdek yamaları upstream'e alındı ve Linux 7.3 kuyruğuna girdi: oyunlar daha az takılacak, kare süreleri daha istikrarlı olacak.
AMD GPU sürücüsünün video belleği tükendiğinde nasıl davrandığını yeniden düzenleyen çekirdek yamaları upstream'e alındı ve Linux 7.3 kuyruğuna girdi; bu bilgi 17 Ağustos'ta pixelcluster adlı GPU blogunda yayımlanan yazıda yer alıyor. Çalışma, oyunlar için VRAM yönetimini iyileştirmeye yönelik önceki bir projenin devamı niteliğinde.
VRAM tükenmesinin fiziği
Teoride VRAM tükenmesi istikrarı değil yalnızca performansı vurmalı: sürücü, uygulamanın kartta fiziksel olarak bulunandan fazla bellek istemesine izin verir ve fazlası CPU RAM'ine taşınır. Sorun tam da bu taşıma işleminde. PCIe 4.0 x16 bağlantısında veriyolu saniyede 32 GiB'ın biraz altında, yani milisaniyede yaklaşık 32,2 MiB aktarır. 30 FPS hedefinde bir kare için 33,3 ms vardır; bu da GPU'nun dışarı atılmış bellekten çekebileceği veriyi yaklaşık 1.075,5 MiB ile, yani 1 GiB'ın hemen üzeriyle sınırlar. Tek bir kare daha fazlasına ihtiyaç duyuyorsa 30 FPS ulaşılamaz hale gelir.
İstikrar sorunu: çekirdek kilitlemesinde kilitlenme
Tükenme istikrarı da bozuyor. Tüm ayırmalar başarılı olduğu hâlde çekirdek -ENOMEM döndürdüğünde RADV "Not enough memory for command submission" mesajını basıyor. Neden, ders kitaplarına girecek türden bir ABBA kilitlenmesi: bir gönderim, başka bir gönderimin kilitlediği ayırmayı dışarı atmaya çalışıyor; ikinci gönderim ise birincinin elinde tuttuğu belleğe ihtiyaç duyuyor. Çekirdek bu tür kilitlenmeleri saptayıp yeniden denemeyi biliyor, ancak ortak GPU bellek yönetimi katmanı TTM'de drm_exec yardımcı kitaplığı kullanılmıyordu. 2024'ten kalan yama setleri bir türlü kabul edilmemişti; geliştirici bunları güncel çekirdeğe taşıyıp kalan hataları düzeltti — ağır VRAM çekişmesinin üçüncü dakikasında ortaya çıkan takılmaların peşinde geçen bir hafta.
Ekran tarama arabellekleri ve 4 GiB'lık tahliye
Profil çıkarımı, kaybedilen zamanın büyük kısmının işleme değil SDMA arabellek taşımalarına gittiğini gösterdi. En kötü durum ekrana taranan arabellek: ekran donanımı sanal belleği atlar ve fiziksel olarak bitişik sayfalar ister; tahliye algoritması ise fiziksel kısıtları hiç dikkate almayan basit bir LRU döngüsü. Gerçek vakalarda her biri yaklaşık 32 MiB piksel verisi tutan tarama görüntülerine yer açmak için 4 GiB'a kadar VRAM tahliye edildi; sadece bu veriyi taşımak en az 130 ms sürüyor. Eklenen sert ve yumuşak kısıtlama aşamaları, bellek ileri geri taşınmasını durdurmayı amaçlıyor.
Pratikte ne sağlıyor
Bu sezgisel kurallarla Indiana Jones: The Great Circle, 8 GiB'lık kartta 9 GiB isteyerek kare başına ortalama 19,6 ms elde etti. Fazlalığı iki katına çıkarmak kare süresi değişkenliğini artırdı; 33,3 ms'i aşan sıçramalar görüldü. Çekirdek artık VK_EXT_pageable_device_local_memory ve vkSetDeviceMemoryPriorityEXT'i de dikkate alıyor, böylece uygulamalar hangi belleğin tahliyesinin daha güvenli olduğunu kendileri işaretleyebiliyor.
SiTech — AI destekli web geliştirme
Hızlı ve modern web siteleri kuruyor, AI'yı gerçek iş akışlarına taşıyoruz. Projeniz veya sorunuz mu var? Yardımcı olmaktan mutluluk duyarız.