AMD GPU'larda Linux'ta ortaya çıkan uyku-uyanma sorununun nasıl çözüldüğü
(nyanpasu64.gitlab.io)-
Sorunun ortaya çıkışı: Windows ve Linux çift önyüklemeli bir masaüstü sistemde, Linux'ta yüksek miktarda RAM kullanılırken sistem uyku moduna alındığında çökme yaşanıyordu. Sistem uyandırıldığında siyah ekran görülüyor veya sistem yanıtsız kalıyordu. Bu sorun,
amdgpusürücüsündeki güç/bellek yönetimi hatasından kaynaklanıyordu. -
Sorunun teşhisi: Gigabyte B550M DS3H anakart ve AMD RX 570 GPU kullanılan bir sistemde Arch Linux çalıştırılıyordu. Sistem çöktükten sonra
journalctlile günlükler incelendi veamdgpu_device_suspendiçinde bellek yetersizliği (OOM) hatası oluştuğu bulundu. NVMe sürücüsü sistem yeniden devreye girerken başlatılamadığı için sistem kilitleniyor ve günlük kaydı da yapılamıyordu. -
Çözüm denemeleri: systemd yapılandırması değiştirilerek çeşitli uyku modları denendi ve eşzamansız uyku devre dışı bırakılarak sorun sadeleştirilmeye çalışıldı, ancak temel sorun çözülmedi. Çökmenin,
amdgpuiçindeki TTM tampon kaldırma sürecinde meydana geldiği doğrulandı. -
Sorunun nedeni: Sistem S3 uyku moduna geçtiğinde PCIe GPU'nun gücü kesiliyor ve VRAM verileri kayboluyor. Bunu önlemek için GPU sürücüsünün VRAM'i sistem RAM'ine yedeklemesi gerekiyor, ancak Linux
amdgpusürücüsü yeterli RAM olmadığında bellek yetersizliği nedeniyle sistemi çökertiyordu. -
Çözüm: Mario Limonciello, disk tabanlı depolama durdurulmadan önce VRAM'in yedeklenmesini sağlayan bir kernel yaması yazdı. Bu yama, VRAM yedeklemesini
dpm_suspend()yerinedpm_prepare()aşamasında yapacak şekilde değiştirerek, bellek yetersizliği durumunda uykuya geçişin iptal edilebilmesini sağladı. -
Ek sorun giderme: Kullanıcı, VRAM'in kullanıcı alanından yedeklenmesini sağlayan bir betik yazarak sistem uykuya geçmeden önce VRAM'i sistem RAM'ine taşıdı. Ancak birden fazla 3D uygulama çalışırken VRAM sürekli olarak GPU'ya geri taşınabildiğinden yine çökme yaşanabiliyordu.
-
Nihai çözüm: Güç yönetimi bildirim API'si kullanılarak VRAM'in
PM_SUSPEND_PREPAREaşamasında yedeklenmesi sağlandı. Böylece takas alanı devre dışı bırakılmadan önce VRAM sistem RAM'ine taşınabildi ve sorun çözüldü. -
Sonuç: Bu sorun, birçok kişinin emeği ve çeşitli denemeler sonucunda çözüldü ve Linux kernel 6.14'e dahil edilmesi planlanıyor.
1 yorum
Hacker News yorumları
Masaüstü bilgisayar S3 uyku moduna geçtiğinde sistemin PCIe GPU'nun gücünü kestiği varsayımı sorgulanıyor
udevkuralı eklemek gerekiyorudevadmkomutu kullanılabilirmemreserverın yazarı, Linux uyku sorununu çözmek için hata ayıklama yaptığı deneyimini paylaşıyorLinux'ta uyku özelliğini uygulamanın neden zor olduğunu ve hata ayıklamanın güçlüğünü anlatıyor
Ryzen tabanlı ThinkPad kullanan bir kullanıcı, Linux'ta uyku sorunları yaşadığını ve 6.14 sürümünden umutlu olduğunu söylüyor
"Uyku/uyanma" sorununun NP-tam bir problem olduğunu fark ettiğini söyleyen bir görüş paylaşılıyor
Framework AMD dizüstü bilgisayarda GPU genişletmesi ve Linux/Windows çift önyükleme kullananlar için bunun faydalı olacağı görüşü dile getiriliyor
AMD GPU'da uykudan sonra PC'nin neredeyse tamamen kilitlenmesi sorununu yaşayan bir kullanıcı, çözüm için uğraştığını söylüyor
Linux kullanırken her zaman uyku sorunları yaşadığını söyleyen bir görüş paylaşılıyor
IoT donanımında uyku sorunlarını hata ayıkladığı deneyimini paylaşıyor
Bellek yönetimi ve OOM koşullarının Linux'ta hâlâ zor problemler olduğunu anlatıyor
systemdnin hata ayıklama kabuğu özelliğinin yararlı olduğu görüşünü paylaşıyor