NVIDIA/ヒントとテクニック

提供: ArchWiki
2016年8月13日 (土) 23:58時点におけるKusakata (トーク | 投稿記録)による版 (ページの作成:「Category:グラフィック Category:X サーバー en:NVIDIA/Tips and tricks ru:NVIDIA/Tips and tricks == ターミナルの解像度を修正する ==...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

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

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

TV 出力を使う

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

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

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

To force NVIDIA to use DFP, store a copy of the EDID somewhere in the filesystem so that X can parse the file instead of reading EDID from the TV/DFP.

To acquire the EDID, start nvidia-settings. It will show some information in tree format, ignore the rest of the settings for now and select the GPU (the corresponding entry should be titled "GPU-0" or similar), click the DFP section (again, DFP-0 or similar), click on the Acquire Edid Button and store it somewhere, for example, /etc/X11/dfp0.edid.

If in the front-end mouse and keyboard are not attached, the EDID can be acquired using only the command line. Run an X server with enough verbosity to print out the EDID block:

$ startx -- -logverbose 6

After the X Server has finished initializing, close it and your log file will probably be in /var/log/Xorg.0.log. Extract the EDID block using nvidia-xconfig:

$ 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"

The ConnectedMonitor option forces the driver to recognize the DFP as if it were connected. The CustomEDID provides EDID data for the device, meaning that it will start up just as if the TV/DFP was connected during X the process.

This way, one can automatically start a display manager at boot time and still have a working and properly configured X screen by the time the TV gets powered on.

If the above changes did not work, in the xorg.conf under Device section you can try to remove the Option "ConnectedMonitor" "DFP" and add the following lines:

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

The NoDFPNativeResolutionCheck prevents NVIDIA driver from disabling all the modes that do not fit in the native resolution.

電源を確認

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 の温度をシェルに表示する

nvidia-settings

ノート: この方法では X を使用する必要があります。X を使っていない場合は下の方法を使って下さい。また、GeForce 200 シリーズのカードや Zotac IONITX の 8800GS などの内蔵 GPU など新しい NVIDIA カードでは機能しません。

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 を使います。サーバーなど、マシンで X を動かしていないユーザーにはこちらが重要でしょう。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]

手動設定

設定ファイルを編集することで (自動設定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 をインストールしてください。

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"