Nvidia驅動程序更新導致Arch上的掛起+螢幕撕裂問題
我有一個 GeForce RTX 2070 SUPER,在我的電腦上執行帶有 GNOME 的 Arch。
我確實記得在最近的 nvidia 驅動程序更新(特別是 Arch 上從 450.66-21 到 450.66-22)之前出現了螢幕撕裂,但啟動 Full Composition Pipeline 能夠修復它。但是,更新後,螢幕撕裂又回來了。升級到 nvidia-455 並沒有解決任何螢幕撕裂問題。在整個過程中,Full Composition Pipeline 一直處於活動狀態,並且能夠減少一些螢幕撕裂,但並非始終如此。
除了 Full Composition Pipeline 之外,我的 xorg.conf 沒有核心模式設置和其他選項,沒有螢幕撕裂,但存在掛起問題。我在醒來後立即看到一個空白螢幕,在螢幕載入之前掛起一兩秒鐘。在上述 nvidia 驅動程序更新之前,並沒有出現這樣的掛起問題。螢幕載入後,某些應用程序(例如 anki 和 vscode)會出現黑色偽影和其他圖形問題。例如,在 anki 中,整個螢幕都是黑色的,而在 vscode 中,我看到一些黑色矩形偏向一邊,終端提示的文本消失了。更改工作空間消除了空白 anki 螢幕,同時將滑鼠懸停在工件上並重新打開應用程序內終端修復了 vscode 問題。儘管如此,這是一個非常煩人的問題,它也會影響我嘗試應用的一些 GNOME 主題。我懷疑同樣的問題會影響其他應用程序。
我花了一個半小時在網上研究這個問題並嘗試不同的解決方案,但無濟於事。
在 xorg.conf 中沒有 TripleBuffering 和 IndirectGLXProtocol 選項的模式設置(例如 nvidia-drm.modeset=1)不會導致掛起問題,但會導致嚴重的螢幕撕裂
打開 TripleBuffering 和/或關閉 IndirectGLXProtocol 會導致上述掛起問題,但不會出現螢幕撕裂(有和沒有核心模式設置)。
如您所見,我要麼有螢幕撕裂但沒有暫停問題,要麼沒有螢幕撕裂和暫停問題。在破壞我的設置的驅動程序更新之前將 nvidia 軟體包降級到一個版本會破壞 lightdm。在 9 月 17 日(驅動程序更新之前)降級到鏡像是可行的,但並不理想,因為我寧願進行圖形不便的軟體更新,也不願讓電腦及時卡住。
我不完全確定這是特定於 nvidia 驅動程序的問題,但鑑於上述事件,我相信這是相當合理的。
如果您遇到同樣的問題,請告訴我。我想知道您也嘗試過哪些解決方案。
我解決了這個問題!
Arch Linux 論壇上的好人發現了我在啟動過程中遇到的與競態條件不一致的螢幕撕裂問題。如果 nvidia 模組正確載入,那麼我沒有螢幕撕裂。但如果沒有,那麼電腦將恢復為其他驅動程序(我很確定 nouveau),並且會發生螢幕撕裂。
MODULES
為了解決這個問題,我通過將 nvidia 模組添加到/etc/mkinitcpio.conf的列表中來確保始終正確載入 nvidia 模組,如下所示:MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)
我還了解到,我面臨的掛起圖形問題是由於英偉達在掛起期間處理了它認為“不必要的”影片記憶體造成的。為了解決這個問題,我通過將此行添加到我的 /etc/modprobe.d/nvidia.conf 來載入帶有實驗選項的 nvidia 模組:
options nvidia NVreg_PreserveVideoMemoryAllocations=1
最後,我重建了 initramfs 映像
sudo mkinitcpio -p linux
並重新啟動。nvidia 現在在啟動過程中始終載入(我可以說是因為不再有螢幕撕裂!),並且 anki 和 vscode 的所有圖形問題都消失了。