Cara mengatasi masalah sleep-wake Linux yang terjadi pada GPU AMD
(nyanpasu64.gitlab.io)-
Masalah terjadi: Pada desktop yang melakukan dual boot Windows dan Linux, muncul masalah sistem crash saat masuk ke mode sleep di Linux ketika penggunaan RAM besar. Saat sistem dibangunkan, layar hitam muncul atau sistem menjadi tidak responsif. Masalah ini disebabkan oleh bug manajemen daya/memori pada driver amdgpu.
-
Diagnosa masalah: Sistem yang menggunakan motherboard Gigabyte B550M DS3H dan GPU AMD RX 570 sedang menjalankan Arch Linux. Setelah sistem crash, log diperiksa melalui
journalctl, dan ditemukan error kehabisan memori (OOM) diamdgpu_device_suspend. Driver NVMe gagal melakukan inisialisasi saat sistem dilanjutkan kembali sehingga sistem berhenti dan log tidak tercatat. -
Upaya perbaikan: Konfigurasi systemd diubah untuk mencoba berbagai mode sleep, dan sleep asinkron dinonaktifkan untuk menyederhanakan masalah, tetapi akar masalah tidak terselesaikan. Dikonfirmasi bahwa crash terjadi dalam proses penghapusan buffer TTM milik amdgpu.
-
Penyebab masalah: Saat sistem masuk ke mode sleep S3, daya ke GPU PCIe diputus sehingga data VRAM hilang. Untuk mencegah hal ini, driver GPU harus mencadangkan VRAM ke RAM sistem, tetapi driver amdgpu di Linux mengalami kehabisan memori dan membuat sistem crash bila RAM tidak mencukupi.
-
Solusi: Mario Limonciello menulis patch kernel agar VRAM dicadangkan sebelum penyimpanan berbasis disk dihentikan. Patch ini mengubah proses pencadangan VRAM agar dilakukan pada tahap
dpm_prepare()alih-alihdpm_suspend(), sehingga sleep dapat dibatalkan jika terjadi kekurangan memori. -
Pemecahan masalah tambahan: Pengguna menulis skrip agar VRAM dicadangkan dari user space, memindahkan VRAM ke RAM sistem sebelum sistem tidur. Namun, saat beberapa aplikasi 3D berjalan, VRAM bisa terus dipindahkan kembali ke GPU sehingga crash tetap dapat terjadi.
-
Perbaikan akhir: Diubah agar pencadangan VRAM dilakukan pada tahap
PM_SUSPEND_PREPAREdengan menggunakan API notifikasi manajemen daya. Dengan demikian, VRAM dapat dipindahkan ke RAM sistem sebelum swap dinonaktifkan, sehingga masalah terselesaikan. -
Kesimpulan: Masalah ini terselesaikan melalui upaya banyak orang dan berbagai percobaan, dan direncanakan akan masuk ke Linux kernel 6.14.
1 komentar
Komentar Hacker News
Ada yang meragukan asumsi bahwa saat desktop masuk ke mode sleep S3, sistem memutus daya ke GPU PCIe
udevadmdapat digunakan untuk memperoleh informasi perangkatPenulis memreserver membagikan pengalaman melakukan debugging untuk memperbaiki masalah sleep di Linux
Ada penjelasan tentang mengapa sulit mengimplementasikan fitur sleep di Linux dan mengapa proses debugging-nya juga sulit
Pengguna ThinkPad berbasis Ryzen melaporkan mengalami masalah sleep di Linux dan menantikan versi 6.14
Ada komentar bahwa masalah "sleep/wake" ternyata merupakan masalah NP-complete
Ada pendapat bahwa ini akan membantu pengguna laptop Framework AMD yang memakai ekspansi GPU dan dual boot Linux/Windows
Ada pengguna yang sedang berusaha memecahkan masalah PC yang hampir macet setelah sleep pada GPU AMD
Ada yang membagikan pendapat bahwa selama menggunakan Linux, ia selalu mengalami masalah sleep
Ada yang membagikan pengalaman debugging masalah sleep pada perangkat keras IoT
Ada penjelasan bahwa manajemen memori dan kondisi OOM masih merupakan masalah sulit di Linux