NVIDIA/ヒントとテクニック

提供: ArchWiki
2017年10月12日 (木) 23:29時点におけるKusakata (トーク | 投稿記録)による版 (同期)
ナビゲーションに移動 検索に移動

ターミナルの解像度を修正する

nouveau からドライバーを変えた場合、起動時のターミナルが低解像度で表示されるようになることがあります。GRUB を使用している場合、GRUB/ヒントとテクニック#フレームバッファの解像度を設定するを見てください。

TV 出力を使う

TV 出力については こちら に良い記事があります。

X で TV (DFP) を唯一のディスプレイとして使う

モニターが検出されないと X サーバーは自動的に CRT-0 にフォールバックします。これは DVI で接続した TV をメインディスプレイとして使っている際、TV の電源がオフになっていたり切断されているのに X を起動したときに問題になります。

NVIDIA に強制的に DFP を使わせるには、EDID のコピーをファイルシステムのどこかに保存して TV/DFP の EDID のかわりに X が保存したファイルを読み込むようにしてください。

EDID を取得するには、nvidia-settings を起動します。ツリー形式で情報が表示されますが、今は設定は無視して GPU を選択し ("GPU-0" などという名前が付いているエントリを選択してください)、DFP セクションをクリックして (例: DFP-0)、Acquire Edid ボタンをクリックしてファイルをどこかに保存してください (例: /etc/X11/dfp0.edid)。

フロントエンドにマウスやキーボードが接続されていない場合、コマンドラインを使って EDID を取得することもできます。EDID ブロックも出力するように引数を指定して X サーバーを起動します:

$ startx -- -logverbose 6

X サーバーの初期化が完了したら、サーバーを閉じて /var/log/Xorg.0.log にログファイルがあるか確認してください。nvidia-xconfig を使って EDID ブロックを抽出できます:

$ nvidia-xconfig --extract-edids-from-file=/var/log/Xorg.0.log --extract-edids-output-file=/etc/X11/dfp0.bin

xorg.conf を編集して Device セクションに以下を追加:

Option "ConnectedMonitor" "DFP"
Option "CustomEDID" "DFP-0:/etc/X11/dfp0.edid"

ConnectedMonitor オプションはドライバーに強制的に DFP を認識させます。CustomEDID にはデバイスの EDID データを指定してください。TV/DFP が接続されているかのように X が起動するようになります。

ブート時に自動的にディスプレイマネージャを起動して適切な X ディスプレイが設定されてから TV の電源を入れることができます。

上記の変更でうまくいかない場合、xorg.conf の中の Device セクションで Option "ConnectedMonitor" "DFP" を削除して以下の行を追加してみてください:

Option "ModeValidation" "NoDFPNativeResolutionCheck"
Option "ConnectedMonitor" "DFP-0"

NoDFPNativeResolutionCheck を設定することで NVIDIA はネイティブ解像度に適合しないモードも無効化しなくなります。

電源を確認

NVIDIA の X.org ドライバーを使って GPU の現在の電源を検出することもできます。現在の電源を表示するには、読み取り専用パラメータの 'GPUPowerSource' をチェックしてください (0 - AC, 1 - バッテリー):

$ nvidia-settings -q GPUPowerSource -t
1

ACPI イベントを Listen する

NVIDIA ドライバーは自動的に acpid デーモンに接続して、バッテリー電源やドッキング、ホットキーなどの ACPI イベントを listen します。接続が失敗した場合、X.org は以下のような警告を出力します:

~/.local/share/xorg/Xorg.0.log
NVIDIA(0): ACPI: failed to connect to the ACPI event daemon; the daemon
NVIDIA(0):     may not be running or the "AcpidSocketPath" X
NVIDIA(0):     configuration option may not be set correctly.  When the
NVIDIA(0):     ACPI event daemon is available, the NVIDIA X driver will
NVIDIA(0):     try to use it to receive ACPI event notifications.  For
NVIDIA(0):     details, please see the "ConnectToAcpid" and
NVIDIA(0):     "AcpidSocketPath" X configuration options in Appendix B: X
NVIDIA(0):     Config Options in the README.

