「NVIDIA/ヒントとテクニック」の版間の差分
「Preserve video memory after suspend」を追加 |
同期 |
||
| (2人の利用者による、間の42版が非表示) | |||
| 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]] |
||
[[zh-hans:NVIDIA/提示和技巧]] |
|||
== ターミナルの解像度を修正する == |
== ターミナルの解像度を修正する == |
||
[[NVIDIA#fbdev]] がデフォルトで有効であるため、[[Linux コンソール]]は追加の設定無しでモニタのネイティブな解像度を使用するはずです。 |
|||
nouveau からドライバーを変えた場合、起動時のターミナルが低解像度で表示されるようになることがあります。 |
|||
{{ic|fbdev}} を無効化していたり、古いドライバを使用していたりする場合は、解像度が予想より小さい場合があります。回避策として、[[ブートローダー]]の設定で解像度を設定することができます。 |
|||
GRUB を使用している場合、[[GRUB/ヒントとテクニック#フレームバッファの解像度を設定する]]を見てください。 |
GRUB を使用している場合、[[GRUB/ヒントとテクニック#フレームバッファの解像度を設定する]]を見てください。 |
||
[[systemd-boot]] を使用している場合、{{ic|''esp'' |
[[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}} |
[[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 サーバーは何かしらのデフォルトの解像度 (通常であれば 640x480) にフォールバックします。これは、DVI/HDMI/DisplayPort 接続の TV をメインディスプレイとして使用していて TV がオフまたは切断されているときに X が起動すると問題になります。 |
||
NVIDIA に強制的に DFP を使わせるには、EDID のコピーをファイルシステムのどこかに保存して TV/DFP の EDID のかわりに X が保存したファイルを読み込むようにしてください。 |
|||
NVIDIA に正しい解像度を強制するには、EDID のコピーをファイルシステムのどこかに保存して、X がディスプレイから EDID を読み込まずにそのファイルをパースできるようにします。 |
|||
EDID を取得するには、nvidia-settings を起動します。ツリー形式で情報が表示されますが、今は設定は無視して GPU を選択し ("GPU-0" などという名前が付いているエントリを選択してください)、{{ic|DFP}} セクションをクリックして (例: {{ic|DFP-0}})、{{ic|Acquire Edid}} ボタンをクリックしてファイルをどこかに保存してください (例: {{ic|/etc/X11/dfp0.edid}})。 |
|||
EDID を取得するには、{{ic|nvidia-settings}} を起動します。ツリー形式で情報が表示されますが、今は設定は無視して GPU を選択し (対応するエントリは ''GPU-0'' などのような名前であるはずです)、''DFP'' セクションをクリックして (''DFP-0'' などのような名前です)、''Acquire Edid...'' ボタンをクリックしてファイルをどこかに保存してください (例: {{ic|/etc/X11/dfp0.edid}})。 |
|||
フロントエンドにマウスやキーボードが接続されていない場合、コマンドラインを使って EDID を取得することもできます。EDID ブロックも出力するように引数を指定して X サーバーを起動します: |
フロントエンドにマウスやキーボードが接続されていない場合、コマンドラインを使って EDID を取得することもできます。EDID ブロックも出力するように引数を指定して X サーバーを起動します: |
||
$ startx -- -logverbose 6 |
$ startx -- -logverbose 6 |
||
X サーバーの初期化が完了したら、サーバーを閉じて {{ic|/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 |
|||
X サーバーが初期化を完了したら、サーバーを閉じ、''nvidia-xconfig'' を使って [[Xorg#一般|Xorg のログファイル]]から EDID ブロックを抽出してください: |
|||
{{ic|xorg.conf}} を編集して {{ic|Device}} セクションに以下を追加: |
|||
Option "ConnectedMonitor" "DFP" |
|||
Option "CustomEDID" "DFP-0:/etc/X11/dfp0.edid" |
|||
{{ic|ConnectedMonitor}} オプションはドライバーに強制的に DFP を認識させます。{{ic|CustomEDID}} にはデバイスの EDID データを指定してください。TV/DFP が接続されているかのように X が起動するようになります。 |
|||
$ nvidia-xconfig --extract-edids-from-file ~/.local/share/xorg/Xorg.0.log --extract-edids-output-file ./dfp0.bin |
|||
ブート時に自動的にディスプレイマネージャを起動して適切な X ディスプレイが設定されてから TV の電源を入れることができます。 |
|||
Xorg の設定で以下を {{ic|Device}} セクションに追加してください: |
|||
Option "ModeValidation" "NoDFPNativeResolutionCheck" |
|||
Option "ConnectedMonitor" "DFP-0" |
|||
{{hc|/etc/X11/xorg.conf.d/20-nvidia.conf| |
|||
{{ic|NoDFPNativeResolutionCheck}} を設定することで NVIDIA はネイティブ解像度に適合しないモードも無効化しなくなります。 |
|||
Option "ConnectedMonitor" "DFP" |
|||
Option "CustomEDID" "DFP-0:/etc/X11/dfp0.bin" |
|||
}} |
|||
{{ic|ConnectedMonitor}} オプションはドライバーに強制的に DFP を認識させます。{{ic|CustomEDID}} にはデバイスの EDID データを指定してください。TV/DFP が接続されているかのように X が起動するようになります。 |
|||
ブート時に自動的にディスプレイマネージャを起動して適切な X ディスプレイが設定されてから TV の電源を入れることができます。 |
|||
== ヘッドレス (モニターなし) 解像度 == |
== ヘッドレス (モニターなし) 解像度 == |
||
| 91行目: | 94行目: | ||
EndSection |
EndSection |
||
ノートパソコンを使っている場合、[[acpid]] デーモンをインストールして有効化する |
ノートパソコンを使っている場合、代わりに [[acpid]] デーモンをインストールして有効化すると良いかもしれません。 |
||
== GPU の温度をシェルに表示する == |
== GPU の温度をシェルに表示する == |
||
| 99行目: | 102行目: | ||
=== nvidia-settings === |
=== nvidia-settings === |
||
GPU の温度をシェルに表示するには、以下のように |
GPU の温度をシェルに表示するには、以下のように ''nvidia-settings'' を使って下さい: |
||
$ nvidia-settings -q gpucoretemp |
|||
{{hc|$ 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 温度は |
上記の場合、ボードの GPU 温度は 49 °C になります。 |
||
''rrdtool'' や ''conky'' などのユーティリティで使うために温度だけを表示したいときは: |
|||
{{hc|$ nvidia-settings -q gpucoretemp -t|41}} |
|||
{{hc|$ nvidia-settings -q gpucoretemp -t|49}} |
|||
=== nvidia-smi === |
=== nvidia-smi === |
||
X を全く使わず 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 |
| 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 |
| 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 | |
|||
| |
| 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 | |
||
+-----------------------------------------+------------------------+----------------------+ |
|||
| 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 : |
Timestamp : Wed Feb 28 14:27:35 2024 |
||
Driver Version : |
Driver Version : 550.54.14 |
||
CUDA Version : 12.4 |
|||
Attached GPUs : 1 |
Attached GPUs : 1 |
||
GPU |
GPU 00000000:01:00.0 |
||
Temperature |
Temperature |
||
GPU Current Temp : |
GPU Current Temp : 49 C |
||
GPU |
GPU T.Limit Temp : N/A |
||
GPU |
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 カードの温度センサーにはアクセスできません。}} |
|||
{{Warning| オーバークロックによってハードウェアに永久的な損傷が発生するかもしれません。警告しましたよ。}} |
|||
たまに nvclock と nvidia-settings/nv-control が報告する温度が食い違うことがあります。nvclock の作者 (thunderbird) による [https://sourceforge.net/projects/nvclock/forums/forum/67426/topic/1906899 この投稿] によると、nvclock の値のほうが正確なようです。 |
|||
=== nvidia-settings からオーバークロックを有効化する === |
|||
== ログイン時にファンの速度を設定する == |
|||
{{Note| |
|||
''nvidia-settings''' のコンソールインターフェイスを使ってグラフィックカードのファンの速度を調整することができます。まずは Xorg 設定の {{ic|Device}} セクションで Coolbits オプションを {{ic|4}} か {{ic|5}}、または {{ic|12}} (fermi 以上) に設定してファンコントロールを有効にしてください: |
|||
* rootless モードで Xorg サーバを実行している場合、一部のオーバークロックの設定は適用できません。[[Xorg#root として Xorg を実行|Xorg を root として実行]]することを検討してください。 |
|||
* ''nvidia-settings'' は root として実行する必要があるかもしれません。 |
|||
* DRM カーネルモードセッティングを有効にすると Coolbits の値に関わらずオーバークロックができなくなる場合があります。 |
|||
}} |
|||
ドライバのバージョンによっては、一部のオーバークロック機能がデフォルトで有効になっています。一部のサポートされていないオーバークロック機能は {{ic|Device}} セクションで ''Coolbits'' オプションで有効化する必要があります: |
|||
Option "Coolbits" "''値''" |
|||
{{Tip| ''Coolbits'' オプションは、Xorg の設定ファイルを操作する ''nvidia-xconfig'' を使って簡単に設定できます: {{bc|1=# nvidia-xconfig --cool-bits=''value''}}}} |
|||
''Coolbits'' の値は2進数の構成ビットを足し合わせたものです。構成ビットは以下のとおりです: |
|||
* {{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|1}} (ビット0) - ''nvidia-settings'' の ''Clock Frequencies'' ページで古い(Fermi以前)コアをオーバークロックできるようにします。バージョン 343.13 で削除されました。 |
|||
* {{ic|2}} (ビット1) - このビットがセットされると、ドライバは「ビデオメモリの容量が異なる複数の GPU を使用するときに SLI の初期化を試みます。」バージョン 470.42.01 で削除されました。 |
|||
* {{ic|4}} (ビット2) - ''nvidia-settings'' の ''Thermal Monitor'' ページで GPU ファンの速度を手動設定できるようにします。バージョン 470.42.01 で削除されました。 |
|||
複数の機能を有効化するには ''Coolbits'' の値に上記の値を足し合わせてください。例えば、Fermi コアのオーバークロックとオーバーボルテージを有効化する場合は {{ic|Option "Coolbits" "24"}} をセットします。 |
|||
''Coolbits'' に関するドキュメントは {{ic|/usr/share/doc/nvidia/html/xconfigoptions.html}} と[https://download.nvidia.com/XFree86/Linux-x86_64/575.64/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]}} |
|||
=== 静的な 2D/3D クロックを設定する === |
|||
[[カーネルモジュールパラメータ]]を使用して PowerMizer を最大パフォーマンスレベルで有効化してください (この設定がないと VSync が機能しません): |
|||
{{hc|/etc/modprobe.d/nvidia.conf|2= |
|||
options nvidia NVreg_RegistryDwords="PerfLevelSrc=0x2222" |
|||
}} |
|||
=== GPU のブーストクロックを下げる === |
|||
[https://nouveau.freedesktop.org/CodeNames.html#NV140 Volta (NV140/GVXXX)] GPU 及びそれ以降では、クロックブーストが異なる方法で動作します。最大クロックはブート時に、サポートされている最も高い制限値に設定されます。これが望ましい動作である場合は、設定は必要ありません。 |
|||
これの欠点は、電力効率が低いことです。クロックが上がると、安定性のために電圧を上げる必要があります。その結果として、電力消費量、発熱、ファンの音量が非線形的に増加します。なので、ブーストクロックの制限を下げることで、電力効率を上げることができます。 |
|||
ブーストクロックの制限は ''nvidia-smi'' を使用して変更できます: |
|||
* サポートされているクロックレートを表示: {{bc|$ nvidia-smi -q -d SUPPORTED_CLOCKS}} |
|||
* 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% に低下しました。 |
|||
=== オーバークロックの設定を保存する === |
|||
通常、''nvidia-settings'' インターフェイスで設定したクロックと電圧のオフセットは保存されず、再起動すると消えてしまいます。幸い、プロプライエタリドライバにおいてオーバークロック用のインターフェイスを提供し、ユーザのオーバークロック設定を保存することが可能で、起動時に自動的に設定を適用するツールがあります。以下にその一部を挙げます: |
|||
* {{AUR|gwe}} - グラフィカル。デスクトップセッションの開始時に設定を適用します。 |
|||
* {{AUR|nvclock}} と {{AUR|systemd-nvclock-unit}} - グラフィカル。システムの起動時に設定を適用します。 |
|||
* {{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 制限 === |
|||
{{Accuracy|It seems that not all cards support this. Among the 3 cards available to me: a desktop 3080 Ti, a mobile 1650 MaxQ, and a mobile 500 Ada, this only worked on the 3080 Ti; on the two laptops I got "not supported for GPU" warnings. Is this feature unavailable for mobile GPUs?}} |
|||
最近の NVIDIA グラフィックカードは TDP と温度が制限内に収まるように周波数を調整します。パフォーマンスを上げるために TDP 制限を変更できます。これにより温度が上昇し、電力消費量が増加するでしょう。 |
|||
例えば、電力制限を 160.30W に設定するには: |
|||
# nvidia-smi -pl 160.30 |
|||
(ドライバの永続化なしで)電力制限を起動時に設定するには: |
|||
{{hc|/etc/systemd/system/nvidia-tdp.timer|2= |
|||
[Unit] |
|||
Description=Set NVIDIA power limit on boot |
|||
[Timer] |
|||
OnBootSec=5 |
|||
[Install] |
|||
WantedBy=timers.target |
|||
}} |
|||
{{hc|/etc/systemd/system/nvidia-tdp.service|2= |
|||
[Unit] |
|||
Description=Set NVIDIA power limit |
|||
[Service] |
|||
Type=oneshot |
|||
ExecStart=/usr/bin/nvidia-smi -pl 160.30 |
|||
}} |
|||
そして、{{ic|nvidia-tdp.timer}} を[[有効化]]してください。 |
|||
=== ログイン時にファンの速度を設定する === |
|||
{{Accuracy|GPU のファン速度を手動設定するには (たとえ Xorg が root として実行されていたとしても) ''nvidia-settings'' を root として実行する必要があるため、以下の方法はうまく行きません。}} |
|||
''nvidia-settings'' のコンソールインターフェイスを使ってグラフィックカードのファンの速度を調整することができます。まず、Xorg 設定の [[#nvidia-settings からオーバークロックを有効化する|Coolbits]] オプションでビット2を有効化していることを確認してください。 |
|||
Option "Coolbits" "4" |
|||
{{Note|GeForce 400/500 シリーズのカードではこの方法を使ってログイン時にファンの速度を設定することはできません。}} |
{{Note| 現在 GeForce 400/500 シリーズのカードではこの方法を使ってログイン時にファンの速度を設定することはできません。この方法では ''nvidia-settings'' を使って現在の X セッション内でファンのスピードを変更することしかできません。}} |
||
Xorg が起動した時にファンを調整するには以下の行を [[xinitrc]] ファイルに記述します。{{ic|''n''}} は設定したいファンの速度のパーセンテージに置き換えて下さい。 |
Xorg が起動した時にファンを調整するには以下の行を [[xinitrc]] ファイルに記述します。{{ic|''n''}} は設定したいファンの速度のパーセンテージに置き換えて下さい。 |
||
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/ |
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUTargetFanSpeed=''n''" |
||
GPU とファンの番号を増やすことで二番目の GPU を設定することもできます。 |
GPU とファンの番号を増やすことで二番目の GPU を設定することもできます。 |
||
| 197行目: | 316行目: | ||
複数のグラフィックカードのファン速度を調整できるようにしたい場合、以下のコマンドを実行: |
複数のグラフィックカードのファン速度を調整できるようにしたい場合、以下のコマンドを実行: |
||
$ nvidia-xconfig --enable-all-gpus |
$ nvidia-xconfig --enable-all-gpus |
||
$ nvidia-xconfig --cool-bits=4 |
$ 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 によって制御されません。}} |
|||
== 手動設定 == |
|||
=== NVML によるシンプルなオーバークロックスクリプト === |
|||
[[NVIDIA#最小設定|設定ファイル]]を編集することで ([[NVIDIA#自動設定|自動設定]]や [[NVIDIA#NVIDIA Settings|GUI]] では有効にできない) 設定を変更することができます。変更を反映するには Xorg サーバーを再起動させる必要があります。 |
|||
Nvidia Management Library (NVML) は、GPU のコアとメモリのクロックオフセットと電力制限値を管理できる API を提供しています。これを使うには、{{Pkg|python-nvidia-ml-py}} をインストールし、以下の Python スクリプトを所望の設定で使用してください。このスクリプトは、起動のたびに root として実行してオーバークロック/低電圧の設定を適用し直す必要があります。 |
|||
オプションの詳しい説明は [ftp://download.nvidia.com/XFree86/Linux-x86/355.11/README/README.txt NVIDIA Accelerated Linux Graphics Driver README and Installation Guide] を見てください。 |
|||
{{bc|1= |
|||
=== 起動時のロゴを無効にする === |
|||
#!/usr/bin/env python |
|||
from pynvml import * |
|||
{{ic|Device}} セクションの下に {{ic|"NoLogo"}} オプションを追加してください: |
|||
Option "NoLogo" "1" |
|||
nvmlInit() |
|||
=== モニターの検出を上書きする === |
|||
# 調節対象の GPU を指定する。以下でエラーが発生する場合や、複数の GPU が存在する場合、1 に設定するか、他の値を試してください |
|||
{{ic|Device}} セクションの下に {{ic|"ConnectedMonitor"}} オプションを追加することで X サーバーの起動時のモニター検出を上書きすることができます。それによって起動時間を大幅に早くすることが可能です。利用可能なオプション: {{ic|"CRT"}} (アナログ接続), {{ic|"DFP"}} (デジタルモニター), {{ic|"TV"}} (テレビ)。 |
|||
myGPU = nvmlDeviceGetHandleByIndex(0) |
|||
# 以下の行の "000" の部分を所望の GPU クロックオフセット値に置き換えてください。 |
|||
以下の設定をすることで NVIDIA ドライバーは起動時のチェックを迂回しモニターを DFP と認識します: |
|||
nvmlDeviceSetGpcClkVfOffset(myGPU,000) |
|||
Option "ConnectedMonitor" "DFP" |
|||
{{Note|ディスプレイがフラットパネルだとしても15ピンの VGA 接続をしている場合は "CRT" を使ってください。"DFP" は DVI, HDMI, DisplayPort などのデジタル接続で使用します。}} |
|||
# 以下の行の "000" の部分を、所望のメモリクロックオフセット値の「2倍」に置き換えてください。 |
|||
=== 輝度調整を有効にする === |
|||
# 例えば、オフセットが 500 である場合、以下の行には 1000 と記述してください。 |
|||
nvmlDeviceSetMemClkVfOffset(myGPU,000) |
|||
# 以下に電力制限値を mW で設定してください。例えば、216W は 216000 (mW) になります。電力制限値を調整したくない場合は以下の行を削除してください。 |
|||
{{ic|Device}} セクションの下に追加してください: |
|||
nvmlDeviceSetPowerManagementLimit(myGPU, 000000) |
|||
Option "RegistryDwords" "EnableBrightnessControl=1" |
|||
}} |
|||
=== NVML で低電圧化 === |
|||
上記のオプションで輝度のコントロールが機能しない場合、{{AUR|nvidia-bl-dkms}} をインストールしてください。 |
|||
NVML API を用いることで GPU の低電圧化もできます。これにより、電力消費量を減らし、温度を下げることができます。パフォーマンスのロスは最小限であり、それどころか逆にパフォーマンスが向上することもあります。特にノート PC においては、低電圧化が望ましいかもしれません。 |
|||
{{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 を変更しても明るさが変更されない]]を参照。}} |
|||
{{Note|極度に低電圧化すると、深刻な安定性の問題を生じる可能性があります。特に、ファームウェアから直接設定した場合、コンピュータが起動不能になることもあります。一部のマザーボードには、これを防ぐための低電圧保護の設定が存在します。低電圧化を行う際は、この設定を事前に無効にしておく必要があります (Alienware m16 R1 がその例です)。(低電圧化による) 恩恵は、マザーボードのブランドとモデルにより異なります。 |
|||
=== SLI を有効にする === |
|||
さらに、オーバークロックの場合と同じく、電圧は少しずつ調整して、そのたびに[[ストレステスト|システムの安定性をテスト]]するべきです。}} |
|||
{{Warning| |
|||
* 2011年5月7日現在、SLI を有効にすると GNOME 3 で動画パフォーマンスが落ちます。 |
|||
* GTX 10xx シリーズ (1080, 1070, 1060 など) では 2-way SLI しか対応していません。CUDA/OpenCL アプリケーションでは 3-way や 4-way の SLI をすることもできますが、OpenGL アプリケーションでは大抵の場合上手く行きません。}} |
|||
{{Pkg|python-nvidia-ml-py}} を[[インストール]]し、以下のスクリプトを[[作成]]、そして[[実行可能属性|実行可能に]]してください。 |
|||
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] を見て下さい。 |
|||
{{hc|/usr/local/sbin/nvidia-undervolt.py|2= |
|||
まず {{ic|lspci}} を使って一番目の GPU の PCI Bus ID を確認してください: |
|||
#!/bin/env python |
|||
{{hc|<nowiki>$ lspci | grep VGA</nowiki>| |
|||
03:00.0 VGA compatible controller: nVidia Corporation G92 [GeForce 8800 GTS 512] (rev a2) |
|||
from pynvml import * |
|||
05:00.0 VGA compatible controller: nVidia Corporation G92 [GeForce 8800 GTS 512] (rev a2) |
|||
from ctypes import byref |
|||
nvmlInit() |
|||
# 電圧を調整する GPU の選択。複数 GPU の環境でエラーになる場合は、1など他の値に設定してください。 |
|||
myGPU = nvmlDeviceGetHandleByIndex(0) |
|||
##print(f"myGPU value: {myGPU}") |
|||
# 許容最小・最大電力の取得。 |
|||
##min_power, max_power = nvmlDeviceGetPowerManagementLimitConstraints(myGPU) |
|||
##print(f"Allowed range: {min_power} mW to {max_power} mW") |
|||
# この行で電力制限を mW 単位で設定できます (例: 216W は 216000 になります)。 |
|||
# この値は、許容最小・最大電力の制限内に収まっていなければなりません。 |
|||
# 電力制限を設定しない場合は、以下の行を削除あるいはコメントアウトしてください。 |
|||
nvmlDeviceSetPowerManagementLimit(myGPU, 000000) |
|||
# 許容最小・最大クロックの定義。 |
|||
# GPU によってサポートされているクロックは次のコマンドで確認できます: |
|||
# nvidia-smi -q -d SUPPORTED_CLOCKS |
|||
nvmlDeviceSetGpuLockedClocks(myGPU,''210'',''2340'') |
|||
#################################### |
|||
# ============ P0 State ============ |
|||
#################################### |
|||
# ============ メモリ ============ |
|||
# 必要に応じて以下のコードをアンコメント、編集してください。 |
|||
# 注意: メモリクロックのオフセットは「2倍する」必要があります。 |
|||
# 例えば、オフセットを 500 に設定したい場合は、 |
|||
# clockOffsetMHz に 1000 を代入してください。 |
|||
##infoMemP0 = c_nvmlClockOffset_t() |
|||
##infoMemP0.version = nvmlClockOffset_v1 |
|||
##infoMemP0.type = NVML_CLOCK_MEM |
|||
##infoMemP0.pstate = NVML_PSTATE_0 |
|||
##infoMemP0.clockOffsetMHz = ''2000'' |
|||
### このオフセットは、メモリをどれだけより速くするかを表しています。 |
|||
### 例えば、この場合、メモリは 8000 MHz ではなく、 |
|||
### 8000 + (2000 / 2) = 9000 MHz で動作します。 |
|||
##nvmlDeviceSetClockOffsets(myGPU, byref(infoMemP0)) |
|||
# ============ グラフィックス ============= |
|||
infoGraphicsP0 = c_nvmlClockOffset_t() |
|||
infoGraphicsP0.version = nvmlClockOffset_v1 |
|||
infoGraphicsP0.type = NVML_CLOCK_GRAPHICS |
|||
infoGraphicsP0.pstate = NVML_PSTATE_0 |
|||
infoGraphicsP0.clockOffsetMHz = ''270'' |
|||
## このオフセットの値は、周波数-電圧曲線が 270 MHz 上に上がることを意味します。 |
|||
## 例えば、本来 2070 MHz で動作する電圧では、 |
|||
## この設定により 2070 + 270 = 2340 MHz で動作するようになります。 |
|||
nvmlDeviceSetClockOffsets(myGPU, byref(infoGraphicsP0)) |
|||
nvmlShutdown() |
|||
}} |
}} |
||
使用した関数の詳細は [https://docs.nvidia.com/deploy/nvml-api/index.html NVML API ドキュメント] Section 5.18 にあります。[https://www.reddit.com/r/linux_gaming/comments/1fm17ea/comment/lo7mo09/ この Reddit の投稿]では、低電圧化をクロックオフセットで行う理由について説明されています。 |
|||
{{ic|Device}} セクションの下に BusID を追加してください (上記の例では3): |
|||
BusID "PCI:3:0:0" |
|||
このスクリプトは、GPU の最も高い [https://docs.nvidia.com/gameworks/content/gameworkslibrary/coresdk/nvapi/group__gpupstate.html P-state] における低電圧化しか行いません。P0 以外の P-state で設定したい場合は、[https://www.reddit.com/r/linux_gaming/comments/1fm17ea/comment/n4vmb4k この Reddit の投稿]を参考にしてください。 |
|||
{{Note|指定するときの形式は重要です。BusID の値は {{ic|"PCI:<BusID>:0:0"}} と指定してください。}} |
|||
{{Note|残念ながら、一部の GPU は、NVML API による電力制限の変更をサポートしていません。コマンド {{ic|nvidia-smi -pl ''000''}} を root ユーザとして実行することで、サポートの有無を確認できます。 |
|||
使用したい SLI レンダリングモードの値を {{ic|Screen}} セクションの下に追加してください: |
|||
Option "SLI" "AA" |
|||
サポートがない場合は、スクリプトから電力制限の部分を削除あるいはコメントアウトし、最後の手段として [[#Dynamic_Boost|Dynamic Boost を設定]]する方法があります。}} |
|||
以下の表は利用できるレンダリングモードを示しています。 |
|||
スクリプトを root ユーザとして手動で実行して GPU に設定を適用させ、[[ストレステスト|設定のテスト]]を行ってください。'''テストして問題が無いこと (つまり、設定が安定している) を確認せずに、設定を永続化しないでください。''' |
|||
{| class="wikitable" |
|||
! 値 !! 挙動 |
|||
|- |
|||
| 0, no, off, false, Single || レンダリングの際には単一の GPU だけを使用。 |
|||
|- |
|||
| 1, yes, on, true, Auto || SLI を有効にしてドライバーに適切なレンダリングモードを自動で選択させる。 |
|||
|- |
|||
| AFR || SLI を有効にして alternate フレームレンダリングモードを使用する。 |
|||
|- |
|||
| SFR || SLI を有効にして split フレームレンダリングモードを使用する。 |
|||
|- |
|||
| AA || SLI を有効にして SLI アンチエイリアスを使用する。これをフルシーンアンチエイリアスと一緒に使うことで見栄えが良くなります。 |
|||
|} |
|||
良い設定値を見つけたら、起動毎に設定を適用させる必要があります。一つの方法は、systemd サービスです: |
|||
もしくは、{{ic|nvidia-xconfig}} ユーティリティを使って、コマンドによって {{ic|xorg.conf}} に変更を挿入することもできます: |
|||
# nvidia-xconfig --busid=PCI:3:0:0 --sli=AA |
|||
{{hc|/etc/systemd/system/nvidia-undervolt.service|2= |
|||
シェルから SLI モードが有効になっているか確認するには: |
|||
[Unit] |
|||
{{hc|<nowiki>$ nvidia-settings -q all | grep SLIMode</nowiki>| |
|||
Description=Undervolt the NVIDIA GPU |
|||
Attribute 'SLIMode' (arch:0.0): AA |
|||
'SLIMode' is a string attribute. |
|||
[Service] |
|||
'SLIMode' is a read-only attribute. |
|||
Type=oneshot |
|||
'SLIMode' can use the following target types: X Screen. |
|||
ExecStart=/bin/python ''/usr/local/sbin/''nvidia-undervolt.py |
|||
StandardOutput=journal |
|||
StandardError=journal |
|||
[Install] |
|||
WantedBy=graphical.target |
|||
}} |
}} |
||
最後に、システムの起動時に設定を適用するために、このサービスを[[有効化]]してください。 |
|||
{{Warning|SLI を有効にした後、xorg の起動時にシステムがフリーズしたり反応しなくなることがあります。再起動する前にディスプレイマネージャを無効にすることを推奨します。}} |
|||
== カーネルモジュールパラメータ == |
|||
=== オーバークロックを有効にする === |
|||
一部のオプションはカーネルモジュールパラメータから設定できます。パラメータの完全なリストは {{ic|modinfo nvidia}} を実行するか {{ic|nv-reg.h}} を見てください。[[Gentoo:NVidia/nvidia-drivers/ja#カーネルモジュールのパラメーター]] も見てください。 |
|||
{{Warning|オーバークロックはハードウェアにダメージを与える可能性があり、このページの著者はメーカーによって決められた仕様の範囲外で製品を扱うことについて何も責任を負えないので注意してください。}} |
|||
例えば、以下を有効化すると 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]] を参照)。あなたのシステムでこの機能がサポートされている場合、パフォーマンスが向上するはずです。 |
|||
GPU やメモリのオーバークロックは {{ic|Device}} セクションの ''Coolbits'' オプションによって制御され、サポートされない機能が使えるようになります: |
|||
Option "Coolbits" "''value''" |
|||
{{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 曰く: |
|||
:結果として生じるビデオメモリの内容の消失は、ユーザスペースの NVIDIA ドライバや一部のアプリケーションによって部分的に補われます。しかし、電源管理サイクルの終了時にレンダリングの破損やアプリケーションのクラッシュなどの機能不全が発生する可能性があります。 |
|||
"まだ実験段階の" インターフェイスを使用すれば、(ディスクまたは RAM に十分な領域があれば) ビデオメモリ全てを保存できるようになります。 |
|||
ビデオメモリの内容を全て保存し復元するようにするには、{{ic|nvidia}} カーネルモジュールに対して {{ic|1=NVreg_UseKernelSuspendNotifiers=1}} [[カーネルモジュールパラメータ]]を設定する必要があります。NVIDIA はこのパラメータをデフォルトで設定していませんが、一方 Arch Linux では、サポートされているドライバにおいてこのパラメータがデフォルトで設定されており、ビデオメモリはデフォルトで保持されます。 |
|||
{{ic|NVreg_UseKernelSuspendNotifiers}} が有効であるかを調べるには、以下を実行してください: |
|||
# sort /proc/driver/nvidia/params |
|||
{{ic|UseKernelSuspendNotifiers: 1}} という行と、{{ic|TemporaryFilePath: "/var/tmp"}} という行があるはずです (これらのパラメータについては以下で説明されています)。 |
|||
上流の要件通り、サポートされているドライバ上では、サービス {{ic|nvidia-suspend.service}}、{{ic|nvidia-hibernate.service}}、{{ic|nvidia-resume.service}} はデフォルトで無効化されています。バージョン 595 以降のオープンソースなカーネルモジュールでは、ビデオメモリの保持は、カーネルの suspend notifier によって処理されます。これにより、NVIDIA のサスペンド/ハイバネートサービスは必要ありません。 |
|||
詳細は [https://download.nvidia.com/XFree86/Linux-x86_64/575.64/README/powermanagement.html NVIDIA のドキュメント]を参照してください。 |
|||
{{Note| |
|||
* [[NVIDIA#DRM カーネルモード設定|Early KMS]] を使用する場合 (つまり、{{ic|nvidia}} モジュールのロードが initramfs の段階で起こる場合)、モジュールは {{ic|NVreg_TemporaryFilePath}} (前回のビデオメモリを保持しているパス) にアクセスできません。よって、ハイバネートを使用する場合は、early KMS を使用するべきではありません。 |
|||
* [[カーネルモジュール#/etc/modprobe.d/ 内のファイルを使う]] にある通り、early KMS を使用している場合は [[initramfs を再生成する]]必要があります。 |
|||
* 上流のデフォルトでは、ビデオメモリの内容は ([[tmpfs]] である) {{ic|/tmp}} に保存されます。NVIDIA は、最高のパフォーマンスを得るために[https://download.nvidia.com/XFree86/Linux-x86_64/575.64/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 ビデオメモリの容量を一覧表示できます。 |
|||
}} |
|||
== Dynamic Boost == |
|||
{{Tip|''Coolbits'' オプションは Xorg の設定ファイルを変更する ''nvidia-xconfig'' で簡単に変えることができます: {{ic|1=# nvidia-xconfig --cool-bits=''value''}}。}} |
|||
主なシステム要件は、Ampere (及びそれより新しい) GPU が搭載されているラップトップであることです。 |
|||
''Coolbits'' の値は2進法でビットを立てた合計になります。それぞれのビットの意味は: |
|||
Dynamic Boost は、システムのワークロードに応じて GPU 及び CPU の電力消費を管理する、システム全体で動作する電力制御ソフトウェアです。[https://download.nvidia.com/XFree86/Linux-x86_64/575.64/README/dynamicboost.html] 適宜、電力制限を上げることによって、特に GPU を使用するアプリケーションでパフォーマンスを向上させることができます。 |
|||
* {{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]。 |
|||
複数の機能を有効にするには、合計した ''Coolbits'' の値を追加します。例えば、オーバークロックと Fermi コアの電圧アップを有効にするには、{{ic|Option "Coolbits" "24"}} と設定します。 |
|||
詳細は [[CPU 周波数スケーリング#nvidia-powerd]] を参照してください。 |
|||
''Coolbits'' のドキュメントは {{ic|/usr/share/doc/nvidia/html/xconfigoptions.html}} にあります。''Coolbits'' に関するドライバーバージョン 355.11 のドキュメントはオンラインで [ftp://download.nvidia.com/XFree86/Linux-x86/355.11/README/xconfigoptions.html こちら] から見ることができます。 |
|||
{{Tip|電力制限を手動で設定できない人にとっては特に役立つでしょう。[[NVIDIA Optimus#消費電力 (TDP) が低いままになる]] を参照してください。}} |
|||
{{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]}} |
|||
== ドライバーの持続 == |
|||
==== 静的な 2D/3D クロックを設定する ==== |
|||
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|Device}} セクションに設定すると PowerMizer がパフォーマンス最高レベルで有効になります (この行がないと VSync が動作しません): |
|||
Option "RegistryDwords" "PerfLevelSrc=0x2222" |
|||
ブート時に持続デーモンを開始するには {{ic|nvidia-persistenced.service}} を[[有効化]]してください。手動での使用については[https://docs.nvidia.com/deploy/driver-persistence/index.html#usage 上流のドキュメント]をご覧ください。 |
|||
== Preserve video memory after suspend == |
|||
== YCbCr 4:2:0 サブサンプリングを強制する == |
|||
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.'' |
|||
[[Wikipedia:HDMI#Refresh frequency limits for standard video|古い出力規格の制限]]に悩まされているが、YUV 4:2:0 を使用することで問題を緩和できるような場合は、NVIDIA ドライバに YUV420 を強制するためのドキュメント化されていない X11 オプションがあります: |
|||
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. |
|||
Option "ForceYUV420" "True" |
|||
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. |
|||
これで、より高い解像度とリフレッシュレートを利用できますが、画質に悪影響を及ぼします。 |
|||
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: |
|||
== GPU を使ってレンダリングするようにアプリケーションを設定する == |
|||
options nvidia NVreg_PreserveVideoMemoryAllocations=1 NVreg_TemporaryFilePath=/tmp-nvidia |
|||
[[PRIME#GPU を使ってレンダリングするようにアプリケーションを設定する]] を参照してください。 |
|||
Feel free to replace "/tmp-nvidia" in the previous line with a path within your desired file system. |
|||
{{TranslationStatus|NVIDIA/Tips and tricks|2026-03-29|870075}} |
|||
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}}. |
|||
2026年3月29日 (日) 10:18時点における最新版
ターミナルの解像度を修正する
NVIDIA#fbdev がデフォルトで有効であるため、Linux コンソールは追加の設定無しでモニタのネイティブな解像度を使用するはずです。
fbdev を無効化していたり、古いドライバを使用していたりする場合は、解像度が予想より小さい場合があります。回避策として、ブートローダーの設定で解像度を設定することができます。
GRUB を使用している場合、GRUB/ヒントとテクニック#フレームバッファの解像度を設定するを見てください。
systemd-boot を使用している場合、esp/loader/loader.conf 内で console-mode を設定してください。詳しくは systemd-boot#ローダー設定 をご覧ください。[1] [2]
rEFInd を使用している場合、esp/EFI/refind/refind.conf で use_graphics_for +,linux を設定してください。ちょっとした注意事項としては、これによりブート中にカーネルパラメータが表示されなくなります。
TV 出力を使う
Wikibooks:NVIDIA/TV-OUT を見てください。
X で TV (DFP) を唯一のディスプレイとして使う
モニターが自動的に検出されない場合、X サーバーは何かしらのデフォルトの解像度 (通常であれば 640x480) にフォールバックします。これは、DVI/HDMI/DisplayPort 接続の TV をメインディスプレイとして使用していて TV がオフまたは切断されているときに X が起動すると問題になります。
NVIDIA に正しい解像度を強制するには、EDID のコピーをファイルシステムのどこかに保存して、X がディスプレイから EDID を読み込まずにそのファイルをパースできるようにします。
EDID を取得するには、nvidia-settings を起動します。ツリー形式で情報が表示されますが、今は設定は無視して GPU を選択し (対応するエントリは GPU-0 などのような名前であるはずです)、DFP セクションをクリックして (DFP-0 などのような名前です)、Acquire Edid... ボタンをクリックしてファイルをどこかに保存してください (例: /etc/X11/dfp0.edid)。
フロントエンドにマウスやキーボードが接続されていない場合、コマンドラインを使って EDID を取得することもできます。EDID ブロックも出力するように引数を指定して X サーバーを起動します:
$ startx -- -logverbose 6
X サーバーが初期化を完了したら、サーバーを閉じ、nvidia-xconfig を使って Xorg のログファイルから EDID ブロックを抽出してください:
$ nvidia-xconfig --extract-edids-from-file ~/.local/share/xorg/Xorg.0.log --extract-edids-output-file ./dfp0.bin
Xorg の設定で以下を Device セクションに追加してください:
/etc/X11/xorg.conf.d/20-nvidia.conf
Option "ConnectedMonitor" "DFP" Option "CustomEDID" "DFP-0:/etc/X11/dfp0.bin"
ConnectedMonitor オプションはドライバーに強制的に DFP を認識させます。CustomEDID にはデバイスの EDID データを指定してください。TV/DFP が接続されているかのように X が起動するようになります。
ブート時に自動的にディスプレイマネージャを起動して適切な X ディスプレイが設定されてから TV の電源を入れることができます。
ヘッドレス (モニターなし) 解像度
ヘッドレスモードでは解像度は VNC や Steam Link で利用される 640x480 に落ちます。より高い解像度(例えば、1920x1080)で開始するには、xorg.conf 内の Screen サブセクションの下にある Virtual エントリ で指定します:
Section "Screen"
[...]
SubSection "Display"
Depth 24
Virtual 1920 1080
EndSubSection
EndSection
電源を確認
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 の温度をシェルに表示する
GPU の温度を確認する方法は3つあります。nvidia-settings は X を使用する必要があります。X を使っていない場合は nvidia-smi や nvclock による方法を使って下さい。また、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 になります。
rrdtool や conky などのユーティリティで使うために温度だけを表示したいときは:
$ 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
rrdtool や conky などのユーティリティで使うために温度だけを取得したいときは:
$ nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits
49
nvclock
nvclockAUR パッケージをインストールしてください。
たまに nvclock と nvidia-settings/nv-control が報告する温度が食い違うことがあります。nvclock の作者 (thunderbird) による この投稿 によると、nvclock の値のほうが正確なようです。
オーバークロックと冷却
nvidia-settings からオーバークロックを有効化する
- rootless モードで Xorg サーバを実行している場合、一部のオーバークロックの設定は適用できません。Xorg を root として実行することを検討してください。
- nvidia-settings は root として実行する必要があるかもしれません。
- DRM カーネルモードセッティングを有効にすると Coolbits の値に関わらずオーバークロックができなくなる場合があります。
ドライバのバージョンによっては、一部のオーバークロック機能がデフォルトで有効になっています。一部のサポートされていないオーバークロック機能は Device セクションで Coolbits オプションで有効化する必要があります:
Option "Coolbits" "値"
# nvidia-xconfig --cool-bits=value
Coolbits の値は2進数の構成ビットを足し合わせたものです。構成ビットは以下のとおりです:
8(ビット3) - nvidia-settings の PowerMizer ページの追加のオーバークロック機能を有効化します。Fermi や Fermi より新しいアーキテクチャでバージョン 337.12 から利用可能です。[3]16(ビット4) - nvidia-settings の CLI のオプションを使ってオーバーボルテージできるようにします。Fermi や Fermi より新しいアーキテクチャでバージョン 346.16 から利用可能です。[4]
サポートされていないバージョンのドライバを使用している場合は、以下のビットも使用する必要があるかもしれません:
1(ビット0) - nvidia-settings の Clock Frequencies ページで古い(Fermi以前)コアをオーバークロックできるようにします。バージョン 343.13 で削除されました。2(ビット1) - このビットがセットされると、ドライバは「ビデオメモリの容量が異なる複数の GPU を使用するときに SLI の初期化を試みます。」バージョン 470.42.01 で削除されました。4(ビット2) - nvidia-settings の Thermal Monitor ページで GPU ファンの速度を手動設定できるようにします。バージョン 470.42.01 で削除されました。
複数の機能を有効化するには Coolbits の値に上記の値を足し合わせてください。例えば、Fermi コアのオーバークロックとオーバーボルテージを有効化する場合は Option "Coolbits" "24" をセットします。
Coolbits に関するドキュメントは /usr/share/doc/nvidia/html/xconfigoptions.html とここにあります。
静的な 2D/3D クロックを設定する
カーネルモジュールパラメータを使用して PowerMizer を最大パフォーマンスレベルで有効化してください (この設定がないと VSync が機能しません):
/etc/modprobe.d/nvidia.conf
options nvidia NVreg_RegistryDwords="PerfLevelSrc=0x2222"
GPU のブーストクロックを下げる
Volta (NV140/GVXXX) 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 - グラフィカル。デスクトップセッションの開始時に設定を適用します。
- nvclockAUR と systemd-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を有効化していることを確認してください。
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" &
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
複数のグラフィックカードのファン速度を調整できるようにしたい場合、以下のコマンドを実行:
$ nvidia-xconfig --enable-all-gpus $ nvidia-xconfig --cool-bits=4
NVML によるシンプルなオーバークロックスクリプト
Nvidia Management Library (NVML) は、GPU のコアとメモリのクロックオフセットと電力制限値を管理できる API を提供しています。これを使うには、python-nvidia-ml-py をインストールし、以下の Python スクリプトを所望の設定で使用してください。このスクリプトは、起動のたびに root として実行してオーバークロック/低電圧の設定を適用し直す必要があります。
#!/usr/bin/env python from pynvml import * nvmlInit() # 調節対象の GPU を指定する。以下でエラーが発生する場合や、複数の GPU が存在する場合、1 に設定するか、他の値を試してください myGPU = nvmlDeviceGetHandleByIndex(0) # 以下の行の "000" の部分を所望の GPU クロックオフセット値に置き換えてください。 nvmlDeviceSetGpcClkVfOffset(myGPU,000) # 以下の行の "000" の部分を、所望のメモリクロックオフセット値の「2倍」に置き換えてください。 # 例えば、オフセットが 500 である場合、以下の行には 1000 と記述してください。 nvmlDeviceSetMemClkVfOffset(myGPU,000) # 以下に電力制限値を mW で設定してください。例えば、216W は 216000 (mW) になります。電力制限値を調整したくない場合は以下の行を削除してください。 nvmlDeviceSetPowerManagementLimit(myGPU, 000000)
NVML で低電圧化
NVML API を用いることで GPU の低電圧化もできます。これにより、電力消費量を減らし、温度を下げることができます。パフォーマンスのロスは最小限であり、それどころか逆にパフォーマンスが向上することもあります。特にノート PC においては、低電圧化が望ましいかもしれません。
python-nvidia-ml-py をインストールし、以下のスクリプトを作成、そして実行可能にしてください。
/usr/local/sbin/nvidia-undervolt.py
#!/bin/env python
from pynvml import *
from ctypes import byref
nvmlInit()
# 電圧を調整する GPU の選択。複数 GPU の環境でエラーになる場合は、1など他の値に設定してください。
myGPU = nvmlDeviceGetHandleByIndex(0)
##print(f"myGPU value: {myGPU}")
# 許容最小・最大電力の取得。
##min_power, max_power = nvmlDeviceGetPowerManagementLimitConstraints(myGPU)
##print(f"Allowed range: {min_power} mW to {max_power} mW")
# この行で電力制限を mW 単位で設定できます (例: 216W は 216000 になります)。
# この値は、許容最小・最大電力の制限内に収まっていなければなりません。
# 電力制限を設定しない場合は、以下の行を削除あるいはコメントアウトしてください。
nvmlDeviceSetPowerManagementLimit(myGPU, 000000)
# 許容最小・最大クロックの定義。
# GPU によってサポートされているクロックは次のコマンドで確認できます:
# nvidia-smi -q -d SUPPORTED_CLOCKS
nvmlDeviceSetGpuLockedClocks(myGPU,210,2340)
####################################
# ============ P0 State ============
####################################
# ============ メモリ ============
# 必要に応じて以下のコードをアンコメント、編集してください。
# 注意: メモリクロックのオフセットは「2倍する」必要があります。
# 例えば、オフセットを 500 に設定したい場合は、
# clockOffsetMHz に 1000 を代入してください。
##infoMemP0 = c_nvmlClockOffset_t()
##infoMemP0.version = nvmlClockOffset_v1
##infoMemP0.type = NVML_CLOCK_MEM
##infoMemP0.pstate = NVML_PSTATE_0
##infoMemP0.clockOffsetMHz = 2000
### このオフセットは、メモリをどれだけより速くするかを表しています。
### 例えば、この場合、メモリは 8000 MHz ではなく、
### 8000 + (2000 / 2) = 9000 MHz で動作します。
##nvmlDeviceSetClockOffsets(myGPU, byref(infoMemP0))
# ============ グラフィックス =============
infoGraphicsP0 = c_nvmlClockOffset_t()
infoGraphicsP0.version = nvmlClockOffset_v1
infoGraphicsP0.type = NVML_CLOCK_GRAPHICS
infoGraphicsP0.pstate = NVML_PSTATE_0
infoGraphicsP0.clockOffsetMHz = 270
## このオフセットの値は、周波数-電圧曲線が 270 MHz 上に上がることを意味します。
## 例えば、本来 2070 MHz で動作する電圧では、
## この設定により 2070 + 270 = 2340 MHz で動作するようになります。
nvmlDeviceSetClockOffsets(myGPU, byref(infoGraphicsP0))
nvmlShutdown()
使用した関数の詳細は NVML API ドキュメント Section 5.18 にあります。この Reddit の投稿では、低電圧化をクロックオフセットで行う理由について説明されています。
このスクリプトは、GPU の最も高い P-state における低電圧化しか行いません。P0 以外の P-state で設定したい場合は、この Reddit の投稿を参考にしてください。
nvidia-smi -pl 000 を root ユーザとして実行することで、サポートの有無を確認できます。
サポートがない場合は、スクリプトから電力制限の部分を削除あるいはコメントアウトし、最後の手段として Dynamic Boost を設定する方法があります。スクリプトを root ユーザとして手動で実行して GPU に設定を適用させ、設定のテストを行ってください。テストして問題が無いこと (つまり、設定が安定している) を確認せずに、設定を永続化しないでください。
良い設定値を見つけたら、起動毎に設定を適用させる必要があります。一つの方法は、systemd サービスです:
/etc/systemd/system/nvidia-undervolt.service
[Unit] Description=Undervolt the NVIDIA GPU [Service] Type=oneshot ExecStart=/bin/python /usr/local/sbin/nvidia-undervolt.py StandardOutput=journal StandardError=journal [Install] WantedBy=graphical.target
最後に、システムの起動時に設定を適用するために、このサービスを有効化してください。
カーネルモジュールパラメータ
一部のオプションはカーネルモジュールパラメータから設定できます。パラメータの完全なリストは 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"
サスペンド後にビデオメモリを保持する
デフォルトでは、システムのサスペンドと復帰時に NVIDIA の Linux ドライバーは必須のビデオメモリの割り当てのみを保存し復元します。NVIDIA 曰く:
- 結果として生じるビデオメモリの内容の消失は、ユーザスペースの NVIDIA ドライバや一部のアプリケーションによって部分的に補われます。しかし、電源管理サイクルの終了時にレンダリングの破損やアプリケーションのクラッシュなどの機能不全が発生する可能性があります。
"まだ実験段階の" インターフェイスを使用すれば、(ディスクまたは RAM に十分な領域があれば) ビデオメモリ全てを保存できるようになります。
ビデオメモリの内容を全て保存し復元するようにするには、nvidia カーネルモジュールに対して NVreg_UseKernelSuspendNotifiers=1 カーネルモジュールパラメータを設定する必要があります。NVIDIA はこのパラメータをデフォルトで設定していませんが、一方 Arch Linux では、サポートされているドライバにおいてこのパラメータがデフォルトで設定されており、ビデオメモリはデフォルトで保持されます。
NVreg_UseKernelSuspendNotifiers が有効であるかを調べるには、以下を実行してください:
# sort /proc/driver/nvidia/params
UseKernelSuspendNotifiers: 1 という行と、TemporaryFilePath: "/var/tmp" という行があるはずです (これらのパラメータについては以下で説明されています)。
上流の要件通り、サポートされているドライバ上では、サービス nvidia-suspend.service、nvidia-hibernate.service、nvidia-resume.service はデフォルトで無効化されています。バージョン 595 以降のオープンソースなカーネルモジュールでは、ビデオメモリの保持は、カーネルの suspend notifier によって処理されます。これにより、NVIDIA のサスペンド/ハイバネートサービスは必要ありません。
詳細は NVIDIA のドキュメントを参照してください。
- Early KMS を使用する場合 (つまり、
nvidiaモジュールのロードが initramfs の段階で起こる場合)、モジュールはNVreg_TemporaryFilePath(前回のビデオメモリを保持しているパス) にアクセスできません。よって、ハイバネートを使用する場合は、early KMS を使用するべきではありません。 - カーネルモジュール#/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 ビデオメモリの容量を一覧表示できます。
Dynamic Boost
主なシステム要件は、Ampere (及びそれより新しい) GPU が搭載されているラップトップであることです。
Dynamic Boost は、システムのワークロードに応じて GPU 及び CPU の電力消費を管理する、システム全体で動作する電力制御ソフトウェアです。[8] 適宜、電力制限を上げることによって、特に GPU を使用するアプリケーションでパフォーマンスを向上させることができます。
詳細は CPU 周波数スケーリング#nvidia-powerd を参照してください。
ドライバーの持続
NVIDIA はブート時に任意で実行できるデーモンを用意しています。標準的な単一 GPU の X デスクトップ環境では持続デーモンは必要ではなく、むしろ問題を引き起こします [9]。詳細については NVIDIA ドキュメントの Driver Persistence 章をご覧ください。
ブート時に持続デーモンを開始するには nvidia-persistenced.service を有効化してください。手動での使用については上流のドキュメントをご覧ください。
YCbCr 4:2:0 サブサンプリングを強制する
古い出力規格の制限に悩まされているが、YUV 4:2:0 を使用することで問題を緩和できるような場合は、NVIDIA ドライバに YUV420 を強制するためのドキュメント化されていない X11 オプションがあります:
Option "ForceYUV420" "True"
これで、より高い解像度とリフレッシュレートを利用できますが、画質に悪影響を及ぼします。
GPU を使ってレンダリングするようにアプリケーションを設定する
PRIME#GPU を使ってレンダリングするようにアプリケーションを設定する を参照してください。