AMD GPU पर Linux के sleep-wake issue को हल करने का तरीका
(nyanpasu64.gitlab.io)-
समस्या की शुरुआत: Windows और Linux को dual boot करने वाले एक desktop में, Linux पर बहुत अधिक RAM उपयोग होने पर system को sleep mode में डालने से system crash हो जाता था। System को जगाने पर काली screen दिखाई देती थी या वह बिना response के अटक जाता था। यह समस्या amdgpu driver के power/memory management bug के कारण थी.
-
समस्या का निदान: Gigabyte B550M DS3H motherboard और AMD RX 570 GPU वाले system पर Arch Linux चल रहा था। System crash के बाद
journalctlसे logs की जाँच की गई, और पाया गया किamdgpu_device_suspendमें out-of-memory (OOM) error हो रहा था। NVMe driver system resume के समय initialize होने में विफल हो जाता था, जिससे system रुक जाता था और logs दर्ज नहीं हो पाते थे. -
समाधान के प्रयास: कई sleep modes आज़माने के लिए systemd settings बदली गईं, और asynchronous suspend को disable करके समस्या को सरल बनाने की कोशिश की गई, लेकिन मूल समस्या हल नहीं हुई। यह भी पुष्टि हुई कि crash amdgpu के TTM buffer eviction process के दौरान हो रहा था.
-
समस्या का कारण: जब system S3 sleep mode में जाता है, तो PCIe GPU की power कट जाती है, जिससे VRAM data खो जाता है। इसे रोकने के लिए GPU driver को VRAM का backup system RAM में लेना होता है, लेकिन Linux amdgpu driver पर्याप्त RAM न होने पर out-of-memory की स्थिति में system crash कर देता है.
-
समाधान: Mario Limonciello ने एक kernel patch लिखा, जो disk-based storage बंद होने से पहले VRAM का backup लेने देता है। यह patch VRAM backup को
dpm_suspend()की जगहdpm_prepare()चरण में करता है, ताकि memory कम होने पर suspend को रोका जा सके. -
अतिरिक्त समस्या का समाधान: उपयोगकर्ता ने एक script लिखी जो user space से VRAM का backup लेने देती है, ताकि system sleep से पहले VRAM को system RAM में ले जाया जा सके। हालांकि, कई 3D apps चलने पर VRAM लगातार GPU में वापस जाता रह सकता है, जिससे फिर crash हो सकता है.
-
अंतिम समाधान: power management notification API का उपयोग करके इसे
PM_SUSPEND_PREPAREचरण में VRAM backup करने के लिए बदला गया। इससे swap disable होने से पहले VRAM को system RAM में ले जाना संभव हुआ और समस्या हल हो गई. -
निष्कर्ष: कई लोगों के प्रयास और अलग-अलग कोशिशों से यह समस्या हल हुई, और इसे Linux kernel 6.14 में शामिल किए जाने की योजना है.
1 टिप्पणियां
Hacker News राय
इस धारणा पर सवाल है कि जब डेस्कटॉप S3 sleep mode में जाता है, तो सिस्टम PCIe GPU की power काट देता है
udevrule जोड़ना पड़ता हैudevadmcommand का इस्तेमाल करके device information प्राप्त की जा सकती हैmemreserver के लेखक ने Linux sleep समस्या को हल करने के लिए debugging करने का अपना अनुभव साझा किया
Linux में sleep feature को लागू करना क्यों कठिन है और debugging क्यों मुश्किल है, यह समझाया गया
Ryzen-आधारित ThinkPad इस्तेमाल करने वाला एक उपयोगकर्ता Linux में sleep समस्या झेल रहा है और 6.14 version से उम्मीद लगाए हुए है
एक राय साझा की गई कि "sleep/wake" समस्या दरअसल NP-पूर्ण समस्या है
यह राय दी गई कि Framework AMD laptop में GPU expansion और dual boot Linux/Windows इस्तेमाल करने वालों के लिए यह मददगार होगा
एक उपयोगकर्ता AMD GPU में sleep के बाद PC लगभग freeze हो जाने की समस्या से जूझ रहा है और समाधान खोजने की कोशिश कर रहा है
यह राय साझा की गई कि Linux इस्तेमाल करते समय हमेशा sleep समस्या का सामना करना पड़ा है
IoT hardware में sleep समस्या की debugging करने का अनुभव साझा किया गया
यह समझाया गया कि memory management और OOM condition अभी भी Linux में कठिन समस्याएँ हैं