NVIDIA/ヒントとテクニック
目次
ターミナルの解像度を修正する
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.conf
で ConnectToAcpid
オプションを無効にすることでメッセージを消すことができます:
Section "Device" ... Driver "nvidia" Option "ConnectToAcpid" "0" ... EndSection
ノートパソコンを使っている場合、acpid デーモンをインストールして有効化することを推奨します。
GPU の温度をシェルに表示する
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 になります。
rrdtool
や conky
などのユーティリティで使うために温度だけを表示したいときは:
$ 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
rrdtool
や conky
などのユーティリティで使うために温度だけを取得したいときは:
$ nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits
52
nvclock
たまに nvclock と nvidia-settings/nv-control が報告する温度が食い違うことがあります。nvclock の作者 (thunderbird) による この投稿 によると、nvclock の値のほうが正確なようです。
ログイン時にファンの速度を設定する
nvidia-settings' のコンソールインターフェイスを使ってグラフィックカードのファンの速度を調整することができます。まずは Xorg 設定の Device
セクションで Coolbits オプションを 4
か 5
、または 12
(fermi 以上) に設定してファンコントロールを有効にしてください:
Option "Coolbits" "4"
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" &
GDM や KDM などのログインマネージャを使用している場合、デスクトップエントリファイルを作成して設定をさせることもできます。~/.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
手動設定
設定ファイルを編集することで (自動設定や 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"
輝度調整を有効にする
Device
セクションの下に追加してください:
Option "RegistryDwords" "EnableBrightnessControl=1"
上記のオプションで輝度のコントロールが機能しない場合、nvidia-blAUR または nvidiablAUR をインストールしてください。
SLI を有効にする
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"
使用したい 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.
オーバークロックを有効にする
GPU やメモリのオーバークロックは Device
セクションの Coolbits オプションによって制御され、サポートされない機能が使えるようになります:
Option "Coolbits" "value"
Coolbits の値は2進法でビットを立てた合計になります。それぞれのビットの意味は:
1
(ビット 0) - (Fermi 以前の) 古いコアで nvidia-settings の Clock Frequencies ページからオーバークロックできるようになります。2
(ビット 1) - このビットが設定されると、ドライバーは GPU を使う際に様々な量のビデオメモリで SLI を初期化しようとします。4
(ビット 2) - GPU のファンの速度の手動設定が nvidia-settings の Thermal Monitor ページで可能になります。8
(ビット 3) - Fermi 以降の新しいコアで nvidia-settings の PowerMizer ページからオーバークロックできるようになります。バージョン 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 のドキュメントはオンラインで こちら から見ることができます。
静的な 2D/3D クロックを設定する
以下の文字列を Device
セクションに設定すると PowerMizer がパフォーマンス最高レベルで有効になります (この行がないと VSync が動作しません):
Option "RegistryDwords" "PerfLevelSrc=0x2222"