上記の警告は完全に無害ですが、/etc/X11/xorg.conf.d/20-nvidia.confConnectToAcpid オプションを無効にすることでメッセージを消すことができます:

Section "Device"
  ...
  Driver "nvidia"
  Option "ConnectToAcpid" "0"
  ...
EndSection

ノートパソコンを使っている場合、acpid デーモンをインストールして有効化することを推奨します。

GPU の温度をシェルに表示する

GPU の温度を確認する方法は3つあります。nvidia-settings は X を使用する必要があります。X を使っていない場合は nvidia-sminvclock による方法を使って下さい。また、nvclock は GeForce 200 シリーズのカードや Zotac IONITX の 8800GS などの内蔵 GPU など新しい NVIDIA カードでは機能しません。

nvidia-settings

GPU の温度をシェルに表示するには、以下のように nvidia-settings を使って下さい:

$ nvidia-settings -q gpucoretemp

このコマンドを使うと以下のように出力されます:

Attribute 'GPUCoreTemp' (hostname:0.0): 41.
'GPUCoreTemp' is an integer attribute.
'GPUCoreTemp' is a read-only attribute.
'GPUCoreTemp' can use the following target types: X Screen, GPU.

上記の場合、ボードの GPU 温度は 41 C になります。

rrdtoolconky などのユーティリティで使うために温度だけを表示したいときは:

$ nvidia-settings -q gpucoretemp -t
41

nvidia-smi

X を全く使わず GPU から直接温度を読み込むことができる nvidia-smi を使います。サーバーマシンの場合や Wayland を使っている場合はこちらの方法を推奨します。GPU の温度をシェルに表示するには、以下のように nvidia-smi を使って下さい:

$ nvidia-smi

このコマンドを使うと以下のように出力されます:

$ nvidia-smi
Fri Jan  6 18:53:54 2012       
+------------------------------------------------------+                       
| NVIDIA-SMI 2.290.10   Driver Version: 290.10         |                       
|-------------------------------+----------------------+----------------------+
| Nb.  Name                     | Bus Id        Disp.  | Volatile ECC SB / DB |
| Fan   Temp   Power Usage /Cap | Memory Usage         | GPU Util. Compute M. |
|===============================+======================+======================|
| 0.  GeForce 8500 GT           | 0000:01:00.0  N/A    |       N/A        N/A |
|  30%   62 C  N/A   N/A /  N/A |  17%   42MB /  255MB |  N/A      Default    |
|-------------------------------+----------------------+----------------------|
| Compute processes:                                               GPU Memory |
|  GPU  PID     Process name                                       Usage      |
|=============================================================================|
|  0.           ERROR: Not Supported                                          |
+-----------------------------------------------------------------------------+

温度だけ見るには:

$ nvidia-smi -q -d TEMPERATURE

====NVSMI LOG====

Timestamp                           : Sun Apr 12 08:49:10 2015
Driver Version                      : 346.59

Attached GPUs                       : 1
GPU 0000:01:00.0
    Temperature
        GPU Current Temp            : 52 C
        GPU Shutdown Temp           : N/A
        GPU Slowdown Temp           : N/A

rrdtoolconky などのユーティリティで使うために温度だけを取得したいときは:

$ nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits
52

参照: http://www.question-defense.com/2010/03/22/gpu-linux-shell-temp-get-nvidia-gpu-temperatures-via-linux-cli

nvclock

AUR から利用できる nvclockAUR を使います。

ノート: nvclock は Geforce 200 シリーズなどの新しい NVIDIA カードの温度センサーにはアクセスできません。

たまに nvclock と nvidia-settings/nv-control が報告する温度が食い違うことがあります。nvclock の作者 (thunderbird) による この投稿 によると、nvclock の値のほうが正確なようです。

ログイン時にファンの速度を設定する

nvidia-settings' のコンソールインターフェイスを使ってグラフィックカードのファンの速度を調整することができます。まずは Xorg 設定の Device セクションで Coolbits オプションを 45、または 12 (fermi 以上) に設定してファンコントロールを有効にしてください:

Option "Coolbits" "4"
ノート: GeForce 400/500 シリーズのカードではこの方法を使ってログイン時にファンの速度を設定することはできません。

