「NVIDIA/ヒントとテクニック」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(「Preserve video memory after suspend」を追加)
(同期)
 
(同じ利用者による、間の32版が非表示)
3行目: 3行目:
 
[[en:NVIDIA/Tips and tricks]]
 
[[en:NVIDIA/Tips and tricks]]
 
[[ru:NVIDIA/Tips and tricks]]
 
[[ru:NVIDIA/Tips and tricks]]
  +
メインの記事は [[NVIDIA]] です。
  +
 
== ターミナルの解像度を修正する ==
 
== ターミナルの解像度を修正する ==
   
9行目: 11行目:
 
GRUB を使用している場合、[[GRUB/ヒントとテクニック#フレームバッファの解像度を設定する]]を見てください。
 
GRUB を使用している場合、[[GRUB/ヒントとテクニック#フレームバッファの解像度を設定する]]を見てください。
   
[[systemd-boot]] を使用している場合、{{ic|''esp''/EFI/loader/loader.conf}} 内で {{ic|console-mode}} を設定してください。詳しくは [[systemd-boot#ローダー設定]] をご覧ください。
+
[[systemd-boot]] を使用している場合、{{ic|''esp''/EFI/loader/loader.conf}} 内で {{ic|console-mode}} を設定してください。詳しくは [[systemd-boot#ローダー設定]] をご覧ください。[https://forums.fedoraforum.org/showthread.php?t=306271] [https://web.archive.org/web/20170405115954/https://www.reddit.com/r/archlinux/comments/4gwukx/nvidia_drivers_and_high_resolution_tty_possible/]
   
[[rEFInd]] を使用している場合、{{ic|''esp''/EFI/refind/refind.conf}} と {{ic|/etc/refind.d/refind.conf}} に以下を追加してください(後者のファイルは任意ですが、両方に追加することを推奨します):
+
[[rEFInd]] を使用している場合、{{ic|''esp''/EFI/refind/refind.conf}} と {{ic|/etc/refind.d/refind.conf}} に以下を追加してください(後者のファイルは任意ですが、両方に追加することを推奨します): [https://www.reddit.com/r/archlinux/comments/86lqc5/tty_resolution_nvidia_psaish/]
   
 
use_graphics_for linux
 
use_graphics_for linux
   
 
ちょっとした注意事項としては、これによりブート中にカーネルパラメータが表示されなくなります。
 
ちょっとした注意事項としては、これによりブート中にカーネルパラメータが表示されなくなります。
  +
  +
{{Tip|上記の方法でターミナルの解像度を修正できない場合、UEFI の設定で Legacy BIOS モード (しばしば、Compatibility Support Module、CSM、Legacy Boot と呼ばれます) を完全に無効化する必要があるかもしれません。無効化する前に、すべてのデバイスが UEFI ブートを使用するように設定されていることを確認してください。}}
   
 
== TV 出力を使う ==
 
== TV 出力を使う ==
   
  +
[[Wikibooks:NVIDIA/TV-OUT]] を見てください。
TV 出力については [http://en.wikibooks.org/wiki/NVidia/TV-OUT こちら] に良い記事があります。
 
   
 
== X で TV (DFP) を唯一のディスプレイとして使う ==
 
== X で TV (DFP) を唯一のディスプレイとして使う ==
   
モニターが検出されないX サーバーは自動的に CRT-0 にフォールバックします。これは DVI 接続した TV をメインディスプレイとして使ている際、TV の電源がオフになってい切断されているに X 起動したきに問題になります。
+
モニターが自動的に検出されない場合、X サーバーは CRT-0 にフォールバックします。これはDVI 接続 TV をメインディスプレイとして使用していTV がオフ切断されているときに X 起動すると問題になります。
  +
 
NVIDIA に強制的に DFP を使わせるには、EDID のコピーをファイルシステムのどこかに保存して TV/DFP EDID のかわり X が保存したファイルを読み込むようにしてください
+
強制的に NVIDIA が DFP を使用するようにするには、EDID のコピーをファイルシステムのどこかに保存して、X TV/DFP から EDID を読み込まずそのファイルをパースできるようにします
   
EDID を取得するには、nvidia-settings を起動します。ツリー形式で情報が表示されますが、今は設定は無視して GPU を選択し ("GPU-0" などという名前が付いていエントリを選択してください)、{{ic|DFP}} セクションをクリックして (例: {{ic|DFP-0}})、{{ic|Acquire Edid}} ボタンをクリックしてファイルをどこかに保存してください (例: {{ic|/etc/X11/dfp0.edid}})。
+
EDID を取得するには、nvidia-settings を起動します。ツリー形式で情報が表示されますが、今は設定は無視して GPU を選択し (対応するエントリは "GPU-0" などのよ名前であはずです)、{{ic|DFP}} セクションをクリックして ({{ic|DFP-0}} などのような名前です)、{{ic|Acquire Edid}} ボタンをクリックしてファイルをどこかに保存してください (例: {{ic|/etc/X11/dfp0.edid}})。
   
 
フロントエンドにマウスやキーボードが接続されていない場合、コマンドラインを使って EDID を取得することもできます。EDID ブロックも出力するように引数を指定して X サーバーを起動します:
 
フロントエンドにマウスやキーボードが接続されていない場合、コマンドラインを使って EDID を取得することもできます。EDID ブロックも出力するように引数を指定して X サーバーを起動します:
36行目: 40行目:
 
{{ic|xorg.conf}} を編集して {{ic|Device}} セクションに以下を追加:
 
{{ic|xorg.conf}} を編集して {{ic|Device}} セクションに以下を追加:
 
Option "ConnectedMonitor" "DFP"
 
Option "ConnectedMonitor" "DFP"
Option "CustomEDID" "DFP-0:/etc/X11/dfp0.edid"
+
Option "CustomEDID" "DFP-0:/etc/X11/dfp0.bin"
 
{{ic|ConnectedMonitor}} オプションはドライバーに強制的に DFP を認識させます。{{ic|CustomEDID}} にはデバイスの EDID データを指定してください。TV/DFP が接続されているかのように X が起動するようになります。
 
{{ic|ConnectedMonitor}} オプションはドライバーに強制的に DFP を認識させます。{{ic|CustomEDID}} にはデバイスの EDID データを指定してください。TV/DFP が接続されているかのように X が起動するようになります。
   
91行目: 95行目:
 
EndSection
 
EndSection
   
ノートパソコンを使っている場合、[[acpid]] デーモンをインストールして有効化するを推奨しま
+
ノートパソコンを使っている場合、代わりに [[acpid]] デーモンをインストールして有効化すると良いかもせん
   
 
== GPU の温度をシェルに表示する ==
 
== GPU の温度をシェルに表示する ==
99行目: 103行目:
 
=== nvidia-settings ===
 
=== nvidia-settings ===
   
GPU の温度をシェルに表示するには、以下のように {{ic|nvidia-settings}} を使って下さい:
+
GPU の温度をシェルに表示するには、以下のように ''nvidia-settings'' を使って下さい:
$ nvidia-settings -q gpucoretemp
 
   
  +
{{hc|$ nvidia-settings -q gpucoretemp|
このコマンドを使うと以下のように出力されます:
 
Attribute 'GPUCoreTemp' (hostname:0.0): 41.
+
Attribute 'GPUCoreTemp' (hostname:0[gpu:0]): 49.
'GPUCoreTemp' is an integer attribute.
+
'GPUCoreTemp' is an integer attribute.
'GPUCoreTemp' is a read-only attribute.
+
'GPUCoreTemp' is a read-only attribute.
'GPUCoreTemp' can use the following target types: X Screen, GPU.
+
'GPUCoreTemp' can use the following target types: GPU.
  +
}}
  +
  +
上記の場合、ボードの GPU 温度は 49 °C になります。
   
  +
''rrdtool'' や ''conky'' などのユーティリティで使うために温度だけを表示したいときは:
上記の場合、ボードの GPU 温度は 41 C になります。
 
   
  +
{{hc|$ nvidia-settings -q gpucoretemp -t|49}}
{{ic|rrdtool}} や {{ic|conky}} などのユーティリティで使うために温度だけを表示したいときは:
 
{{hc|$ nvidia-settings -q gpucoretemp -t|41}}
 
   
 
=== nvidia-smi ===
 
=== nvidia-smi ===
   
X を全く使わず GPU から直接温度を読み込むことができる nvidia-smi を使います。サーバーマシンの場合や [[Wayland]] を使っている場合はこちらの方法を推奨します。GPU の温度をシェルに表示するには、以下のように nvidia-smi を使って下さい:
+
X を全く使わず (例: Wayland を実行している場合やヘッドレスサーバの場合) GPU から直接温度を読み込むことができる ''nvidia-smi'' を使います。
   
  +
GPU の温度をシェルに表示するには、''nvidia-smi'' を使って下さい:
$ nvidia-smi
 
   
このコマンドを使うと以下のように出力されます:
 
 
{{hc|$ nvidia-smi|<nowiki>
 
{{hc|$ nvidia-smi|<nowiki>
  +
Wed Feb 28 14:27:35 2024
Fri Jan 6 18:53:54 2012
 
+------------------------------------------------------+
+
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 2.290.10 Driver Version: 290.10 |
+
| NVIDIA-SMI 550.54.14 Driver Version: 550.54.14 CUDA Version: 12.4 |
|-------------------------------+----------------------+----------------------+
+
|-----------------------------------------+------------------------+----------------------+
| Nb. Name | Bus Id Disp. | Volatile ECC SB / DB |
+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Power Usage /Cap | Memory Usage | GPU Util. Compute M. |
+
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
  +
| | | MIG 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 |
+
| 0 NVIDIA GeForce GTX 1660 Ti Off | 00000000:01:00.0 On | N/A |
  +
| 0% 49C P8 9W / 120W | 138MiB / 6144MiB | 2% Default |
|-------------------------------+----------------------+----------------------|
 
| Compute processes: GPU Memory |
+
| | | N/A |
  +
+-----------------------------------------+------------------------+----------------------+
| GPU PID Process name Usage |
 
  +
|=============================================================================|
 
  +
+-----------------------------------------------------------------------------------------+
| 0. ERROR: Not Supported |
 
  +
| Processes: |
+-----------------------------------------------------------------------------+
 
  +
| GPU GI CI PID Type Process name GPU Memory |
  +
| ID ID Usage |
  +
|=========================================================================================|
  +
| 0 N/A N/A 223179 G weston 120MiB |
  +
+-----------------------------------------------------------------------------------------+
 
</nowiki>}}
 
</nowiki>}}
   
 
温度だけ見るには:
 
温度だけ見るには:
{{hc|$ nvidia-smi -q -d TEMPERATURE|<nowiki>
 
   
  +
{{hc|$ nvidia-smi -q -d TEMPERATURE|2=
====NVSMI LOG====
 
  +
==============NVSMI LOG==============
   
Timestamp : Sun Apr 12 08:49:10 2015
+
Timestamp : Wed Feb 28 14:27:35 2024
Driver Version : 346.59
+
Driver Version : 550.54.14
  +
CUDA Version : 12.4
   
Attached GPUs : 1
+
Attached GPUs : 1
GPU 0000:01:00.0
+
GPU 00000000:01:00.0
 
Temperature
 
Temperature
GPU Current Temp : 52 C
+
GPU Current Temp : 49 C
GPU Shutdown Temp : N/A
+
GPU T.Limit Temp : N/A
GPU Slowdown Temp : N/A
+
GPU Shutdown Temp : 95 C
  +
GPU Slowdown Temp : 92 C
  +
GPU Max Operating Temp : 90 C
  +
GPU Target Temperature : 83 C
  +
Memory Current Temp : N/A
  +
Memory Max Operating Temp : N/A
  +
}}
   
  +
''rrdtool'' や ''conky'' などのユーティリティで使うために温度だけを取得したいときは:
</nowiki>}}
 
   
  +
{{hc|1=$ nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits|2=49}}
{{ic|rrdtool}} や {{ic|conky}} などのユーティリティで使うために温度だけを取得したいときは:
 
   
  +
=== nvclock ===
{{hc|<nowiki>$ nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits</nowiki>|52}}
 
   
  +
{{AUR|nvclock}} パッケージを[[インストール]]してください。
参照: http://www.question-defense.com/2010/03/22/gpu-linux-shell-temp-get-nvidia-gpu-temperatures-via-linux-cli
 
   
  +
{{Note|''nvclock'' は Geforce 200 シリーズなどの新しい NVIDIA カードの温度センサーにはアクセスできません。}}
=== nvclock ===
 
   
  +
たまに ''nvclock'' と ''nvidia-settings''/''nv-control'' が報告する温度が食い違うことがあります。''nvclock'' の作者 (thunderbird) による [https://sourceforge.net/projects/nvclock/forums/forum/67426/topic/1906899 この投稿] によると、''nvclock'' の値のほうが正確なようです。
[[Arch User Repository|AUR]] から利用できる {{AUR|nvclock}} を使います。
 
   
  +
== オーバークロックと冷却 ==
{{Note|{{ic|nvclock}} は Geforce 200 シリーズなどの新しい NVIDIA カードの温度センサーにはアクセスできません。}}
 
   
  +
=== オーバークロックを有効化する ===
たまに nvclock と nvidia-settings/nv-control が報告する温度が食い違うことがあります。nvclock の作者 (thunderbird) による [https://sourceforge.net/projects/nvclock/forums/forum/67426/topic/1906899 この投稿] によると、nvclock の値のほうが正確なようです。
 
   
  +
{{Warning| オーバークロックによってハードウェアに永久的な損傷が発生するかもしれません。警告しましたよ。}}
== ログイン時にファンの速度を設定する ==
 
   
  +
{{Note|
''nvidia-settings''' のコンソールインターフェイスを使ってグラフィックカードのファンの速度を調整することができます。まずは Xorg 設定の {{ic|Device}} セクションで Coolbits オプションを {{ic|4}} か {{ic|5}}、または {{ic|12}} (fermi 以上) に設定してファンコントロールを有効にしてください:
 
  +
* rootless モードで Xorg サーバを実行している場合、オーバークロックの設定は適用できません。[[Xorg#root として Xorg を実行|Xorg を root として実行]]することを検討してください。
  +
* DRM カーネルモードセッティングを有効にすると Coolbits の値に関わらずオーバークロックができなくなる場合があります。}}
   
  +
オーバークロックは {{ic|Device}} セクションの ''Coolbits'' オプションによって制御されます。これにより、サポートされない様々な機能を有効化できます:
Option "Coolbits" "4"
 
   
  +
Option "Coolbits" "''値''"
{{Note|GeForce 400/500 シリーズのカードではこの方法を使ってログイン時にファンの速度を設定することはできません。}}
 
   
  +
{{Tip| ''Coolbits'' オプションは、Xorg の設定ファイルを操作する ''nvidia-xconfig'' を使って簡単に設定できます: {{bc|1=# nvidia-xconfig --cool-bits=''value''}}}}
Xorg が起動した時にファンを調整するには以下の行を [[xinitrc]] ファイルに記述します。{{ic|''n''}} は設定したいファンの速度のパーセンテージに置き換えて下さい。
 
   
  +
''Coolbits'' の値は2進数の構成ビットを足し合わせたものです。構成ビットは以下のとおりです:
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=''n''"
 
   
  +
* {{ic|1}} (ビット0) - ''nvidia-settings'' の ''Clock Frequencies'' ページで古い(Fermi以前)コアをオーバークロックできるようにします。
GPU とファンの番号を増やすことで二番目の GPU を設定することもできます。
 
  +
* {{ic|2}} (ビット1) - このビットがセットされると、ドライバは「ビデオメモリの容量が異なる複数の GPU を使用するときに SLI の初期化を試みます。」
  +
* {{ic|4}} (ビット2) - ''nvidia-settings'' の ''Thermal Monitor'' ページで GPU ファンの速度を手動設定できるようにします。
  +
* {{ic|8}} (ビット3) - ''nvidia-settings'' の ''PowerMizer'' ページでオーバークロック出来るようにします。Fermi や Fermi より新しいアーキテクチャでバージョン 337.12 から利用可能です。[https://www.phoronix.com/scan.php?px=MTY1OTM&page=news_item]
  +
* {{ic|16}} (ビット4) - ''nvidia-settings'' の CLI のオプションを使ってオーバーボルテージできるようにします。Fermi や Fermi より新しいアーキテクチャでバージョン 346.16 から利用可能です。[https://www.phoronix.com/scan.php?page=news_item&px=MTg0MDI]
   
  +
複数の機能を有効化するには ''Coolbits'' の値に上記の値を足し合わせてください。例えば、Fermi コアのオーバークロックとオーバーボルテージを有効化する場合は {{ic|Option "Coolbits" "24"}} をセットします。
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=''n''" \
 
-a "[gpu:1]/GPUFanControlState=1" -a [fan:1]/GPUCurrentFanSpeed=''n''" &
 
   
  +
''Coolbits'' に関するドキュメントは {{ic|/usr/share/doc/nvidia/html/xconfigoptions.html}} と[https://download.nvidia.com/XFree86/Linux-x86_64/545.29.06/README/xconfigoptions.html#Coolbits ここ]にあります。
[[GDM]] や [[KDM]] などのログインマネージャを使用している場合、デスクトップエントリファイルを作成して設定をさせることもできます。{{ic|~/.config/autostart/nvidia-fan-speed.desktop}} を作成してその中に以下のテキストを入力してください。{{ic|''n''}} は速度のパーセンテージに置き換えて下さい。
 
   
  +
{{Note| 別の手段としては DOS(推奨) 内から、あるいは [https://www.techpowerup.com/download/nvidia-nvflash/ nvflash] と [https://www.guru3d.com/files-details/nvidia-bios-editor-download-nibitor.html NiBiTor 6.0] を Win32 環境内で使って、GPU BIOS を編集しリフラッシュするというものがあります。BIOS をフラッシュする利点は電圧制限を上げられることだけでなく、一般に Coolbit のようなソフトウェアオーバークロッキングの方法で安定性が向上することです。[https://ivanvojtko.blogspot.sk/2014/03/how-to-overclock-geforce-460gtx-fermi.html Fermi BIOS modification tutorial]}}
[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
 
   
  +
==== 静的な 2D/3D クロックを設定する ====
{{Note|ドライバーのバージョン 349.16 から、{{ic|GPUCurrentFanSpeed}} は {{ic|GPUTargetFanSpeed}} に置き換わっています [https://devtalk.nvidia.com/default/topic/821563/linux/can-t-control-fan-speed-with-beta-driver-349-12/post/4526208/#4526208]。}}
 
   
  +
{{Out of date|RegistryDwords は Xorg の設定ファイルで無視されるようになりました。}}
複数のグラフィックカードのファン速度を調整できるようにしたい場合、以下のコマンドを実行:
 
$ nvidia-xconfig --enable-all-gpus
 
$ nvidia-xconfig --cool-bits=4
 
   
  +
以下の文字列を Device セクションに設定すると PowerMizer がパフォーマンス最高レベルで有効になります (この行がないと VSync が動作しません):
== 手動設定 ==
 
   
  +
Option "RegistryDwords" "PerfLevelSrc=0x2222"
[[NVIDIA#最小設定|設定ファイル]]を編集することで ([[NVIDIA#自動設定|自動設定]]や [[NVIDIA#NVIDIA Settings|GUI]] では有効にできない) 設定を変更することができます。変更を反映するには Xorg サーバーを再起動させる必要があります。
 
   
  +
==== GPU のブーストクロックを下げる ====
オプションの詳しい説明は [ftp://download.nvidia.com/XFree86/Linux-x86/355.11/README/README.txt NVIDIA Accelerated Linux Graphics Driver README and Installation Guide] を見てください。
 
   
  +
[https://nouveau.freedesktop.org/CodeNames.html#NV170 Ampere (NV170/GA''XXX'')] GPU 及びそれ以降では、クロックブーストが異なる方法で動作します。最大クロックはブート時に、サポートされている最も高い制限値に設定されます。これが望ましい動作である場合は、設定は必要ありません。
=== 起動時のロゴを無効にする ===
 
   
  +
これの欠点は、電力効率が低いことです。クロックが上がると、安定性のために電圧を上げる必要があります。その結果として、電力消費量、発熱、ファンの音量が非線形的に増加します。なので、ブーストクロックの制限を下げることで、電力効率を上げることができます。
{{ic|Device}} セクションの下に {{ic|"NoLogo"}} オプションを追加してください:
 
Option "NoLogo" "1"
 
   
  +
ブーストクロックの制限は nvidia-smi を使用して変更できます:
=== モニターの検出を上書きする ===
 
   
  +
* サポートされているクロックレートを表示: {{bc|$ nvidia-smi -q -d SUPPORTED_CLOCKS}}
{{ic|Device}} セクションの下に {{ic|"ConnectedMonitor"}} オプションを追加することで X サーバーの起動時のモニター検出を上書きすることができます。それによって起動時間を大幅に早くすることが可能です。利用可能なオプション: {{ic|"CRT"}} (アナログ接続), {{ic|"DFP"}} (デジタルモニター), {{ic|"TV"}} (テレビ)。
 
  +
* GPU のブーストクロックの制限を 1695 MHz に設定: {{bc|1=# nvidia-smi --lock-gpu-clocks=0,1695 --mode=1}}
  +
* メモリのブーストクロックの制限を 5001 MHz に設定: {{bc|1=# nvidia-smi --lock-memory-clocks=0,5001}}
   
  +
電力効率の最適化をするには、ゲームをプレイしながら nvidia-smi で GPU 使用率を確認してください。VSync はオンにしておく必要があります。ブーストクロックの制限を下げると、GPU 使用率が増加します。遅い GPU では、各フレームを描画するのにより長い時間がかかるからです。GPU 使用率が 100% になり、かつ、カクつきが発生しない程度にまでクロックを下げれば、効率は最大になります。このとき、各フレームはリフレッシュレートを維持するのにちょうど十分なほど高速に描画できていることになります。
以下の設定をすることで NVIDIA ドライバーは起動時のチェックを迂回しモニターを DFP と認識します:
 
Option "ConnectedMonitor" "DFP"
 
{{Note|ディスプレイがフラットパネルだとしても15ピンの VGA 接続をしている場合は "CRT" を使ってください。"DFP" は DVI, HDMI, DisplayPort などのデジタル接続で使用します。}}
 
   
  +
例として、RTX 3090 Ti でデフォルトから上記の設定に変更した場合、Hitman 3 を 4K 60 FPS でプレイしたところ、電力消費量が 30% 減少し、温度は 75 度から 63 度に、ファンの速度は 73% から 57% に低下しました。
=== 輝度調整を有効にする ===
 
   
  +
==== オーバークロックの設定を保存する ====
{{ic|Device}} セクションの下に追加してください:
 
Option "RegistryDwords" "EnableBrightnessControl=1"
 
   
  +
通常、''nvidia-settings'' インターフェイスで設定したクロックと電圧のオフセットは保存されず、再起動すると消えてしまいます。幸い、プロプライエタリドライバにおいてオーバークロック用のインターフェイスを提供し、ユーザのオーバークロック設定を保存することが可能で、起動時に自動的に設定を適用するツールがあります。以下にその一部を挙げます:
上記のオプションで輝度のコントロールが機能しない場合、{{AUR|nvidia-bl-dkms}} をインストールしてください。
 
   
  +
* {{AUR|gwe}} - グラフィカル。デスクトップセッションの開始時に設定を適用します。
{{Note|{{AUR|nvidia-bl-dkms}} をインストールすると {{ic|/sys/class/backlight/nvidia_backlight/}} インターフェイスでバックライトの明るさを制御できるようになりますが、依然としてシステムが {{ic|/sys/class/backlight/acpi_video0/}} でバックライトの制御をしようとするかもしれません。そのような場合、''inotifywait'' などで {{ic|acpi_video0/brightness}} を監視して、変化があったら {{ic|nvidia_backlight/brightness}} に値を書き込むようにしてください。[[バックライト#sysfs を変更しても明るさが変更されない]]を参照。}}
 
  +
* {{AUR|nvclock}} と {{AUR|systemd-nvclock-unit}} - グラフィカル。システムの起動時に設定を適用します。
  +
* {{AUR|nvoc}} - テキストベース。プロファイルは {{ic|/etc/nvoc.d/}} 下の設定ファイルです。デスクトップセッション開始時に設定を適用します。
   
  +
あるいは、{{ic|GPUGraphicsClockOffset}} 属性と {{ic|GPUMemoryTransferRateOffset}} 属性を[[自動起動|起動時に]] ''nvidia-settings'' のコマンドラインインターフェイスでセットすることができます。例えば:
=== SLI を有効にする ===
 
   
  +
$ nvidia-settings -a "GPUGraphicsClockOffset[''performance_level'']=''offset''"
{{Warning|
 
  +
$ nvidia-settings -a "GPUMemoryTransferRateOffset[''performance_level'']=''offset''"
* 2011年5月7日現在、SLI を有効にすると GNOME 3 で動画パフォーマンスが落ちます。
 
* GTX 10xx シリーズ (1080, 1070, 1060 など) では 2-way SLI しか対応していません。CUDA/OpenCL アプリケーションでは 3-way や 4-way の SLI をすることもできますが、OpenGL アプリケーションでは大抵の場合上手く行きません。}}
 
   
  +
{{ic|''performance_level''}} は最も高いパフォーマンスレベルとなります。マシンに複数の GPU が存在する場合、GPU ID を指定する必要があります: {{ic|1=[gpu:''gpu_id'']GPUGraphicsClockOffset[''performance_level'']=''offset''}}。
NVIDIA ドライバーの [ftp://download.nvidia.com/XFree86/Linux-x86/355.11/README/xconfigoptions.html README] の Appendix B より: ''このオプションはサポートされている環境で SLI レンダリングの設定をコントロールします。''「サポートされている環境」とは SLI 対応のマザーボードを搭載し SLI 対応の GeForce GPU が2枚か3枚刺さっているコンピューターのことです。詳しくは NVIDIA の [http://www.slizone.com/page/home.html SLI Zone] を見て下さい。
 
   
  +
=== カスタムの TDP 制限 ===
まず {{ic|lspci}} を使って一番目の GPU の PCI Bus ID を確認してください:
 
{{hc|<nowiki>$ lspci | grep VGA</nowiki>|
 
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)
 
}}
 
   
  +
最近の NVIDIA グラフィックカードは TDP と温度が制限内に収まるように周波数を調整します。パフォーマンスを上げるために TDP 制限を変更できます。これにより温度が上昇し、電力消費量が増加するでしょう。
{{ic|Device}} セクションの下に BusID を追加してください (上記の例では3):
 
BusID "PCI:3:0:0"
 
   
  +
例えば、電力制限を 160.30W に設定するには:
{{Note|指定するときの形式は重要です。BusID の値は {{ic|"PCI:<BusID>:0:0"}} と指定してください。}}
 
   
  +
# nvidia-smi -pl 160.30
使用したい SLI レンダリングモードの値を {{ic|Screen}} セクションの下に追加してください:
 
Option "SLI" "AA"
 
   
  +
(ドライバの永続化なしで)電力制限を起動時に設定するには:
以下の表は利用できるレンダリングモードを示しています。
 
   
  +
{{hc|/etc/systemd/system/nvidia-tdp.timer|2=
{| class="wikitable"
 
  +
[Unit]
! 値 !! 挙動
 
  +
Description=Set NVIDIA power limit on boot
|-
 
| 0, no, off, false, Single || レンダリングの際には単一の GPU だけを使用。
 
|-
 
| 1, yes, on, true, Auto || SLI を有効にしてドライバーに適切なレンダリングモードを自動で選択させる。
 
|-
 
| AFR || SLI を有効にして alternate フレームレンダリングモードを使用する。
 
|-
 
| SFR || SLI を有効にして split フレームレンダリングモードを使用する。
 
|-
 
| AA || SLI を有効にして SLI アンチエイリアスを使用する。これをフルシーンアンチエイリアスと一緒に使うことで見栄えが良くなります。
 
|}
 
   
  +
[Timer]
もしくは、{{ic|nvidia-xconfig}} ユーティリティを使って、コマンドによって {{ic|xorg.conf}} に変更を挿入することもできます:
 
  +
OnBootSec=5
# nvidia-xconfig --busid=PCI:3:0:0 --sli=AA
 
   
  +
[Install]
シェルから SLI モードが有効になっているか確認するには:
 
  +
WantedBy=timers.target
{{hc|<nowiki>$ nvidia-settings -q all | grep SLIMode</nowiki>|
 
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.
 
 
}}
 
}}
   
  +
{{hc|/etc/systemd/system/nvidia-tdp.service|2=
{{Warning|SLI を有効にした後、xorg の起動時にシステムがフリーズしたり反応しなくなることがあります。再起動する前にディスプレイマネージャを無効にすることを推奨します。}}
 
  +
[Unit]
  +
Description=Set NVIDIA power limit
   
  +
[Service]
=== オーバークロックを有効にする ===
 
  +
Type=oneshot
  +
ExecStart=/usr/bin/nvidia-smi -pl 160.30
  +
}}
   
  +
そして、{{ic|nvidia-tdp.timer}} を[[有効化]]してください。
{{Warning|オーバークロックはハードウェアにダメージを与える可能性があり、このページの著者はメーカーによって決められた仕様の範囲外で製品を扱うことについて何も責任を負えないので注意してください。}}
 
   
  +
=== ログイン時にファンの速度を設定する ===
GPU やメモリのオーバークロックは {{ic|Device}} セクションの ''Coolbits'' オプションによって制御され、サポートされない機能が使えるようになります:
 
Option "Coolbits" "''value''"
 
   
  +
''nvidia-settings'' のコンソールインターフェイスを使ってグラフィックカードのファンの速度を調整することができます。まず、Xorg 設定の [[#オーバークロックを有効化する|Coolbits]] オプションでビット2を有効化していることを確認してください。
{{Tip|''Coolbits'' オプションは Xorg の設定ファイルを変更する ''nvidia-xconfig'' で簡単に変えることができます: {{ic|1=# nvidia-xconfig --cool-bits=''value''}}。}}
 
   
  +
{{Note| 現在 GeForce 400/500 シリーズのカードではこの方法を使ってログイン時にファンの速度を設定することはできません。この方法では ''nvidia-settings'' を使って現在の X セッション内でファンのスピードを変更することしかできません。}}
''Coolbits'' の値は2進法でビットを立てた合計になります。それぞれのビットの意味は:
 
   
  +
Xorg が起動した時にファンを調整するには以下の行を [[xinitrc]] ファイルに記述します。{{ic|''n''}} は設定したいファンの速度のパーセンテージに置き換えて下さい。
* {{ic|1}} (ビット 0) - (Fermi 以前の) 古いコアで ''nvidia-settings'' の ''Clock Frequencies'' ページからオーバークロックできるようになります。
 
* {{ic|2}} (ビット 1) - このビットが設定されると、ドライバーは GPU を使う際に様々な量のビデオメモリで SLI を初期化しようとします。
 
* {{ic|4}} (ビット 2) - GPU のファンの速度の手動設定が ''nvidia-settings'' の ''Thermal Monitor'' ページで可能になります。
 
* {{ic|8}} (ビット 3) - Fermi 以降の新しいコアで ''nvidia-settings'' の ''PowerMizer'' ページからオーバークロックできるようになります。バージョン 337.12 から使えるようになりました [https://www.phoronix.com/scan.php?px=MTY1OTM&page=news_item]。
 
* {{ic|16}} (ビット 4) - Fermi 以降の新しいコアで ''nvidia-settings'' の CLI オプションを使って電圧アップができるようになります。バージョン 346.16 から使えるようになりました [https://www.phoronix.com/scan.php?page=news_item&px=MTg0MDI]。
 
   
  +
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUTargetFanSpeed=''n''"
複数の機能を有効にするには、合計した ''Coolbits'' の値を追加します。例えば、オーバークロックと Fermi コアの電圧アップを有効にするには、{{ic|Option "Coolbits" "24"}} と設定します。
 
   
  +
GPU とファンの番号を増やすことで二番目の GPU を設定することもできます。
''Coolbits'' のドキュメントは {{ic|/usr/share/doc/nvidia/html/xconfigoptions.html}} にあります。''Coolbits'' に関するドライバーバージョン 355.11 のドキュメントはオンラインで [ftp://download.nvidia.com/XFree86/Linux-x86/355.11/README/xconfigoptions.html こちら] から見ることができます。
 
   
  +
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=''n''" \
{{Note|An alternative is to edit and reflash the GPU BIOS either under DOS (preferred), or within a Win32 environment by way of [http://www.mvktech.net/component/option,com_remository/Itemid,26/func,select/id,127/orderby,2/page,1/ nvflash]{{Dead link|2013|05|25}} and [http://www.mvktech.net/component/option,com_remository/Itemid,26/func,select/id,135/orderby,2/page,1/ NiBiTor 6.0]{{Dead link|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. [http://ivanvojtko.blogspot.sk/2014/03/how-to-overclock-geforce-460gtx-fermi.html Fermi BIOS modification tutorial]}}
 
  +
-a "[gpu:1]/GPUFanControlState=1" -a [fan:1]/GPUCurrentFanSpeed=''n''" &
   
  +
[[GDM]] や [[KDM]] などのログインマネージャを使用している場合、デスクトップエントリファイルを作成して設定をさせることもできます。{{ic|~/.config/autostart/nvidia-fan-speed.desktop}} を作成してその中に以下のテキストを入力してください。{{ic|''n''}} は速度のパーセンテージに置き換えて下さい。
==== 静的な 2D/3D クロックを設定する ====
 
   
  +
[Desktop Entry]
以下の文字列を {{ic|Device}} セクションに設定すると PowerMizer がパフォーマンス最高レベルで有効になります (この行がないと VSync が動作しません):
 
  +
Type=Application
Option "RegistryDwords" "PerfLevelSrc=0x2222"
 
  +
Exec=nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=''n''"
  +
X-GNOME-Autostart-enabled=true
  +
Name=nvidia-fan-speed
   
  +
{{Note|ドライバーのバージョン 349.16 から、{{ic|GPUCurrentFanSpeed}} は {{ic|GPUTargetFanSpeed}} に置き換わっています [https://devtalk.nvidia.com/default/topic/821563/linux/can-t-control-fan-speed-with-beta-driver-349-12/post/4526208/#4526208]。}}
== Preserve video memory after suspend ==
 
   
  +
複数のグラフィックカードのファン速度を調整できるようにしたい場合、以下のコマンドを実行:
By default the NVIDIA Linux drivers save and restore only essential video memory allocations on system suspend and resume. Quoting NVIDIA ([https://download.nvidia.com/XFree86/Linux-x86_64/460.56/README/powermanagement.html], also available with the {{Pkg|nvidia-utils}} package in '''/usr/share/doc/nvidia/html/powermanagement.html'''): ''The resulting loss of video memory contents is partially compensated for by the user-space NVIDIA drivers, and by some applications, but can lead to failures such as rendering corruption and application crashes upon exit from power management cycles.''
 
  +
$ nvidia-xconfig --enable-all-gpus
  +
$ nvidia-xconfig --cool-bits=4
   
  +
{{Note| 一部のラップトップ(ThinkPad [https://devtalk.nvidia.com/default/topic/1052110/linux/can-t-control-gtx-1050-ti-max-q-fan-on-thinkpad-x1-extreme-laptop/post/5340658/#5340658 X1 Extreme] や [https://devtalk.nvidia.com/default/topic/1048624/linux/how-to-set-gpu-fan-speed/post/5321818/#5321818 P51/P52] を含む)においては、2つのファンがあるものの、どちらも nvidia によって制御されません。}}
The '''still experimental''' system enables saving all video memory (given enough space on disk or main RAM). The interface is through the '''/proc/driver/nvidia/suspend''' file as follows: write "suspend" (or "hibernate") to '''/proc/driver/nvidia/suspend''' immediately before writing to the usual Linux '''/sys/power/state''' file, write "resume" to '''/proc/driver/nvidia/suspend''' immediately after waking up, or after an unsuccessful attempt to suspend or hibernate.
 
   
  +
== カーネルモジュールパラメータ ==
The NVIDIA drivers rely on a user defined file system for storage. The chosen file system needs to support unnamed temporary files (ext4 works) and have sufficient capacity for storing the video memory allocations (e.g., at least {{ic|(sum of the memory capacities of all NVIDIA GPUs) * 1.02}}). Use the command {{ic|nvidia-smi -q -d MEMORY}} to list the memory capacities of all GPUs in the system.
 
  +
  +
一部のオプションはカーネルモジュールパラメータから設定できます。パラメータの完全なリストは {{ic|modinfo nvidia}} を実行するか {{ic|nv-reg.h}} を見てください。[[Gentoo:NVidia/nvidia-drivers/ja#カーネルモジュールのパラメーター]] も見てください。
  +
  +
例えば、以下を有効化すると PAT 機能 [https://docs.kernel.org/arch/x86/pat.html] が有効になります。PAT 機能はメモリの割り当て方に影響を及ぼします。PAT は Pentium III に初めて導入され [https://www.kernel.org/doc/ols/2008/ols2008v2-pages-135-144.pdf]、それよりも新しい CPU の殆どでサポートされています([[wikipedia:Page attribute table#Processors]] を参照)。あなたのシステムでこの機能がサポートされている場合、パフォーマンスが向上するはずです。
  +
  +
{{hc|/etc/modprobe.d/nvidia.conf|2=
  +
options nvidia NVreg_UsePageAttributeTable=1
  +
}}
  +
  +
一部のノートパソコンでは NVIDIA の設定を有効化するために以下のオプションを含めなければなりません。さもないと "Setting applications clocks is not supported" などと表示されます。
  +
  +
{{hc|/etc/modprobe.d/nvidia.conf|2=
  +
options nvidia NVreg_RegistryDwords="OverrideMaxPerf=0x1"
  +
}}
  +
  +
{{Note|[[カーネルモジュール#/etc/modprobe.d/ 内のファイルを使う]] にある通り、[[NVIDIA#DRM カーネルモード設定|early KMS]] を使用している場合は [[Initramfs を再生成する]]必要があります。}}
  +
  +
モード設定を有効化し、かつ {{ic|simpledrm}} ドライバとの衝突を防ぐには、以下のオプションをブートファイル内でカーネルコマンドラインに追加する必要があります。注意点として、このパラメータは {{ic|/etc/modprobe.d}} 内のファイル内で設定すると、(たとえそのファイルが initramfs イメージ内に保存されたとしても) 正しく反映されません。{{Bug|73720}} を参照してください。
  +
  +
nvidia_drm.modeset=1
  +
  +
== サスペンド後にビデオメモリを保持する ==
  +
  +
デフォルトでは、システムのサスペンドと復帰時に NVIDIA の Linux ドライバーは必須のビデオメモリの割り当てのみを保存し復元します。NVIDIA 曰く:
  +
:結果として生じるビデオメモリの内容の消失は、ユーザスペースの NVIDIA ドライバーや一部のアプリケーションによって部分的に補われます。しかし、電源管理サイクルの終了時にレンダリングの破損やアプリケーションのクラッシュなどの機能不全が発生する可能性があります。
  +
  +
"まだ実験段階の" インターフェイスを使用すれば、ビデオメモリ全てを保存できるようになります (ただし、ディスクまたは RAM に十分な領域がある場合)。
  +
  +
ビデオメモリの内容を全て保存し復元するようにするには、{{ic|nvidia}} カーネルモジュールに対して {{ic|1=NVreg_PreserveVideoMemoryAllocations=1}} [[カーネルモジュールパラメータ]]を設定し、{{ic|nvidia-suspend.service}}、{{ic|nvidia-hibernate.service}}、{{ic|nvidia-resume.service}} を[[有効化]]してください。
  +
  +
詳細は [https://download.nvidia.com/XFree86/Linux-x86_64/545.29.06/README/powermanagement.html NVIDIA のドキュメント]を参照してください。
  +
  +
{{Accuracy|[[NVIDIA#早期ロード|KMS を早期開始]]する場合 (つまり、initramfs の段階で {{ic|nvidia}} モジュールがロードされる場合)、initramfs の時点では、以前のビデオメモリの内容が保存されている {{ic|NVreg_TemporaryFilePath}} にアクセスできません。つまり、ハイバーネートを使用する場合は、KMS の早期開始を使用するべきではありません。}}
  +
  +
{{Note|
  +
* [[カーネルモジュール#/etc/modprobe.d/ 内のファイルを使う]] にある通り、[[NVIDIA#DRM カーネルモード設定|early KMS]] を使用している場合は [[initramfs を再生成する]]必要があります。
  +
* デフォルトでは、ビデオメモリの内容は ([[tmpfs]] である) {{ic|/tmp}} に保存されます。NVIDIA は、最高のパフォーマンスを得るために[https://download.nvidia.com/XFree86/Linux-x86_64/545.29.06/README/powermanagement.html#PreserveAllVide719f0 他のファイルシステムを使うことを推奨]しています。また、{{ic|/tmp}} のサイズがメモリの容量に対して不十分である場合も、他のファイルシステムを使う必要があります: {{ic|NVreg_TemporaryFilePath}} カーネルモジュールパラメータで別の場所を指定してください (例えば、{{ic|1=NVreg_TemporaryFilePath=/var/tmp}})。
  +
* ビデオメモリの内容を保存するファイルシステムは、無名一時ファイルをサポートし (例えば、ext4 や XFS)、かつビデオメモリの割り当てを保存するのに十分な容量がある必要があります (つまり、すべての NVIDIA GPU のメモリ容量合計の 1.05 倍以上)。コマンド {{ic|1=nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits}} を使えば、システム上のすべての GPU ビデオメモリの容量を一覧表示できます。
  +
* {{ic|nvidia-resume.service}} を有効化するのは任意です。このサービスの機能は {{man|8|systemd-sleep}} フック ({{ic|/usr/lib/systemd/system-sleep/nvidia}}) によって提供され、このフックは自動的に実行されるからです。ただし、[https://gitlab.gnome.org/GNOME/gdm/-/issues/784 GDM を Wayland で使用している場合]は、{{ic|nvidia-resume.service}} を明示的に有効化する必要があります。
  +
}}
   
  +
== ドライバーの持続 ==
To choose the file system used for storing video memory during system sleep (and change the default video memory save/restore strategy to save and restore all video memory allocations), it is necessary to pass two options to the "nvidia" kernel module. For example, write the following line to '''/etc/modprobe.d/nvidia-power-management.conf''' and reboot:
 
   
  +
NVIDIA はブート時に任意で実行できるデーモンを用意しています。標準的な単一 GPU の X デスクトップ環境では持続デーモンは必要ではなく、むしろ問題を引き起こします [https://devtalk.nvidia.com/default/topic/1044421/linux/nvidia-persistenced-causing-60-second-reboot-delays]。詳細については NVIDIA ドキュメントの [https://docs.nvidia.com/deploy/driver-persistence/index.html#persistence-daemon Driver Persistence] 章をご覧ください。
options nvidia NVreg_PreserveVideoMemoryAllocations=1 NVreg_TemporaryFilePath=/tmp-nvidia
 
   
  +
ブート時に持続デーモンを開始するには {{ic|nvidia-persistenced.service}} を[[有効化]]してください。手動での使用については[https://docs.nvidia.com/deploy/driver-persistence/index.html#usage 上流のドキュメント]をご覧ください。
Feel free to replace "/tmp-nvidia" in the previous line with a path within your desired file system.
 
   
  +
{{TranslationStatus|NVIDIA/Tips and tricks|2024-03-22|801505}}
The interaction with '''/proc/driver/nvidia/suspend''' is handled by the simple Unix shell script at '''/usr/bin/nvidia-sleep.sh''', which will itself be called by a tool like [[Systemd]]. The Arch Linux {{Pkg|nvidia-utils}} package ships with the following relevant Systemd services (which essentially just call '''nvidia-sleep.sh'''): {{ic|nvidia-suspend}}, {{ic|nvidia-hibernate}}, {{ic|nvidia-resume}}. Contrary to NVIDIA's instructions, it is currently not necessary to enable {{ic|nvidia-resume}} (and it is in fact probably not a good idea to enable it), because the '''/usr/lib/systemd/system-sleep/nvidia''' script does the same thing as the service (but slightly earlier), and it is enabled by default (Systemd calls it after waking up from a suspend). Do enable {{ic|nvidia-suspend}} and/or {{ic|nvidia-hibernate}}.
 

2024年3月22日 (金) 09:39時点における最新版

メインの記事は NVIDIA です。

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

nouveau からドライバーを変えた場合、起動時のターミナルが低解像度で表示されるようになることがあります。

GRUB を使用している場合、GRUB/ヒントとテクニック#フレームバッファの解像度を設定するを見てください。

systemd-boot を使用している場合、esp/EFI/loader/loader.conf 内で console-mode を設定してください。詳しくは systemd-boot#ローダー設定 をご覧ください。[1] [2]

rEFInd を使用している場合、esp/EFI/refind/refind.conf/etc/refind.d/refind.conf に以下を追加してください(後者のファイルは任意ですが、両方に追加することを推奨します): [3]

use_graphics_for linux

ちょっとした注意事項としては、これによりブート中にカーネルパラメータが表示されなくなります。

ヒント: 上記の方法でターミナルの解像度を修正できない場合、UEFI の設定で Legacy BIOS モード (しばしば、Compatibility Support Module、CSM、Legacy Boot と呼ばれます) を完全に無効化する必要があるかもしれません。無効化する前に、すべてのデバイスが UEFI ブートを使用するように設定されていることを確認してください。

TV 出力を使う

Wikibooks:NVIDIA/TV-OUT を見てください。

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

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

強制的に NVIDIA が DFP を使用するようにするには、EDID のコピーをファイルシステムのどこかに保存して、X がTV/DFP から EDID を読み込まずにそのファイルをパースできるようにします。

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.bin"

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

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

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

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

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

ヘッドレス (モニターなし) 解像度

ヘッドレスモードでは解像度は VNC や Steam Link で利用される 640x480 に落ちます。より高い解像度(例えば、1920x1080)で開始するには、xorg.conf 内の Screen サブセクションの下にある Virtual エントリ で指定します:

Section "Screen"
   [...]
   SubSection     "Display"
       Depth       24
       Virtual     1920 1080
   EndSubSection
EndSection
ヒント: ヘッドレスモードは扱いづらく、エラーが発生しがちかもしれません。例えば、ヘッドレスモードではデスクトップ環境や nvidia-utils は解像度を変更するためのグラフィカルな手段を提供しません。解像度の設定を容易にするためには、ポートにモニターが接続されているように見せかける、ダミーの DP や HDMI アダプターを使うことができます。そうすれば、VNC や Steam Link のようなリモートセッションを使って、解像度を普通に変更できます。

電源を確認

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[gpu:0]): 49.
    'GPUCoreTemp' is an integer attribute.
    'GPUCoreTemp' is a read-only attribute.
    'GPUCoreTemp' can use the following target types: GPU.

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

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

$ nvidia-settings -q gpucoretemp -t
49

nvidia-smi

X を全く使わず (例: Wayland を実行している場合やヘッドレスサーバの場合) GPU から直接温度を読み込むことができる nvidia-smi を使います。

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

$ nvidia-smi
Wed Feb 28 14:27:35 2024
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.14              Driver Version: 550.54.14      CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce GTX 1660 Ti     Off |   00000000:01:00.0  On |                  N/A |
|  0%   49C    P8              9W /  120W |     138MiB /   6144MiB |      2%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A    223179      G   weston                                        120MiB |
+-----------------------------------------------------------------------------------------+

温度だけ見るには:

$ nvidia-smi -q -d TEMPERATURE
==============NVSMI LOG==============

Timestamp                                 : Wed Feb 28 14:27:35 2024
Driver Version                            : 550.54.14
CUDA Version                              : 12.4

Attached GPUs                             : 1
GPU 00000000:01:00.0
    Temperature
        GPU Current Temp                  : 49 C
        GPU T.Limit Temp                  : N/A
        GPU Shutdown Temp                 : 95 C
        GPU Slowdown Temp                 : 92 C
        GPU Max Operating Temp            : 90 C
        GPU Target Temperature            : 83 C
        Memory Current Temp               : N/A
        Memory Max Operating Temp         : N/A

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

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

nvclock

nvclockAUR パッケージをインストールしてください。

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

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

オーバークロックと冷却

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

警告: オーバークロックによってハードウェアに永久的な損傷が発生するかもしれません。警告しましたよ。
ノート:
  • rootless モードで Xorg サーバを実行している場合、オーバークロックの設定は適用できません。Xorg を root として実行することを検討してください。
  • DRM カーネルモードセッティングを有効にすると Coolbits の値に関わらずオーバークロックができなくなる場合があります。

オーバークロックは Device セクションの Coolbits オプションによって制御されます。これにより、サポートされない様々な機能を有効化できます:

Option "Coolbits" ""
ヒント: Coolbits オプションは、Xorg の設定ファイルを操作する nvidia-xconfig を使って簡単に設定できます:
# nvidia-xconfig --cool-bits=value

Coolbits の値は2進数の構成ビットを足し合わせたものです。構成ビットは以下のとおりです:

  • 1 (ビット0) - nvidia-settingsClock Frequencies ページで古い(Fermi以前)コアをオーバークロックできるようにします。
  • 2 (ビット1) - このビットがセットされると、ドライバは「ビデオメモリの容量が異なる複数の GPU を使用するときに SLI の初期化を試みます。」
  • 4 (ビット2) - nvidia-settingsThermal Monitor ページで GPU ファンの速度を手動設定できるようにします。
  • 8 (ビット3) - nvidia-settingsPowerMizer ページでオーバークロック出来るようにします。Fermi や Fermi より新しいアーキテクチャでバージョン 337.12 から利用可能です。[4]
  • 16 (ビット4) - nvidia-settings の CLI のオプションを使ってオーバーボルテージできるようにします。Fermi や Fermi より新しいアーキテクチャでバージョン 346.16 から利用可能です。[5]

複数の機能を有効化するには Coolbits の値に上記の値を足し合わせてください。例えば、Fermi コアのオーバークロックとオーバーボルテージを有効化する場合は Option "Coolbits" "24" をセットします。

Coolbits に関するドキュメントは /usr/share/doc/nvidia/html/xconfigoptions.htmlここにあります。

ノート: 別の手段としては DOS(推奨) 内から、あるいは nvflashNiBiTor 6.0 を Win32 環境内で使って、GPU BIOS を編集しリフラッシュするというものがあります。BIOS をフラッシュする利点は電圧制限を上げられることだけでなく、一般に Coolbit のようなソフトウェアオーバークロッキングの方法で安定性が向上することです。Fermi BIOS modification tutorial

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

この記事またはセクションは情報が古くなっています。
理由: RegistryDwords は Xorg の設定ファイルで無視されるようになりました。 (Discuss)

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

Option "RegistryDwords" "PerfLevelSrc=0x2222"

GPU のブーストクロックを下げる

Ampere (NV170/GAXXX) GPU 及びそれ以降では、クロックブーストが異なる方法で動作します。最大クロックはブート時に、サポートされている最も高い制限値に設定されます。これが望ましい動作である場合は、設定は必要ありません。

これの欠点は、電力効率が低いことです。クロックが上がると、安定性のために電圧を上げる必要があります。その結果として、電力消費量、発熱、ファンの音量が非線形的に増加します。なので、ブーストクロックの制限を下げることで、電力効率を上げることができます。

ブーストクロックの制限は nvidia-smi を使用して変更できます:

  • サポートされているクロックレートを表示:
    $ nvidia-smi -q -d SUPPORTED_CLOCKS
  • GPU のブーストクロックの制限を 1695 MHz に設定:
    # nvidia-smi --lock-gpu-clocks=0,1695 --mode=1
  • メモリのブーストクロックの制限を 5001 MHz に設定:
    # nvidia-smi --lock-memory-clocks=0,5001

電力効率の最適化をするには、ゲームをプレイしながら nvidia-smi で GPU 使用率を確認してください。VSync はオンにしておく必要があります。ブーストクロックの制限を下げると、GPU 使用率が増加します。遅い GPU では、各フレームを描画するのにより長い時間がかかるからです。GPU 使用率が 100% になり、かつ、カクつきが発生しない程度にまでクロックを下げれば、効率は最大になります。このとき、各フレームはリフレッシュレートを維持するのにちょうど十分なほど高速に描画できていることになります。

例として、RTX 3090 Ti でデフォルトから上記の設定に変更した場合、Hitman 3 を 4K 60 FPS でプレイしたところ、電力消費量が 30% 減少し、温度は 75 度から 63 度に、ファンの速度は 73% から 57% に低下しました。

オーバークロックの設定を保存する

通常、nvidia-settings インターフェイスで設定したクロックと電圧のオフセットは保存されず、再起動すると消えてしまいます。幸い、プロプライエタリドライバにおいてオーバークロック用のインターフェイスを提供し、ユーザのオーバークロック設定を保存することが可能で、起動時に自動的に設定を適用するツールがあります。以下にその一部を挙げます:

  • gweAUR - グラフィカル。デスクトップセッションの開始時に設定を適用します。
  • nvclockAURsystemd-nvclock-unitAUR - グラフィカル。システムの起動時に設定を適用します。
  • nvocAUR - テキストベース。プロファイルは /etc/nvoc.d/ 下の設定ファイルです。デスクトップセッション開始時に設定を適用します。

あるいは、GPUGraphicsClockOffset 属性と GPUMemoryTransferRateOffset 属性を起動時に nvidia-settings のコマンドラインインターフェイスでセットすることができます。例えば:

$ nvidia-settings -a "GPUGraphicsClockOffset[performance_level]=offset"
$ nvidia-settings -a "GPUMemoryTransferRateOffset[performance_level]=offset"

performance_level は最も高いパフォーマンスレベルとなります。マシンに複数の GPU が存在する場合、GPU ID を指定する必要があります: [gpu:gpu_id]GPUGraphicsClockOffset[performance_level]=offset

カスタムの TDP 制限

最近の NVIDIA グラフィックカードは TDP と温度が制限内に収まるように周波数を調整します。パフォーマンスを上げるために TDP 制限を変更できます。これにより温度が上昇し、電力消費量が増加するでしょう。

例えば、電力制限を 160.30W に設定するには:

# nvidia-smi -pl 160.30

(ドライバの永続化なしで)電力制限を起動時に設定するには:

/etc/systemd/system/nvidia-tdp.timer
[Unit]
Description=Set NVIDIA power limit on boot

[Timer]
OnBootSec=5

[Install]
WantedBy=timers.target
/etc/systemd/system/nvidia-tdp.service
[Unit]
Description=Set NVIDIA power limit

[Service]
Type=oneshot
ExecStart=/usr/bin/nvidia-smi -pl 160.30

そして、nvidia-tdp.timer有効化してください。

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

nvidia-settings のコンソールインターフェイスを使ってグラフィックカードのファンの速度を調整することができます。まず、Xorg 設定の Coolbits オプションでビット2を有効化していることを確認してください。

ノート: 現在 GeForce 400/500 シリーズのカードではこの方法を使ってログイン時にファンの速度を設定することはできません。この方法では nvidia-settings を使って現在の X セッション内でファンのスピードを変更することしかできません。

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

nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUTargetFanSpeed=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 に置き換わっています [6]

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

$ nvidia-xconfig --enable-all-gpus
$ nvidia-xconfig --cool-bits=4
ノート: 一部のラップトップ(ThinkPad X1 ExtremeP51/P52 を含む)においては、2つのファンがあるものの、どちらも nvidia によって制御されません。

カーネルモジュールパラメータ

一部のオプションはカーネルモジュールパラメータから設定できます。パラメータの完全なリストは modinfo nvidia を実行するか nv-reg.h を見てください。Gentoo:NVidia/nvidia-drivers/ja#カーネルモジュールのパラメーター も見てください。

例えば、以下を有効化すると PAT 機能 [7] が有効になります。PAT 機能はメモリの割り当て方に影響を及ぼします。PAT は Pentium III に初めて導入され [8]、それよりも新しい CPU の殆どでサポートされています(wikipedia:Page attribute table#Processors を参照)。あなたのシステムでこの機能がサポートされている場合、パフォーマンスが向上するはずです。

/etc/modprobe.d/nvidia.conf
options nvidia NVreg_UsePageAttributeTable=1

一部のノートパソコンでは NVIDIA の設定を有効化するために以下のオプションを含めなければなりません。さもないと "Setting applications clocks is not supported" などと表示されます。

/etc/modprobe.d/nvidia.conf
options nvidia NVreg_RegistryDwords="OverrideMaxPerf=0x1"
ノート: カーネルモジュール#/etc/modprobe.d/ 内のファイルを使う にある通り、early KMS を使用している場合は Initramfs を再生成する必要があります。

モード設定を有効化し、かつ simpledrm ドライバとの衝突を防ぐには、以下のオプションをブートファイル内でカーネルコマンドラインに追加する必要があります。注意点として、このパラメータは /etc/modprobe.d 内のファイル内で設定すると、(たとえそのファイルが initramfs イメージ内に保存されたとしても) 正しく反映されません。FS#73720 を参照してください。

nvidia_drm.modeset=1

サスペンド後にビデオメモリを保持する

デフォルトでは、システムのサスペンドと復帰時に NVIDIA の Linux ドライバーは必須のビデオメモリの割り当てのみを保存し復元します。NVIDIA 曰く:

結果として生じるビデオメモリの内容の消失は、ユーザスペースの NVIDIA ドライバーや一部のアプリケーションによって部分的に補われます。しかし、電源管理サイクルの終了時にレンダリングの破損やアプリケーションのクラッシュなどの機能不全が発生する可能性があります。

"まだ実験段階の" インターフェイスを使用すれば、ビデオメモリ全てを保存できるようになります (ただし、ディスクまたは RAM に十分な領域がある場合)。

ビデオメモリの内容を全て保存し復元するようにするには、nvidia カーネルモジュールに対して NVreg_PreserveVideoMemoryAllocations=1 カーネルモジュールパラメータを設定し、nvidia-suspend.servicenvidia-hibernate.servicenvidia-resume.service有効化してください。

詳細は NVIDIA のドキュメントを参照してください。

この記事またはセクションの正確性には問題があります。
理由: KMS を早期開始する場合 (つまり、initramfs の段階で nvidia モジュールがロードされる場合)、initramfs の時点では、以前のビデオメモリの内容が保存されている NVreg_TemporaryFilePath にアクセスできません。つまり、ハイバーネートを使用する場合は、KMS の早期開始を使用するべきではありません。 (議論: トーク:NVIDIA/ヒントとテクニック#)
ノート:
  • カーネルモジュール#/etc/modprobe.d/ 内のファイルを使う にある通り、early KMS を使用している場合は initramfs を再生成する必要があります。
  • デフォルトでは、ビデオメモリの内容は (tmpfs である) /tmp に保存されます。NVIDIA は、最高のパフォーマンスを得るために他のファイルシステムを使うことを推奨しています。また、/tmp のサイズがメモリの容量に対して不十分である場合も、他のファイルシステムを使う必要があります: NVreg_TemporaryFilePath カーネルモジュールパラメータで別の場所を指定してください (例えば、NVreg_TemporaryFilePath=/var/tmp)。
  • ビデオメモリの内容を保存するファイルシステムは、無名一時ファイルをサポートし (例えば、ext4 や XFS)、かつビデオメモリの割り当てを保存するのに十分な容量がある必要があります (つまり、すべての NVIDIA GPU のメモリ容量合計の 1.05 倍以上)。コマンド nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits を使えば、システム上のすべての GPU ビデオメモリの容量を一覧表示できます。
  • nvidia-resume.service を有効化するのは任意です。このサービスの機能は systemd-sleep(8) フック (/usr/lib/systemd/system-sleep/nvidia) によって提供され、このフックは自動的に実行されるからです。ただし、GDM を Wayland で使用している場合は、nvidia-resume.service を明示的に有効化する必要があります。

ドライバーの持続

NVIDIA はブート時に任意で実行できるデーモンを用意しています。標準的な単一 GPU の X デスクトップ環境では持続デーモンは必要ではなく、むしろ問題を引き起こします [9]。詳細については NVIDIA ドキュメントの Driver Persistence 章をご覧ください。

ブート時に持続デーモンを開始するには nvidia-persistenced.service有効化してください。手動での使用については上流のドキュメントをご覧ください。

翻訳ステータス: このページは en:NVIDIA/Tips and tricks の翻訳バージョンです。最後の翻訳日は 2024-03-22 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。