Nvidia ドライバのアップデートにより、Arch でサスペンドと画面ティアリングの問題が発生する

Nvidia ドライバのアップデートにより、Arch でサスペンドと画面ティアリングの問題が発生する

私のコンピューターでは、GeForce RTX 2070 SUPER と Arch と GNOME を実行しています。

最近の NVIDIA ドライバーのアップデート (具体的には、Arch の 450.66-21 から 450.66-22) の前に画面のティアリングがあったことを覚えていますが、Full Composition Pipeline を有効にすると修正できました。ただし、アップデートすると画面のティアリングが再発しました。nvidia-455 にアップグレードしても画面のティアリングは修正されませんでした。このプロセス全体を通じて Full Composition Pipeline が有効で、画面のティアリングをいくらか軽減できましたが、常にすべて軽減できたわけではありません。

カーネル モード設定がなく、Full Composition Pipeline 以外の xorg.conf への追加オプションもない場合、画面のティアリングは発生しませんが、サスペンドの問題は発生します。起動直後に空白の画面が表示され、画面が読み込まれる前に 1 ~ 2 秒間ハングします。このようなサスペンドの問題は、上記の nvidia ドライバーの更新前には発生しませんでした。画面が読み込まれた後、一部のアプリケーション (anki や vscode など) で黒いアーティファクトやその他のグラフィックの問題が発生します。たとえば、anki では画面全体が黒くなりますが、vscode では、横に黒い四角形が表示され、ターミナル プロンプトのテキストが消えます。ワークスペースを変更すると、アーティファクトの上にマウスを置いたときに表示される空白の anki 画面がなくなり、アプリケーション内ターミナルを再度開くと、vscode の問題が修正されます。とはいえ、これは非常に厄介な問題で、適用しようとした一部の GNOME テーマにも影響します。この同じ問題が他のアプリケーションにも影響すると思われます。

私はウェブ上で問題を調べ、さまざまな解決策を試すのに最大 1 時間半を費やしましたが、効果はありませんでした。

xorg.conf で TripleBuffering および IndirectGLXProtocol オプションを使用せずにモード設定 (例: nvidia-drm.modeset=1) を行うと、サスペンドの問題は発生しませんが、画面のティアリングが顕著になります。

TripleBuffering をオンにし、IndirectGLXProtocol をオフにすると、上記のサスペンドの問題は発生しますが、画面のティアリングは発生しません (カーネル モード設定の有無にかかわらず)。

ご覧のとおり、画面のティアリングは発生するがサスペンドの問題は発生しないか、画面のティアリングもサスペンドの問題も発生しません。セットアップを壊したドライバー更新前のバージョンに nvidia パッケージだけをダウングレードすると、lightdm が壊れます。9 月 17 日 (ドライバー更新前) のミラーにダウングレードすることは可能ですが、コンピューターが時間通りに動かなくなるよりは、グラフィックの不便を伴うソフトウェア更新の方がましなので、理想的ではありません。

これが具体的に NVIDIA ドライバーの問題であるかどうかは完全にはわかりませんが、上記の事象を考慮すると、かなりあり得ると思います。

同じ問題が発生している場合はお知らせください。また、どのような解決策を試したかも知りたいです。

答え1

問題を解決しました!

Arch Linux フォーラムの善良な人々は、起動プロセス中の競合状態による画面ティアリングの不一致を特定してくれました。nvidia モジュールが適切にロードされれば、画面ティアリングは発生しません。しかし、そうでない場合は、コンピューターが他のドライバー (nouveau だと思います) に戻り、画面ティアリングが発生します。これを修正するには、MODULES次のように nvidia モジュールを /etc/mkinitcpio.conf のリストに追加して、nvidia モジュールが常に適切にロードされるようにします。

MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)

また、私が直面したサスペンド時のグラフィックの問題は、nvidia がサスペンド時に「不要」とみなしたビデオ メモリを破棄することによって引き起こされることもわかりました。これを修正するために、次の行を /etc/modprobe.d/nvidia.conf に追加して、実験的なオプションで nvidia モジュールをロードしました。

options nvidia NVreg_PreserveVideoMemoryAllocations=1

最後に、initramfs イメージを再構築しsudo mkinitcpio -p linuxて再起動しました。これで、起動時に nvidia が一貫して読み込まれるようになりました (画面のティアリングがなくなったのでわかります)。また、anki と vscode のグラフィックの問題もすべて解消されました。

関連情報