「NVIDIA Optimus」の版間の差分
(→いくつかの方法: 同期) |
(→インテルのグラフィックスのみを使用: 同期) |
||
35行目: | 35行目: | ||
{{Note|これらのオプションはすべて相互に排他的です。1つの方法をテストして別の方法を選択する場合は、別の方法を試行する前に、1つの方法に従って行われた構成変更を必ず元に戻す必要があります。そうしないと、ファイルの競合や未定義の動作が発生する可能性があります。}} |
{{Note|これらのオプションはすべて相互に排他的です。1つの方法をテストして別の方法を選択する場合は、別の方法を試行する前に、1つの方法に従って行われた構成変更を必ず元に戻す必要があります。そうしないと、ファイルの競合や未定義の動作が発生する可能性があります。}} |
||
− | == |
+ | == 内蔵グラフィックスのみを使う == |
− | 特定の GPU のみ |
+ | GPU を切り替えることに興味はなく、特定の GPU のみを使いたい場合は、システムの BIOS で関連するオプションを確認してください。いずれかのカードを無効にするオプションがあるはずです。ラップトップによっては、ディスクリートカードを有効化したり無効化したりしかできないことがあります。とはいえ、どれかのカードだけを使用する予定であるかを確認することは、損ではありません。 |
− | BIOS |
+ | BIOS で Nvidia グラフィックスを無効にできない場合は、Linux カーネル自体から無効にできます。[[ハイブリッドグラフィック#ディスクリート GPU の完全な電源オフ]] を参照してください。 |
− | === レンダリングプロバイダを切り替えずに CUDA を使 |
+ | === レンダリングプロバイダを切り替えずに CUDA を使う === |
− | CUDA は、NVIDIA グラフィックスにレンダリングを切り替えることなく使用できます。CUDA アプリケーションを起動する前に、NVIDIA カードの電源が入っていることを確認するだけです。詳細については、 |
+ | CUDA は、NVIDIA グラフィックスにレンダリングを切り替えることなく使用できます。CUDA アプリケーションを起動する前に、NVIDIA カードの電源が入っていることを確認するだけです。詳細については、[[ハイブリッドグラフィック#ディスクリート GPU の完全な電源オフ]] を参照してください。 |
− | これで、CUDA アプリケーションを起動すると、必要なすべてのカーネルモジュールが自動的にロードされます。CUDA の使用後に NVIDIA カードの電源を切る前に、まず {{ic|nvidia}} カーネルモジュールをアンロードする必要があります |
+ | これで、CUDA アプリケーションを起動すると、必要なすべてのカーネルモジュールが自動的にロードされます。CUDA の使用後に NVIDIA カードの電源を切る前に、まず {{ic|nvidia}} カーネルモジュールをアンロードする必要があります: |
− | #rmmod nvidia_uvm |
+ | # rmmod nvidia_uvm |
− | #rmmod |
+ | # rmmod nvidia |
== nvidia グラフィックのみを使用 == |
== nvidia グラフィックのみを使用 == |
2023年6月16日 (金) 17:46時点における版
NVIDIA Optimus は、内蔵 GPU とディスクリート NVIDIA GPU をノート PC に組み込み、さらにノート PC からアクセスできるようにする技術です。
利用可能な方法
複数の方法が利用できます:
- #内蔵グラフィックスのみを使う - NVIDIA GPU は完全に電源オフになるので、消費電力を削減できます。
- #NVIDIA グラフィックスのみを使う - 内蔵グラフィックスよりも優れたパフォーマンスを発揮します。ただし、より多くの電力を消費します (これはモバイル端末においては喜ばしいことではありません)。この方法は、optimus-manager と nvidia-xrun と同じ基本プロセスを利用しており、より自動化されたアプローチを取る前にトラブルシューティングや一般的な機能検証のためにこの方法を利用するべきです。
- 両方を使う (必要なときに NVIDIA GPU を使用し、それ以外のときは電源を落として電力を節約する):
- #PRIME render offload を使う - NVIDIA が公式にサポートしている方法です。
- #optimus-manager を使う - 1つのコマンドでグラフィックスを切り替えます (適用させるにはログインし直さなければなりません)。NVIDIA GPU の性能を最大限に引き出し、使用していない場合はオフにします。1.4 リリース以降では、AMD と NVIDIA の組み合わせもサポートされています。
- #nvidia-xrun を使う - NVIDIA グラフィックスを使用して別の TTY で別の X セッションを実行します。NVIDIA GPU の性能を最大限に引き出し、使用していない場合はオフにします。
- #Bumblebee を使う - 指定したアプリケーションに対しては NVIDIA グラフィックスを使用し、その他のアプリケーションに対しては Intel グラフィックスを使えるようにすることで、Windows ライクな機能を提供します。しかし、重大なパフォーマンスの問題を抱えています。
- #switcheroo-control を使う - Bumblebee と似ていますが、特に GNOME ユーザ向けです。デスクトップエントリ内で専用 GPU を優先するかどうかを指定できるようになり、さらに右クリックメニューから手動で NVIDIA GPU でアプリケーションを実行できるようになります。
- #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 を切り替えることに興味はなく、特定の GPU のみを使いたい場合は、システムの BIOS で関連するオプションを確認してください。いずれかのカードを無効にするオプションがあるはずです。ラップトップによっては、ディスクリートカードを有効化したり無効化したりしかできないことがあります。とはいえ、どれかのカードだけを使用する予定であるかを確認することは、損ではありません。
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.