Xorg が起動した時にファンを調整するには以下の行を xinitrc ファイルに記述します。n は設定したいファンの速度のパーセンテージに置き換えて下さい。

nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=n"

GPU とファンの番号を増やすことで二番目の GPU を設定することもできます。

nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=n" \
                -a "[gpu:1]/GPUFanControlState=1" -a  [fan:1]/GPUCurrentFanSpeed=n" &

GDMKDM などのログインマネージャを使用している場合、デスクトップエントリファイルを作成して設定をさせることもできます。~/.config/autostart/nvidia-fan-speed.desktop を作成してその中に以下のテキストを入力してください。n は速度のパーセンテージに置き換えて下さい。

[Desktop Entry]
Type=Application
Exec=nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=n"
X-GNOME-Autostart-enabled=true
Name=nvidia-fan-speed
ノート: ドライバーのバージョン 349.16 から、GPUCurrentFanSpeedGPUTargetFanSpeed に置き換わっています [1]

複数のグラフィックカードのファン速度を調整できるようにしたい場合、以下のコマンドを実行:

$ nvidia-xconfig --enable-all-gpus
$ nvidia-xconfig --cool-bits=4

手動設定

設定ファイルを編集することで (自動設定GUI では有効にできない) 設定を変更することができます。変更を反映するには Xorg サーバーを再起動させる必要があります。

オプションの詳しい説明は NVIDIA Accelerated Linux Graphics Driver README and Installation Guide を見てください。

起動時のロゴを無効にする

Device セクションの下に "NoLogo" オプションを追加してください:

Option "NoLogo" "1"

モニターの検出を上書きする

Device セクションの下に "ConnectedMonitor" オプションを追加することで X サーバーの起動時のモニター検出を上書きすることができます。それによって起動時間を大幅に早くすることが可能です。利用可能なオプション: "CRT" (アナログ接続), "DFP" (デジタルモニター), "TV" (テレビ)。

以下の設定をすることで NVIDIA ドライバーは起動時のチェックを迂回しモニターを DFP と認識します:

Option "ConnectedMonitor" "DFP"
ノート: ディスプレイがフラットパネルだとしても15ピンの VGA 接続をしている場合は "CRT" を使ってください。"DFP" は DVI, HDMI, DisplayPort などのデジタル接続で使用します。

輝度調整を有効にする

Device セクションの下に追加してください:

Option "RegistryDwords" "EnableBrightnessControl=1"

上記のオプションで輝度のコントロールが機能しない場合、nvidia-blAUR または nvidiablAUR をインストールしてください。

ノート: nvidia-blAUR または nvidiablAUR のどちらかをインストールすると /sys/class/backlight/nvidia_backlight/ インターフェイスでバックライトの明るさを制御できるようになりますが、依然としてシステムが /sys/class/backlight/acpi_video0/ でバックライトの制御をしようとするかもしれません。そのような場合、inotifywait などで acpi_video0/brightness を監視して、変化があったら nvidia_backlight/brightness に値を書き込むようにしてください。バックライト#sysfs を変更しても明るさが変更されないを参照。

SLI を有効にする

警告:
  • 2011年5月7日現在、SLI を有効にすると GNOME 3 で動画パフォーマンスが落ちます。
  • GTX 10xx シリーズ (1080, 1070, 1060 など) では 2-way SLI しか対応していません。CUDA/OpenCL アプリケーションでは 3-way や 4-way の SLI をすることもできますが、OpenGL アプリケーションでは大抵の場合上手く行きません。

NVIDIA ドライバーの README の Appendix B より: このオプションはサポートされている環境で SLI レンダリングの設定をコントロールします。「サポートされている環境」とは SLI 対応のマザーボードを搭載し SLI 対応の GeForce GPU が2枚か3枚刺さっているコンピューターのことです。詳しくは NVIDIA の SLI Zone を見て下さい。

まず lspci を使って一番目の GPU の PCI Bus ID を確認してください:

$ lspci | grep VGA
03:00.0 VGA compatible controller: nVidia Corporation G92 [GeForce 8800 GTS 512] (rev a2)
05:00.0 VGA compatible controller: nVidia Corporation G92 [GeForce 8800 GTS 512] (rev a2)

