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

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎ログイン時にファンの速度を設定する: 「オーバークロックと冷却」に変更)
(同期)
 
(2人の利用者による、間の30版が非表示)
1行目: 1行目:
[[Category:グラフィック]]
+
[[Category:グラフィック]]
 
[[Category:X サーバー]]
 
[[Category:X サーバー]]
 
[[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''/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|use_graphics_for +,linux}} を設定してください。ちょっとした注事項としては、これによりブート中にカーネルパラメータが表示されなくなります
   
  +
{{Tip|上記の方法でターミナルの解像度を修正できない場合、UEFI の設定で Legacy BIOS モード (しばしば、Compatibility Support Module、CSM、Legacy Boot と呼ばれます) を完全に無効化する必要があるかもしれません。無効化する前に、すべてのデバイスが UEFI ブートを使用するように設定されていることを確認してください。}}
use_graphics_for linux
 
 
ちょっとした注意事項としては、これによりブート中にカーネルパラメータが表示されなくなります。
 
   
 
== 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行目: 36行目:
 
{{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行目: 91行目:
 
EndSection
 
EndSection
   
ノートパソコンを使っている場合、[[acpid]] デーモンをインストールして有効化するを推奨しま
+
ノートパソコンを使っている場合、代わりに [[acpid]] デーモンをインストールして有効化すると良いかもせん
   
 
== GPU の温度をシェルに表示する ==
 
== GPU の温度をシェルに表示する ==
99行目: 99行目:
 
=== 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 温度は 41 C になります。
+
上記の場合、ボードの GPU 温度は 49 °C になります。
   
{{ic|rrdtool}}{{ic|conky}} などのユーティリティで使うために温度だけを表示したいときは:
+
''rrdtool''''conky'' などのユーティリティで使うために温度だけを表示したいときは:
  +
{{hc|$ nvidia-settings -q gpucoretemp -t|41}}
 
  +
{{hc|$ nvidia-settings -q gpucoretemp -t|49}}
   
 
=== 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
</nowiki>}}
 
  +
GPU Target Temperature : 83 C
 
  +
Memory Current Temp : N/A
{{ic|rrdtool}} や {{ic|conky}} などのユーティリティで使うために温度だけを取得したいときは:
 
  +
Memory Max Operating Temp : N/A
  +
}}
   
  +
''rrdtool'' や ''conky'' などのユーティリティで使うために温度だけを取得したいときは:
{{hc|<nowiki>$ nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits</nowiki>|52}}
 
   
  +
{{hc|1=$ nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits|2=49}}
参照: http://www.question-defense.com/2010/03/22/gpu-linux-shell-temp-get-nvidia-gpu-temperatures-via-linux-cli
 
   
 
=== nvclock ===
 
=== nvclock ===
   
  +
{{AUR|nvclock}} パッケージを[[インストール]]してください。
[[Arch User Repository|AUR]] から利用できる {{AUR|nvclock}} を使います。
 
   
{{Note|{{ic|nvclock}} は Geforce 200 シリーズなどの新しい NVIDIA カードの温度センサーにはアクセスできません。}}
+
{{Note|''nvclock'' は Geforce 200 シリーズなどの新しい NVIDIA カードの温度センサーにはアクセスできません。}}
   
たまに nvclock と nvidia-settings/nv-control が報告する温度が食い違うことがあります。nvclock の作者 (thunderbird) による [https://sourceforge.net/projects/nvclock/forums/forum/67426/topic/1906899 この投稿] によると、nvclock の値のほうが正確なようです。
+
たまに ''nvclock''''nvidia-settings''/''nv-control'' が報告する温度が食い違うことがあります。''nvclock'' の作者 (thunderbird) による [https://sourceforge.net/projects/nvclock/forums/forum/67426/topic/1906899 この投稿] によると、''nvclock'' の値のほうが正確なようです。
   
 
== オーバークロックと冷却 ==
 
== オーバークロックと冷却 ==
174行目: 182行目:
   
 
{{Warning| オーバークロックによってハードウェアに永久的な損傷が発生するかもしれません。警告しましたよ。}}
 
{{Warning| オーバークロックによってハードウェアに永久的な損傷が発生するかもしれません。警告しましたよ。}}
  +
  +
{{Note|
  +
* rootless モードで Xorg サーバを実行している場合、オーバークロックの設定は適用できません。[[Xorg#root として Xorg を実行|Xorg を root として実行]]することを検討してください。
  +
* DRM カーネルモードセッティングを有効にすると Coolbits の値に関わらずオーバークロックができなくなる場合があります。}}
   
 
オーバークロックは {{ic|Device}} セクションの ''Coolbits'' オプションによって制御されます。これにより、サポートされない様々な機能を有効化できます:
 
オーバークロックは {{ic|Device}} セクションの ''Coolbits'' オプションによって制御されます。これにより、サポートされない様々な機能を有効化できます:
186行目: 198行目:
 
* {{ic|2}} (ビット1) - このビットがセットされると、ドライバは「ビデオメモリの容量が異なる複数の GPU を使用するときに SLI の初期化を試みます。」
 
* {{ic|2}} (ビット1) - このビットがセットされると、ドライバは「ビデオメモリの容量が異なる複数の GPU を使用するときに SLI の初期化を試みます。」
 
* {{ic|4}} (ビット2) - ''nvidia-settings'' の ''Thermal Monitor'' ページで GPU ファンの速度を手動設定できるようにします。
 
* {{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|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]
 
* {{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"}} をセットします。
 
複数の機能を有効化するには ''Coolbits'' の値に上記の値を足し合わせてください。例えば、Fermi コアのオーバークロックとオーバーボルテージを有効化する場合は {{ic|Option "Coolbits" "24"}} をセットします。
   
''Coolbits'' に関するドキュメントは {{ic|/usr/share/doc/nvidia/html/xconfigoptions.html}} と[https://download.nvidia.com/XFree86/Linux-x86_64/430.14/README/xconfigoptions.html#Coolbits ここ]にあります。
+
''Coolbits'' に関するドキュメントは {{ic|/usr/share/doc/nvidia/html/xconfigoptions.html}} と[https://download.nvidia.com/XFree86/Linux-x86_64/560.35.03/README/xconfigoptions.html#Coolbits ここ]にあります。
   
 
{{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]}}
 
{{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]}}
197行目: 209行目:
 
==== 静的な 2D/3D クロックを設定する ====
 
==== 静的な 2D/3D クロックを設定する ====
   
以下の文字列 Device セクションに設定すると PowerMizer パフォーマンス最高レベルで有効になります (このがないと VSync が動作しません):
+
[[カーネルモジュールパラメータ]]使用して PowerMizer を最大パフォーマンスレベルで有効化してください (この設定がないと VSync が機能しません):
   
  +
{{hc|/etc/modprobe.d/nvidia.conf|2=
Option "RegistryDwords" "PerfLevelSrc=0x2222"
 
  +
options nvidia NVreg_RegistryDwords="PerfLevelSrc=0x2222"
  +
}}
   
==== 最高パフォマンモードへの変更許可する ====
+
==== GPU のブーストクロック下げる ====
   
  +
[https://nouveau.freedesktop.org/CodeNames.html#NV170 Ampere (NV170/GA''XXX'')] GPU 及びそれ以降では、クロックブーストが異なる方法で動作します。最大クロックはブート時に、サポートされている最も高い制限値に設定されます。これが望ましい動作である場合は、設定は必要ありません。
{{Accuracy| このセクションでは [[wikipedia:Kepler_(microarchitecture)#GPU_Boost|GPU boost]] について説明しており、上記のオーバークロックの話題とは関係ありません。{{ic|nvidia-smi(1)}} の man ページには 「Kepler+ ファミリの Tesla デバイスや Maxwell ベースの Geforce Titan 用」と書かれてあります。そして [https://wiki.archlinux.org/title/User:Lahwaacz Lahwaacz] 氏が知る限り、これをサポートし、最大に等しいデフォルトクロックを持たない GPU は Tesla K40 のみです[https://www.nvidia.com/content/PDF/kepler/nvidia-gpu-boost-tesla-k40-06767-001-v02.pdf]。Pascal アーキテクチャ以降、[https://www.anandtech.com/show/10325/the-nvidia-geforce-gtx-1080-and-1070-founders-edition-review/15 Boost 3.0] は自動クロック制御を異なる方法で処理します。}}
 
   
  +
これの欠点は、電力効率が低いことです。クロックが上がると、安定性のために電圧を上げる必要があります。その結果として、電力消費量、発熱、ファンの音量が非線形的に増加します。なので、ブーストクロックの制限を下げることで、電力効率を上げることができます。
''nvidia-settings'' でパフォーマンスモードを変更してもメモリレートをオーバークロックしてもほとんど影響を及ぼしません。以下を試してください:
 
   
  +
ブーストクロックの制限は nvidia-smi を使用して変更できます:
* Coolbit を 24 や 28 にセットし、Powermizer RegistryDwords を削除して X を再起動。
 
* Clock と Memory レートの最大値を見つけだす。(起動後にあなたの gfx カードで報告されているものよりも低くなる可能性があります!): {{bc|$ nvidia-smi -q -d SUPPORTED_CLOCKS}}
 
* GPU 0 のレートを設定する: {{bc|# nvidia-smi -i 0 -ac memratemax,clockratemax}}
 
   
  +
* サポートされているクロックレートを表示: {{bc|$ nvidia-smi -q -d SUPPORTED_CLOCKS}}
レートを最大に設定した後、パフォーマンスモードが ''nvidia-settings'' で利用でき、グラフィックスクロックとメモリ転送レートをオーバークロックできます。
 
  +
* 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% になり、かつ、カクつきが発生しない程度にまでクロックを下げれば、効率は最大になります。このとき、各フレームはリフレッシュレートを維持するのにちょうど十分なほど高速に描画できていることになります。
  +
  +
例として、RTX 3090 Ti でデフォルトから上記の設定に変更した場合、Hitman 3 を 4K 60 FPS でプレイしたところ、電力消費量が 30% 減少し、温度は 75 度から 63 度に、ファンの速度は 73% から 57% に低下しました。
   
 
==== オーバークロックの設定を保存する ====
 
==== オーバークロックの設定を保存する ====
220行目: 238行目:
 
* {{AUR|nvclock}} と {{AUR|systemd-nvclock-unit}} - グラフィカル。システムの起動時に設定を適用します。
 
* {{AUR|nvclock}} と {{AUR|systemd-nvclock-unit}} - グラフィカル。システムの起動時に設定を適用します。
 
* {{AUR|nvoc}} - テキストベース。プロファイルは {{ic|/etc/nvoc.d/}} 下の設定ファイルです。デスクトップセッション開始時に設定を適用します。
 
* {{AUR|nvoc}} - テキストベース。プロファイルは {{ic|/etc/nvoc.d/}} 下の設定ファイルです。デスクトップセッション開始時に設定を適用します。
  +
  +
あるいは、{{ic|GPUGraphicsClockOffset}} 属性と {{ic|GPUMemoryTransferRateOffset}} 属性を[[自動起動|起動時に]] ''nvidia-settings'' のコマンドラインインターフェイスでセットすることができます。例えば:
  +
  +
$ nvidia-settings -a "GPUGraphicsClockOffset[''performance_level'']=''offset''"
  +
$ nvidia-settings -a "GPUMemoryTransferRateOffset[''performance_level'']=''offset''"
  +
  +
{{ic|''performance_level''}} は最も高いパフォーマンスレベルとなります。マシンに複数の GPU が存在する場合、GPU ID を指定する必要があります: {{ic|1=[gpu:''gpu_id'']GPUGraphicsClockOffset[''performance_level'']=''offset''}}。
   
 
=== カスタムの TDP 制限 ===
 
=== カスタムの TDP 制限 ===
   
最近の Nvidia グラフィックカードは TDP と温度が制限内に収まるように周波数を調整します。パフォーマンスを上げるために TDP 制限を変更できます。これにより温度が上昇し、電力消費量が増加するでしょう。
+
最近の NVIDIA グラフィックカードは TDP と温度が制限内に収まるように周波数を調整します。パフォーマンスを上げるために TDP 制限を変更できます。これにより温度が上昇し、電力消費量が増加するでしょう。
   
 
例えば、電力制限を 160.30W に設定するには:
 
例えば、電力制限を 160.30W に設定するには:
250行目: 275行目:
 
ExecStart=/usr/bin/nvidia-smi -pl 160.30
 
ExecStart=/usr/bin/nvidia-smi -pl 160.30
 
}}
 
}}
  +
  +
そして、{{ic|nvidia-tdp.timer}} を[[有効化]]してください。
   
 
=== ログイン時にファンの速度を設定する ===
 
=== ログイン時にファンの速度を設定する ===
   
''nvidia-settings'' のコンソールインターフェイスを使ってグラフィックカードのファンの速度を調整することができます。まず、Xorg 設定の [[#オーバークロックを有効化|Coolbits]] オプションでビット2を有効化していることを確認してください。
+
''nvidia-settings'' のコンソールインターフェイスを使ってグラフィックカードのファンの速度を調整することができます。まず、Xorg 設定の [[#オーバークロックを有効化する|Coolbits]] オプションでビット2を有効化していることを確認してください。
   
 
{{Note| 現在 GeForce 400/500 シリーズのカードではこの方法を使ってログイン時にファンの速度を設定することはできません。この方法では ''nvidia-settings'' を使って現在の X セッション内でファンのスピードを変更することしかできません。}}
 
{{Note| 現在 GeForce 400/500 シリーズのカードではこの方法を使ってログイン時にファンの速度を設定することはできません。この方法では ''nvidia-settings'' を使って現在の X セッション内でファンのスピードを変更することしかできません。}}
281行目: 308行目:
   
 
{{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 によって制御されません。}}
 
{{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 によって制御されません。}}
  +
  +
== カーネルモジュールパラメータ ==
  +
  +
一部のオプションはカーネルモジュールパラメータから設定できます。パラメータの完全なリストは {{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 を再生成する]]必要があります。}}
   
 
== サスペンド後にビデオメモリを保持する ==
 
== サスペンド後にビデオメモリを保持する ==
   
デフォルトではシステムのサスペンドと復帰時に NVIDIA の Linux ドライバーは必須のビデオメモリの割り当てのみを保存し復元します。NVIDIA 曰く ([https://download.nvidia.com/XFree86/Linux-x86_64/460.56/README/powermanagement.html]、 {{Pkg|nvidia-utils}} パッケージをインストールすると '''/usr/share/doc/nvidia/html/powermanagement.html''' でも読めます): ''結果として生じる、ビデオメモリの内容の消失はユーザスペースの NVIDIA ドライバーや一部のアプリケーションによって部分的に補われます。しかし、電源管理サイクルの終了時にレンダリングの破損やアプリケーションのクラッシュなどの機能不全が発生する可能性があります。''
+
デフォルトではシステムのサスペンドと復帰時に NVIDIA の Linux ドライバーは必須のビデオメモリの割り当てのみを保存し復元します。NVIDIA 曰く:
  +
:結果として生じるビデオメモリの内容の消失は、ユーザスペースの NVIDIA ドライバーや一部のアプリケーションによって部分的に補われます。しかし、電源管理サイクルの終了時にレンダリングの破損やアプリケーションのクラッシュなどの機能不全が発生する可能性があります。
   
  +
"まだ実験段階の" インターフェイスを使用すれば、(ディスクまたは RAM に十分な領域があれば) ビデオメモリ全てを保存できるようになります。
システムは'''まだ試験段階'''ですが、すべてのビデオメモリを保存することが可能です(ディスクかメインメモリ上に十分なスペースが与えられた場合)。インターフェイスは次のように '''/proc/driver/nvidia/suspend''' を介します: 通常の Linux の '''/sys/power/state''' ファイルに書き込む直前には "suspend" (または "hibernate") を '''/proc/driver/nvidia/suspend''' に書き込みます。復帰した直後か、サスペンドやハイバネートへの移行に失敗した後には '''/proc/driver/nvidia/suspend''' に "resume" を書き込みます。
 
   
  +
ビデオメモリの内容を全て保存し復元するようにするには、{{ic|nvidia}} カーネルモジュールに対して {{ic|1=NVreg_PreserveVideoMemoryAllocations=1}} [[カーネルモジュールパラメータ]]を設定する必要があります。NVIDIA はこのパラメータをデフォルトで設定していませんが、一方 Arch Linux では、サポートされているドライバにおいてこのパラメータがデフォルトで設定されています。
NVIDIA ドライバーはデータの保管場所としてユーザ定義のファイルシステムに依存しています。そのファイルシステムでは無名の一時ファイルがサポートされ(ext4 はこれをサポートします)、ビデオメモリの割り当てを保持するのに十分な容量がある必要があります(例えば、{{ic|(すべての NVIDIA GPUs のビデオメモリ容量の合計) * 1.02}} 以上)。コマンド {{ic|nvidia-smi -q -d MEMORY}} を使えば、システム上のすべての GPU ビデオメモリの容量を一覧表示できます。
 
   
  +
また、{{ic|nvidia-suspend.service}} サービス、{{ic|nvidia-hibernate.service}} サービス、{{ic|nvidia-resume.service}} サービスを[[有効化]]しておく必要があります。Arch Linux では、上流の要件に従って、サポートされているドライバにおいてこれらのサービスはデフォルトで有効化されています。
システムがスリープしている間にビデオメモリの内容を保持するファイルシステムを選ぶ(そして、すべてのビデオメモリ割り当てを保存し保持するデフォルトの方法を変更する)ためには、2つのオプションを "nvidia" カーネルモジュールに渡す必要があります。例えば、以下の行を '''/etc/modprobe.d/nvidia-power-management.conf''' に書き込んで再起動します:
 
   
  +
詳細は [https://download.nvidia.com/XFree86/Linux-x86_64/560.35.03/README/powermanagement.html NVIDIA のドキュメント]を参照してください。
options nvidia NVreg_PreserveVideoMemoryAllocations=1 NVreg_TemporaryFilePath=/tmp-nvidia
 
   
  +
{{Accuracy|[[NVIDIA#早期ロード|KMS を早期開始]]する場合 (つまり、initramfs の段階で {{ic|nvidia}} モジュールがロードされる場合)、initramfs の時点では、以前のビデオメモリの内容が保存されている {{ic|NVreg_TemporaryFilePath}} にアクセスできません。つまり、ハイバーネートを使用する場合は、KMS の早期開始を使用するべきではありません。}}
"/tmp-nvidia" の部分はお好きなファイルシステム内のパスに自由に置き換えてください。
 
   
  +
{{Note|
'''/proc/driver/nvidia/suspend''' とのやり取りは単純な Unix シェルスクリプトである '''/usr/bin/nvidia-sleep.sh''' によって行われます。このスクリプト自体は [[Systemd]] のようなツールによって呼び出されます。Arch Linux の {{Pkg|nvidia-utils}} パッケージには次の関連する Systemd サービスが同梱されています(本質的には '''nvidia-sleep.sh''' を呼び出すだけです): {{ic|nvidia-suspend}}, {{ic|nvidia-hibernate}}, {{ic|nvidia-resume}}。NVIDIA の指示に反して、現在 {{ic|nvidia-resume}} を有効化する必要はありません(それどころか、有効化するのは恐らく良いアイデアではありません)。その理由は、'''/usr/lib/systemd/system-sleep/nvidia''' スクリプトが {{ic|nvidia-resume}} サービスと同じことをするからです(ただし、より早い段階で)。このスクリプトは規定で有効化されています(Systemd がこれをサスペンドから復帰したあとで呼び出します)。{{ic|nvidia-suspend}} と
 
  +
* [[カーネルモジュール#/etc/modprobe.d/ 内のファイルを使う]] にある通り、[[NVIDIA#DRM カーネルモード設定|early KMS]] を使用している場合は [[initramfs を再生成する]]必要があります。
{{ic|nvidia-hibernate}} の両方/一方は有効化してください。
 
  +
* 上流のデフォルトでは、ビデオメモリの内容は ([[tmpfs]] である) {{ic|/tmp}} に保存されます。NVIDIA は、最高のパフォーマンスを得るために[https://download.nvidia.com/XFree86/Linux-x86_64/560.35.03/README/powermanagement.html#PreserveAllVide719f0 他のファイルシステムを使うことを推奨]しています。また、{{ic|/tmp}} のサイズがメモリの容量に対して不十分である場合も、他のファイルシステムを使う必要があります。このような理由から、Arch Linux では、サポートされているドライバにおいて {{ic|1=nvidia.NVreg_TemporaryFilePath=/var/tmp}} パラメータがデフォルトで設定されています。
  +
* ビデオメモリの内容を保存するファイルシステムは、無名一時ファイルをサポートし (例えば、ext4 や XFS)、かつビデオメモリの割り当てを保存するのに十分な容量がある必要があります (つまり、すべての NVIDIA GPU のメモリ容量合計の 1.05 倍以上)。コマンド {{ic|1=nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits}} を使えば、システム上のすべての GPU ビデオメモリの容量を一覧表示できます。
  +
* NVIDIA は {{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}} を明示的に有効化する必要があります。
  +
}}
   
 
== ドライバーの持続 ==
 
== ドライバーの持続 ==
   
NVIDIA はブート時に任意で実行できるデーモンを用意しています。標準的な単一GPU X desktop 環境では持続デーモンは必要ではなく、むしろ問題を引き起こします[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] 章をご覧ください。
+
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] 章をご覧ください。
  +
  +
ブート時に持続デーモンを開始するには {{ic|nvidia-persistenced.service}} を[[有効化]]してください。手動での使用については[https://docs.nvidia.com/deploy/driver-persistence/index.html#usage 上流のドキュメント]をご覧ください。
  +
  +
== YCbCr 4:2:0 サブサンプリングを強制する ==
  +
  +
[[Wikipedia:HDMI#Refresh frequency limits for standard video|古い出力規格の制限]]に悩まされているが、YUV 4:2:0 を使用することで問題を緩和できるような場合は、NVIDIA ドライバに YUV420 を強制するためのドキュメント化されていない X11 オプションがあります:
  +
  +
Option "ForceYUV420" "True"
  +
  +
これで、より高い解像度とリフレッシュレートを利用できますが、画質に悪影響を及ぼします。
   
  +
{{TranslationStatus|NVIDIA/Tips and tricks|2024-10-23|819073}}
ブート時に持続デーモンを開始するには {{ic|nvidia-persistenced.service}} を[[Systemd#ユニットを使う|有効化]]してください。手動での使用については[https://docs.nvidia.com/deploy/driver-persistence/index.html#usage 上流のドキュメント]をご覧ください。
 

2024年10月23日 (水) 15:49時点における最新版

メインの記事は NVIDIA です。

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

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

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

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

rEFInd を使用している場合、esp/EFI/refind/refind.confuse_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 から利用可能です。[3]
  • 16 (ビット4) - nvidia-settings の CLI のオプションを使ってオーバーボルテージできるようにします。Fermi や Fermi より新しいアーキテクチャでバージョン 346.16 から利用可能です。[4]

複数の機能を有効化するには 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 クロックを設定する

カーネルモジュールパラメータを使用して PowerMizer を最大パフォーマンスレベルで有効化してください (この設定がないと VSync が機能しません):

/etc/modprobe.d/nvidia.conf
options nvidia NVreg_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 に置き換わっています [5]

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

$ 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 機能 [6] が有効になります。PAT 機能はメモリの割り当て方に影響を及ぼします。PAT は Pentium III に初めて導入され [7]、それよりも新しい 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 を再生成する必要があります。

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

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

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

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

ビデオメモリの内容を全て保存し復元するようにするには、nvidia カーネルモジュールに対して NVreg_PreserveVideoMemoryAllocations=1 カーネルモジュールパラメータを設定する必要があります。NVIDIA はこのパラメータをデフォルトで設定していませんが、一方 Arch Linux では、サポートされているドライバにおいてこのパラメータがデフォルトで設定されています。

また、nvidia-suspend.service サービス、nvidia-hibernate.service サービス、nvidia-resume.service サービスを有効化しておく必要があります。Arch Linux では、上流の要件に従って、サポートされているドライバにおいてこれらのサービスはデフォルトで有効化されています。

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

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

ドライバーの持続

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

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

YCbCr 4:2:0 サブサンプリングを強制する

古い出力規格の制限に悩まされているが、YUV 4:2:0 を使用することで問題を緩和できるような場合は、NVIDIA ドライバに YUV420 を強制するためのドキュメント化されていない X11 オプションがあります:

Option "ForceYUV420" "True"

これで、より高い解像度とリフレッシュレートを利用できますが、画質に悪影響を及ぼします。

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