NVIDIA Optimus
NVIDIA Optimus は、内蔵 GPU とディスクリート NVIDIA GPU をノート PC に組み込み、さらにノート PC からアクセスできるようにする技術です。
いくつかの方法
- インテルのグラフィックスのみを使用 -NVIDIA GPU の電源は完全にオフになるため、消費電力を節約できます。
- nvidia グラフィックのみを使用 -インテルグラフィックスよりもパフォーマンスは向上しますが、より多くのバッテリを消費します (モバイルデバイスには適していません) 。これは、 optimus-manager および nvidia-xrun オプションと同じ基本プロセスを利用しており、より自動化されたアプローチの1つを選択する前に、一般的な機能のトラブルシューティングおよび検証する必要があります。
- 両方を使用する (必要に応じて NVIDIA GPU を使用し、電源を切ったままにして電力を節約する) :
- #PRIME レンダリングオフロードを使用する -NVIDIA が公式にサポートしている方法です。
- #optimus-manager を使用する -1つのコマンドでグラフィックスを切り替えます (有効にするにはログアウトとログインが必要です) NVIDIA GPU の性能を最大限に引き出し、使用していない場合はオフにします。1.4リリース以降では、AMD と NVIDIA の組み合わせもサポートされています。
- #nvidia-xrun を使用する -NVIDIA グラフィックスを使用して別の TTY で別の X セッションを実行します。NVIDIA GPU の性能を最大限に引き出し、使用していない場合はオフにします。
- #Bumblebee を使用 -インテルのグラフィックスを他のすべてのものに使用しながら、選択したアプリケーションをNVIDIA のグラフィックスで実行できるようにすることで、Windows に似た機能を提供します。しかし、パフォーマンスに重大な問題があります。
- #nouveau を使う -独自の NVIDIA ドライバと比較してパフォーマンスが低く、スリープと休止状態で問題が発生する可能性があります。最新の NVIDIA GPU では動作しません。
- #EnvyControl を使用する - optimus-manager と同様な方法ですが、大量な設定なしで使えます。またバックグラウンドでデーモンを実行する必要もなく、GNOME ユーザーであっても GDM のパッチバージョンをインストールする必要もありません。
- #NVidia-eXec を使用する - Bumblebee と同様ですが、パフォーマンス低下の問題の影響はありません。Xorg と Wayland で動作します。ただし、この手法はまだ実験段階で、GNOME/GDM の環境下でのみテストされているだけです。
- #nvidia-switch を使用する - nvidia-xrun と同様な手法ですが、TTY を変更する必要がありません。切替はディスプレイマネージャ下でのログインとログアウトによって行われます。しかしながら、このパッケージは Debian ライクなシステムでのみテストされているだけです。とはいっても、nvidia-xrun と同様、他の Linux システム全てで動作するはずです。
インテルのグラフィックスのみを使用
特定の GPU のみに切り替えずに使用する場合は、システムの BIOS でオプションを確認してください。いずれかのカードを無効にするオプションがあるはずです。ラップトップによっては、個別のカードを無効にすることしかできない場合や、その逆の場合がありますが、カードのうちの1つだけを使用する予定があるかどうかを確認してください。
BIOS が Nvidia グラフィックスを無効にできない場合は、Linux カーネル自体から無効にできます。ハイブリッドグラフィック#ディスクリート GPU の完全な電源オフ を参照してください。
レンダリングプロバイダを切り替えずに CUDA を使用
CUDA は、NVIDIA グラフィックスにレンダリングを切り替えることなく使用できます。CUDA アプリケーションを起動する前に、NVIDIA カードの電源が入っていることを確認するだけです。詳細については、 ハイブリッドグラフィック#ディスクリート GPU の完全な電源オフ を参照してください。
これで、CUDA アプリケーションを起動すると、必要なすべてのカーネルモジュールが自動的にロードされます。CUDA の使用後に NVIDIA カードの電源を切る前に、まず nvidia
カーネルモジュールをアンロードする必要があります。
#rmmod nvidia_uvm #rmmod NVIDIA
nvidia グラフィックのみを使用
プロプライエタリの NVIDIA ドライバーは nouveau ドライバーのような動的な切り替えはサポートしていません (つまり NVIDIA デバイスしか使用できません)。また、NVIDIA は画面にティアリングが発生する問題を認識していますが未だに修正がなされていません。そのかわり、ディスクリート GPU を利用して nouveau ドライバーよりも高い性能を発揮することができます (2017年1月現在)。
まず nvidia と xorg-xrandr パッケージをインストールしてください。
そして、xorg.conf
を設定します。NVIDIA カードの PCI アドレスを知る必要があるので、次のコマンドを実行してください:
$ lspci | grep -E "VGA|3D"
NVIDIA と書かれた行の最初の7文字が PCI アドレスです。例えば 01:00.0
などと表記されます。xorg.conf
では #:#:#
という形式で表記する必要があります。例えば 01:00.0
の場合 1:0:0
となります。
/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] を見て下さい。
切り替え可能なグラフィックスを使用
PRIME レンダリングオフロードを使用する
これは、切り替え可能なグラフィックスをサポートする公式の NVIDIA メソッドです。
詳細については、 PRIME#PRIME render offload を参照してください。
nouveau を使う
グラフィックスイッチングについては PRIME を、オープンソースの NVIDIA ドライバについては nouveau を参照してください。
Bumblebee を使用
Bumblebee を参照してください。
nvidia-xrun を使用する
nvidia-xrun を参照してください。
optimus-manager を使用する
Optimus-manager アップストリームのドキュメントを参照してください。Arch Linux システムでのインストールと設定の両方の説明があります。
EnvyControl を使用する
アップストリームのドキュメント EnvyControl を参照してください。インストール方法と使い方の説明があります。
NVidia-eXec を使用する
アップストリームのドキュメント NVidia-eXec を参照してください。インストール方法と使い方の説明があります。
nvidia-switch を使用する
アップストリームのドキュメント nvidia-switch を参照してください。インストール方法と使い方の説明があります。
トラブルシューティング
垂直同期が機能せずティアリングが発生する
解決するには 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.