Device セクションの下に BusID を追加してください (上記の例では3):

BusID "PCI:3:0:0"
ノート: 指定するときの形式は重要です。BusID の値は "PCI:<BusID>:0:0" と指定してください。

使用したい SLI レンダリングモードの値を Screen セクションの下に追加してください:

Option "SLI" "AA"

以下の表は利用できるレンダリングモードを示しています。

挙動
0, no, off, false, Single レンダリングの際には単一の GPU だけを使用。
1, yes, on, true, Auto SLI を有効にしてドライバーに適切なレンダリングモードを自動で選択させる。
AFR SLI を有効にして alternate フレームレンダリングモードを使用する。
SFR SLI を有効にして split フレームレンダリングモードを使用する。
AA SLI を有効にして SLI アンチエイリアスを使用する。これをフルシーンアンチエイリアスと一緒に使うことで見栄えが良くなります。

もしくは、nvidia-xconfig ユーティリティを使って、コマンドによって xorg.conf に変更を挿入することもできます:

# nvidia-xconfig --busid=PCI:3:0:0 --sli=AA

シェルから SLI モードが有効になっているか確認するには:

$ nvidia-settings -q all | grep SLIMode
  Attribute 'SLIMode' (arch:0.0): AA 
    'SLIMode' is a string attribute.
    'SLIMode' is a read-only attribute.
    'SLIMode' can use the following target types: X Screen.
警告: SLI を有効にした後、xorg の起動時にシステムがフリーズしたり反応しなくなることがあります。再起動する前にディスプレイマネージャを無効にすることを推奨します。

オーバークロックを有効にする

警告: オーバークロックはハードウェアにダメージを与える可能性があり、このページの著者はメーカーによって決められた仕様の範囲外で製品を扱うことについて何も責任を負えないので注意してください。

GPU やメモリのオーバークロックは Device セクションの Coolbits オプションによって制御され、サポートされない機能が使えるようになります:

Option "Coolbits" "value"
ヒント: Coolbits オプションは Xorg の設定ファイルを変更する nvidia-xconfig で簡単に変えることができます: # nvidia-xconfig --cool-bits=value

Coolbits の値は2進法でビットを立てた合計になります。それぞれのビットの意味は:

  • 1 (ビット 0) - (Fermi 以前の) 古いコアで nvidia-settingsClock Frequencies ページからオーバークロックできるようになります。
  • 2 (ビット 1) - このビットが設定されると、ドライバーは GPU を使う際に様々な量のビデオメモリで SLI を初期化しようとします。
  • 4 (ビット 2) - GPU のファンの速度の手動設定が nvidia-settingsThermal Monitor ページで可能になります。
  • 8 (ビット 3) - Fermi 以降の新しいコアで nvidia-settingsPowerMizer ページからオーバークロックできるようになります。バージョン 337.12 から使えるようになりました [2]
  • 16 (ビット 4) - Fermi 以降の新しいコアで nvidia-settings の CLI オプションを使って電圧アップができるようになります。バージョン 346.16 から使えるようになりました [3]

複数の機能を有効にするには、合計した Coolbits の値を追加します。例えば、オーバークロックと Fermi コアの電圧アップを有効にするには、Option "Coolbits" "24" と設定します。

Coolbits のドキュメントは /usr/share/doc/nvidia/html/xconfigoptions.html にあります。Coolbits に関するドライバーバージョン 355.11 のドキュメントはオンラインで こちら から見ることができます。

ノート: An alternative is to edit and reflash the GPU BIOS either under DOS (preferred), or within a Win32 environment by way of nvflash[リンク切れ 2013-05-25] and NiBiTor 6.0[リンク切れ 2013-05-25]. The advantage of BIOS flashing is that not only can voltage limits be raised, but stability is generally improved over software overclocking methods such as Coolbits. Fermi BIOS modification tutorial

静的な 2D/3D クロックを設定する

以下の文字列を Device セクションに設定すると PowerMizer がパフォーマンス最高レベルで有効になります (この行がないと VSync が動作しません):

Option "RegistryDwords" "PerfLevelSrc=0x2222"