NVIDIA Optimus

提供: ArchWiki
2021年9月28日 (火) 10:00時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (→‎いくつかの方法: リンクを修正)
ナビゲーションに移動 検索に移動

関連記事

NVIDIA Optimus は Intel の内蔵 GPU とディスクリートの NVIDIA GPU をノートパソコンに組み込んで利用できるようにする技術です。

いくつかの方法

  • インテルのグラフィックスのみを使用 -NVIDIA GPU の電源は完全にオフになるため、消費電力を節約できます。
  • nvidia グラフィックのみを使用 -インテルグラフィックスよりもパフォーマンスは向上しますが、より多くのバッテリを消費します (モバイルデバイスには適していません) 。これは、 [切り替え可能なグラフィックスを使用#optimus-managerを使用する] および nvidia-xrun オプションと同じ基本プロセスを利用しており、より自動化されたアプローチの1つを選択する前に、一般的な機能のトラブルシューティングおよび検証する必要があります。
  • 両方を使用する (必要に応じて NVIDIA GPU を使用し、電源を切ったままにして電力を節約する) :
    • PRIME render offloadを使用 -NVIDIA が公式にサポートしている方法です。
    • optimus-manager の使用 -1つのコマンドでグラフィックスを切り替えます (有効にするにはログアウトとログインが必要です) NVIDIA GPU の性能を最大限に引き出し、使用していない場合はオフにします。1.4リリース以降では、AMD と NVIDIA の組み合わせもサポートされています。
    • nvidia-xrun を使用 -NVIDIA グラフィックスを使用して別の TTY で別の X セッションを実行します。NVIDIA GPU の性能を最大限に引き出し、使用していない場合はオフにします。
    • Bumblebee の使用 -インテルのグラフィックスを他のすべてのものに使用しながら、選択したアプリケーションをNVIDIA のグラフィックスで実行できるようにすることで、Windows に似た機能を提供します。しかし、パフォーマンスに重大な問題があります。
    • nouveau を使用 -独自の NVIDIA ドライバと比較してパフォーマンスが低く、スリープと休止状態で問題が発生する可能性があります。最新の NVIDIA GPU では動作しません。
ノート: これらのオプションはすべて相互に排他的です。1つの方法をテストして別の方法を選択する場合は、別の方法を試行する前に、1つの方法に従って行われた構成変更を必ず元に戻す必要があります。そうしないと、ファイルの競合や未定義の動作が発生する可能性があります。

インテルのグラフィックスのみを使用

特定の GPU のみに切り替えずに使用する場合は、システムの BIOS でオプションを確認してください。いずれかのカードを無効にするオプションがあるはずです。ラップトップによっては、個別のカードを無効にすることしかできない場合や、その逆の場合がありますが、カードのうちの1つだけを使用する予定があるかどうかを確認してください。

BIOS が Nvidia グラフィックスを無効にできない場合は、Linux カーネル自体から無効にできます。ハイブリッドグラフィック#ディスクリート GPU の完全な電源オフ を参照してください。

レンダリングプロバイダを切り替えずに CUDA を使用

CUDA は、NVIDIA グラフィックスにレンダリングを切り替えることなく使用できます。CUDA アプリケーションを起動する前に、NVIDIA カードの電源が入っていることを確認するだけです。詳細については、 ハイブリッドグラフィック#ディスクリート GPU の完全な電源オフ を参照してください。

これで、CUDA アプリケーションを起動すると、必要なすべてのカーネルモジュールが自動的にロードされます。CUDA の使用後に NVIDIA カードの電源を切る前に、まず nvidia カーネルモジュールをアンロードする必要があります。

#rmmod nvidia_uvm
#rmmod NVIDIA

CUDA のみで NVIDIA を利用

レンダリングを NVIDIA 側で行わなくとも CUDA が利用できます。CUDA アプリケーションの起動前に NVIDIA GPU に電源を入れておけば、アプリケーションの起動時に必要なカーネルモジュールが読み込まれます。

なお、終了後 NVIDIA GPU の電源を切る前には、nvidia_uvmnvidia カーネルモジュールをアンロードしておいてください。

# rmmod nvidia_uvm
# rmmod nvidia

ハイブリッドグラフィック#ディスクリート GPU の完全な電源オフ も参照してください。

nvidia グラフィックのみを使用

プロプライエタリの NVIDIA ドライバーは nouveau ドライバーのような動的な切り替えはサポートしていません (つまり NVIDIA デバイスしか使用できません)。また、NVIDIA は画面にティアリングが発生する問題を認識していますが未だに修正がなされていません。そのかわり、ディスクリート GPU を利用して nouveau ドライバーよりも高い性能を発揮することができます (2017年1月現在)。

まず nvidiaxorg-xrandr パッケージをインストールしてください。

そして、xorg.conf を設定します。NVIDIA カードの PCI アドレスを知る必要があるので、次のコマンドを実行してください:

$ lspci | grep -E "VGA|3D"

NVIDIA と書かれた行の最初の7文字が PCI アドレスです。例えば 01:00.0 などと表記されます。xorg.conf では #:#:# という形式で表記する必要があります。例えば 01:00.0 の場合 1:0:0 となります。

ノート: セットアップによっては EDID ファイルによる nvidia ドライバーのディスプレイの値の自動検出がされなくなることがあります。解決方法は #解像度や画面スキャンが正しく認識されず Xorg.log に EDID のエラーが表示される を見て下さい。
/etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf
Section "OutputClass"
    Identifier "intel"
    MatchDriver "i915"
    Driver "modesetting"
EndSection

Section "OutputClass"
    Identifier "nvidia"
    MatchDriver "nvidia-drm"
    Driver "nvidia"
    Option "AllowEmptyInitialConfiguration"
    Option "PrimaryGPU" "yes"
    ModulePath "/usr/lib/nvidia/xorg"
    ModulePath "/usr/lib/xorg/modules"
EndSection

次に、~/.xinitrc の最初に以下の2行を追加してください:

~/.xinitrc
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto

そしてドライバーをロードするために再起動し、X を起動させます。

ディスプレイの dpi が正しくない場合は以下の行を追加してください:

xrandr --dpi 96

X の起動時に黒画面が表示される場合、~/.xinitrc に記述した xrandr コマンドの後にアンパサンドがないことを確認してください。アンパサンドがある場合、xrandr コマンドが実行し終える前にウィンドウマネージャが起動してしまうことがあり、そうなると黒画面になってしまいます。

アンパサンドがないのに黒画面になる場合、下の #別の設定 を見て下さい。

ディスプレイマネージャ

ディスプレイマネージャを使用する場合、~/.xinitrc の代わりにディスプレイマネージャのディスプレイ設定スクリプトを作成・編集する必要があります。

LightDM

LightDM ディスプレイマネージャの場合:

/etc/lightdm/display_setup.sh
#!/bin/sh
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto

スクリプトに実行可能属性を付与:

# chmod +x /etc/lightdm/display_setup.sh

/etc/lightdm/lightdm.conf[Seat:*] セクションを編集してスクリプトを実行するように lightdm を設定:

/etc/lightdm/lightdm.conf
[Seat:*]
display-setup-script=/etc/lightdm/display_setup.sh

再起動して、ディスプレイマネージャが起動するのを確認してください。

SDDM

SDDM ディスプレイマネージャの場合:

/usr/share/sddm/scripts/Xsetup
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto

GDM

GDM ディスプレイマネージャの場合 .desktop ファイルを作成します:

/usr/share/gdm/greeter/autostart/optimus.desktop
[Desktop Entry]
Type=Application
Name=Optimus
Exec=sh -c "xrandr --setprovideroutputsource modesetting NVIDIA-0; xrandr --auto"
NoDisplay=true
X-GNOME-Autostart-Phase=DisplayServer

また、GDM が Xorg バックエンドを使うようになっているか確認してください。

KDM

KDE の KDM の場合、/usr/share/config/kdm/Xsetup に xrandr の行を追加してください。

3D の確認

NVIDIA グラフィックが使われているかどうかは mesa-demos をインストールして次のコマンドを実行することで確認できます:

$ glxinfo | grep NVIDIA

詳細情報

詳しい情報は、NVIDIA の公式ページ [1] を見て下さい。

トラブルシューティング

垂直同期が機能せずティアリングが発生する

解決するには xorg-server 1.19 以上、linux カーネル 4.5 以上、nvidia 370.23 以上が必須です。NVIDIA#DRM カーネルモードセッティングを有効にすることで PRIME 同期が有効になりティアリングが解消されます。

詳しくは公式の フォーラムスレッド を参照してください。

Failed to initialize the NVIDIA GPU at PCI:1:0:0 (GPU fallen off the bus / RmInitAdapter failed!)

カーネルパラメータに rcutree.rcu_idle_gp_delay=1 を追加してください。詳しくは こちら を参照。

解像度や画面スキャンが正しく認識されず Xorg.log に EDID のエラーが表示される

nVidia ドライバーがディスプレイの EDID を検出できないのが原因です。手動で EDID ファイルのパスを指定するか、同じような方法で同一の情報を提供する必要があります。

EDID ファイルのパスを指定するには Xorg.conf の nvidia カードの Device セクションを編集して、以下の行を追加して適当にパスを置き換えてください:

/etc/X11/xorg.conf
Section "Device"
       	Option		"ConnectedMonitor" "CRT-0"
       	Option		"CustomEDID" "CRT-0:/sys/class/drm/card0-LVDS-1/edid"
	Option		"IgnoreEDID" "false"
	Option		"UseEDID" "true"
EndSection

Xorg が起動しない場合は、CRT という文字列を全て DFB に置き換えてみて下さい。card0 は intel カードの識別子でディスプレイは LVDS で接続されています。edid バイナリはこのディレクトリに存在します。ハードウェアの構成が異なっている場合、CustomEDID の値も変わってくるので確認するようにしてください。パスの先頭の /sys/class/drm は変わらないはずです。

または、read-edid などのツールを使って edid を自分で作成して、作成したファイルを使うようにドライバーを設定することもできます。modeline も使えますが、"UseEDID" と "IgnoreEDID" は変更するようにしてください。

Wrong resolution without EDID errors

Using nvidia-xconfig, incorrect information might be generated in Xorg.conf and in particular wrong monitor refresh rates that restruct the possible resolutions. Try commenting out the HorizSync/VertRefresh lines. If this helps, you can probably also remove everything else not mentioned in this article.

ロックアップ問題 (lspci がフリーズ)

GTX 965M が搭載された最新のノートパソコンで (Bumblebee などで) bbswitch や nouveau を使ったときに lspci がフリーズしたり、サスペンドが失敗したり、シャットダウン時に止まってしまったり、optirun でフリーズが発生することがあります。

dGPU 電源リソースがオンになっている場合、ACPI コードで失敗してフリーズが起こることがあります (カーネルバグ 156341)。

解決方法については こちら を見てください。また、acpi_osi="!Windows 2015"acpi_osi=! acpi_osi="Windows 2009"カーネルパラメータに追加して起動することで解決することもあります。

No screens found on a laptop/NVIDIA Optimus

Check if $ lspci | grep VGA outputs something similar to:

00:02.0 VGA compatible controller: Intel Corporation Core Processor Integrated Graphics Controller (rev 02)
01:00.0 VGA compatible controller: nVidia Corporation Device 0df4 (rev a1)

NVIDIA drivers now offer Optimus support since 319.12 Beta [2] with kernels above and including 3.9.

Another solution is to install the Intel driver to handle the screens, then if you want 3D software you should run them through Bumblebee to tell them to use the NVIDIA card.

切り替え可能なグラフィックスを使用

PRIME レンダリングオフロードを使用する

これは、切り替え可能なグラフィックスをサポートする公式の NVIDIA メソッドです。

詳細については、 PRIME#PRIME render offload を参照してください。

nouveau を使う

グラフィックスイッチングについては PRIME を、オープンソースの NVIDIA ドライバについては nouveau を参照してください。

Bumblebee を使用

Bumblebee を参照してください。

nvidia-xrun を使用する

nvidia-xrun を参照してください。

optimus-managerを使用する

Optimus-manager アップストリームのドキュメントを参照してください。Arch Linux システムでのインストールと設定の両方について説明します。