「NVIDIA/ヒントとテクニック」の版間の差分
(「Preserve video memory after suspend」を追加) |
(同期) |
||
(2人の利用者による、間の38版が非表示) | |||
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'' |
+ | [[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 サーバーは CRT-0 にフォールバックします。これは、DVI 接続の TV をメインディスプレイとして使用していて TV がオフまたは切断されているときに X が起動すると問題になります。 |
+ | |||
− | |||
− | + | 強制的に NVIDIA が DFP を使用するようにするには、EDID のコピーをファイルシステムのどこかに保存して、X がTV/DFP から EDID を読み込まずにそのファイルをパースできるようにします。 |
|
− | EDID を取得するには、nvidia-settings を起動します。ツリー形式で情報が表示されますが、今は設定は無視して GPU を選択し ("GPU-0" など |
+ | 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. |
+ | 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 の温度をシェルに表示するには、以下のように |
+ | 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 カードの温度センサーにはアクセスできません。}} |
||
+ | === オーバークロックを有効化する === |
||
− | たまに nvclock と nvidia-settings/nv-control が報告する温度が食い違うことがあります。nvclock の作者 (thunderbird) による [https://sourceforge.net/projects/nvclock/forums/forum/67426/topic/1906899 この投稿] によると、nvclock の値のほうが正確なようです。 |
||
+ | {{Warning| オーバークロックによってハードウェアに永久的な損傷が発生するかもしれません。警告しましたよ。}} |
||
− | == ログイン時にファンの速度を設定する == |
||
+ | {{Note| |
||
− | ''nvidia-settings''' のコンソールインターフェイスを使ってグラフィックカードのファンの速度を調整することができます。まずは Xorg 設定の {{ic|Device}} セクションで Coolbits オプションを {{ic|4}} か {{ic|5}}、または {{ic|12}} (fermi 以上) に設定してファンコントロールを有効にしてください: |
||
+ | * rootless モードで Xorg サーバを実行している場合、オーバークロックの設定は適用できません。[[Xorg#root として Xorg を実行|Xorg を root として実行]]することを検討してください。 |
||
+ | * DRM カーネルモードセッティングを有効にすると Coolbits の値に関わらずオーバークロックができなくなる場合があります。}} |
||
+ | オーバークロックは {{ic|Device}} セクションの ''Coolbits'' オプションによって制御されます。これにより、サポートされない様々な機能を有効化できます: |
||
− | Option "Coolbits" "4" |
||
+ | Option "Coolbits" "''値''" |
||
− | {{Note|GeForce 400/500 シリーズのカードではこの方法を使ってログイン時にファンの速度を設定することはできません。}} |
||
+ | {{Tip| ''Coolbits'' オプションは、Xorg の設定ファイルを操作する ''nvidia-xconfig'' を使って簡単に設定できます: {{bc|1=# nvidia-xconfig --cool-bits=''value''}}}} |
||
− | Xorg が起動した時にファンを調整するには以下の行を [[xinitrc]] ファイルに記述します。{{ic|''n''}} は設定したいファンの速度のパーセンテージに置き換えて下さい。 |
||
+ | ''Coolbits'' の値は2進数の構成ビットを足し合わせたものです。構成ビットは以下のとおりです: |
||
− | nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=''n''" |
||
+ | * {{ic|1}} (ビット0) - ''nvidia-settings'' の ''Clock Frequencies'' ページで古い(Fermi以前)コアをオーバークロックできるようにします。 |
||
− | GPU とファンの番号を増やすことで二番目の GPU を設定することもできます。 |
||
+ | * {{ic|2}} (ビット1) - このビットがセットされると、ドライバは「ビデオメモリの容量が異なる複数の GPU を使用するときに SLI の初期化を試みます。」 |
||
+ | * {{ic|4}} (ビット2) - ''nvidia-settings'' の ''Thermal Monitor'' ページで GPU ファンの速度を手動設定できるようにします。 |
||
+ | * {{ic|8}} (ビット3) - ''nvidia-settings'' の ''PowerMizer'' ページでオーバークロックできるようにします。Fermi や Fermi より新しいアーキテクチャでバージョン 337.12 から利用可能です。[https://www.phoronix.com/scan.php?px=MTY1OTM&page=news_item] |
||
+ | * {{ic|16}} (ビット4) - ''nvidia-settings'' の CLI のオプションを使ってオーバーボルテージできるようにします。Fermi や Fermi より新しいアーキテクチャでバージョン 346.16 から利用可能です。[https://www.phoronix.com/scan.php?page=news_item&px=MTg0MDI] |
||
+ | 複数の機能を有効化するには ''Coolbits'' の値に上記の値を足し合わせてください。例えば、Fermi コアのオーバークロックとオーバーボルテージを有効化する場合は {{ic|Option "Coolbits" "24"}} をセットします。 |
||
− | nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=''n''" \ |
||
− | -a "[gpu:1]/GPUFanControlState=1" -a [fan:1]/GPUCurrentFanSpeed=''n''" & |
||
+ | ''Coolbits'' に関するドキュメントは {{ic|/usr/share/doc/nvidia/html/xconfigoptions.html}} と[https://download.nvidia.com/XFree86/Linux-x86_64/560.35.03/README/xconfigoptions.html#Coolbits ここ]にあります。 |
||
− | [[GDM]] や [[KDM]] などのログインマネージャを使用している場合、デスクトップエントリファイルを作成して設定をさせることもできます。{{ic|~/.config/autostart/nvidia-fan-speed.desktop}} を作成してその中に以下のテキストを入力してください。{{ic|''n''}} は速度のパーセンテージに置き換えて下さい。 |
||
+ | {{Note| 別の手段としては DOS(推奨) 内から、あるいは [https://www.techpowerup.com/download/nvidia-nvflash/ nvflash] と [https://www.guru3d.com/files-details/nvidia-bios-editor-download-nibitor.html NiBiTor 6.0] を Win32 環境内で使って、GPU BIOS を編集しリフラッシュするというものがあります。BIOS をフラッシュする利点は電圧制限を上げられることだけでなく、一般に Coolbit のようなソフトウェアオーバークロッキングの方法で安定性が向上することです。[https://ivanvojtko.blogspot.sk/2014/03/how-to-overclock-geforce-460gtx-fermi.html Fermi BIOS modification tutorial]}} |
||
− | [Desktop Entry] |
||
− | Type=Application |
||
− | Exec=nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=''n''" |
||
− | X-GNOME-Autostart-enabled=true |
||
− | Name=nvidia-fan-speed |
||
+ | ==== 静的な 2D/3D クロックを設定する ==== |
||
− | {{Note|ドライバーのバージョン 349.16 から、{{ic|GPUCurrentFanSpeed}} は {{ic|GPUTargetFanSpeed}} に置き換わっています [https://devtalk.nvidia.com/default/topic/821563/linux/can-t-control-fan-speed-with-beta-driver-349-12/post/4526208/#4526208]。}} |
||
+ | [[カーネルモジュールパラメータ]]を使用して PowerMizer を最大パフォーマンスレベルで有効化してください (この設定がないと VSync が機能しません): |
||
− | 複数のグラフィックカードのファン速度を調整できるようにしたい場合、以下のコマンドを実行: |
||
− | $ nvidia-xconfig --enable-all-gpus |
||
− | $ nvidia-xconfig --cool-bits=4 |
||
+ | {{hc|/etc/modprobe.d/nvidia.conf|2= |
||
− | == 手動設定 == |
||
+ | options nvidia NVreg_RegistryDwords="PerfLevelSrc=0x2222" |
||
+ | }} |
||
+ | ==== GPU のブーストクロックを下げる ==== |
||
− | [[NVIDIA#最小設定|設定ファイル]]を編集することで ([[NVIDIA#自動設定|自動設定]]や [[NVIDIA#NVIDIA Settings|GUI]] では有効にできない) 設定を変更することができます。変更を反映するには Xorg サーバーを再起動させる必要があります。 |
||
+ | [https://nouveau.freedesktop.org/CodeNames.html#NV170 Ampere (NV170/GA''XXX'')] GPU 及びそれ以降では、クロックブーストが異なる方法で動作します。最大クロックはブート時に、サポートされている最も高い制限値に設定されます。これが望ましい動作である場合は、設定は必要ありません。 |
||
− | オプションの詳しい説明は [ftp://download.nvidia.com/XFree86/Linux-x86/355.11/README/README.txt NVIDIA Accelerated Linux Graphics Driver README and Installation Guide] を見てください。 |
||
+ | これの欠点は、電力効率が低いことです。クロックが上がると、安定性のために電圧を上げる必要があります。その結果として、電力消費量、発熱、ファンの音量が非線形的に増加します。なので、ブーストクロックの制限を下げることで、電力効率を上げることができます。 |
||
− | === 起動時のロゴを無効にする === |
||
+ | ブーストクロックの制限は nvidia-smi を使用して変更できます: |
||
− | {{ic|Device}} セクションの下に {{ic|"NoLogo"}} オプションを追加してください: |
||
− | Option "NoLogo" "1" |
||
+ | * サポートされているクロックレートを表示: {{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% になり、かつ、カクつきが発生しない程度にまでクロックを下げれば、効率は最大になります。このとき、各フレームはリフレッシュレートを維持するのにちょうど十分なほど高速に描画できていることになります。 |
||
− | {{ic|Device}} セクションの下に {{ic|"ConnectedMonitor"}} オプションを追加することで X サーバーの起動時のモニター検出を上書きすることができます。それによって起動時間を大幅に早くすることが可能です。利用可能なオプション: {{ic|"CRT"}} (アナログ接続), {{ic|"DFP"}} (デジタルモニター), {{ic|"TV"}} (テレビ)。 |
||
+ | 例として、RTX 3090 Ti でデフォルトから上記の設定に変更した場合、Hitman 3 を 4K 60 FPS でプレイしたところ、電力消費量が 30% 減少し、温度は 75 度から 63 度に、ファンの速度は 73% から 57% に低下しました。 |
||
− | 以下の設定をすることで NVIDIA ドライバーは起動時のチェックを迂回しモニターを DFP と認識します: |
||
− | Option "ConnectedMonitor" "DFP" |
||
− | {{Note|ディスプレイがフラットパネルだとしても15ピンの VGA 接続をしている場合は "CRT" を使ってください。"DFP" は DVI, HDMI, DisplayPort などのデジタル接続で使用します。}} |
||
− | === |
+ | ==== オーバークロックの設定を保存する ==== |
+ | 通常、''nvidia-settings'' インターフェイスで設定したクロックと電圧のオフセットは保存されず、再起動すると消えてしまいます。幸い、プロプライエタリドライバにおいてオーバークロック用のインターフェイスを提供し、ユーザのオーバークロック設定を保存することが可能で、起動時に自動的に設定を適用するツールがあります。以下にその一部を挙げます: |
||
− | {{ic|Device}} セクションの下に追加してください: |
||
− | Option "RegistryDwords" "EnableBrightnessControl=1" |
||
+ | * {{AUR|gwe}} - グラフィカル。デスクトップセッションの開始時に設定を適用します。 |
||
− | 上記のオプションで輝度のコントロールが機能しない場合、{{AUR|nvidia-bl-dkms}} をインストールしてください。 |
||
+ | * {{AUR|nvclock}} と {{AUR|systemd-nvclock-unit}} - グラフィカル。システムの起動時に設定を適用します。 |
||
+ | * {{AUR|nvoc}} - テキストベース。プロファイルは {{ic|/etc/nvoc.d/}} 下の設定ファイルです。デスクトップセッション開始時に設定を適用します。 |
||
+ | あるいは、{{ic|GPUGraphicsClockOffset}} 属性と {{ic|GPUMemoryTransferRateOffset}} 属性を[[自動起動|起動時に]] ''nvidia-settings'' のコマンドラインインターフェイスでセットすることができます。例えば: |
||
− | {{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 を変更しても明るさが変更されない]]を参照。}} |
||
+ | $ nvidia-settings -a "GPUGraphicsClockOffset[''performance_level'']=''offset''" |
||
− | === SLI を有効にする === |
||
+ | $ nvidia-settings -a "GPUMemoryTransferRateOffset[''performance_level'']=''offset''" |
||
+ | {{ic|''performance_level''}} は最も高いパフォーマンスレベルとなります。マシンに複数の GPU が存在する場合、GPU ID を指定する必要があります: {{ic|1=[gpu:''gpu_id'']GPUGraphicsClockOffset[''performance_level'']=''offset''}}。 |
||
− | {{Warning| |
||
− | * 2011年5月7日現在、SLI を有効にすると GNOME 3 で動画パフォーマンスが落ちます。 |
||
− | * GTX 10xx シリーズ (1080, 1070, 1060 など) では 2-way SLI しか対応していません。CUDA/OpenCL アプリケーションでは 3-way や 4-way の SLI をすることもできますが、OpenGL アプリケーションでは大抵の場合上手く行きません。}} |
||
+ | === カスタムの TDP 制限 === |
||
− | 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] を見て下さい。 |
||
+ | 最近の NVIDIA グラフィックカードは TDP と温度が制限内に収まるように周波数を調整します。パフォーマンスを上げるために TDP 制限を変更できます。これにより温度が上昇し、電力消費量が増加するでしょう。 |
||
− | まず {{ic|lspci}} を使って一番目の GPU の PCI Bus ID を確認してください: |
||
− | {{hc|<nowiki>$ lspci | grep VGA</nowiki>| |
||
− | 03:00.0 VGA compatible controller: nVidia Corporation G92 [GeForce 8800 GTS 512] (rev a2) |
||
− | 05:00.0 VGA compatible controller: nVidia Corporation G92 [GeForce 8800 GTS 512] (rev a2) |
||
− | }} |
||
+ | 例えば、電力制限を 160.30W に設定するには: |
||
− | {{ic|Device}} セクションの下に BusID を追加してください (上記の例では3): |
||
− | BusID "PCI:3:0:0" |
||
+ | # nvidia-smi -pl 160.30 |
||
− | {{Note|指定するときの形式は重要です。BusID の値は {{ic|"PCI:<BusID>:0:0"}} と指定してください。}} |
||
+ | (ドライバの永続化なしで)電力制限を起動時に設定するには: |
||
− | 使用したい SLI レンダリングモードの値を {{ic|Screen}} セクションの下に追加してください: |
||
− | Option "SLI" "AA" |
||
+ | {{hc|/etc/systemd/system/nvidia-tdp.timer|2= |
||
− | 以下の表は利用できるレンダリングモードを示しています。 |
||
+ | [Unit] |
||
+ | Description=Set NVIDIA power limit on boot |
||
+ | [Timer] |
||
− | {| class="wikitable" |
||
+ | OnBootSec=5 |
||
− | ! 値 !! 挙動 |
||
− | |- |
||
− | | 0, no, off, false, Single || レンダリングの際には単一の GPU だけを使用。 |
||
− | |- |
||
− | | 1, yes, on, true, Auto || SLI を有効にしてドライバーに適切なレンダリングモードを自動で選択させる。 |
||
− | |- |
||
− | | AFR || SLI を有効にして alternate フレームレンダリングモードを使用する。 |
||
− | |- |
||
− | | SFR || SLI を有効にして split フレームレンダリングモードを使用する。 |
||
− | |- |
||
− | | AA || SLI を有効にして SLI アンチエイリアスを使用する。これをフルシーンアンチエイリアスと一緒に使うことで見栄えが良くなります。 |
||
− | |} |
||
+ | [Install] |
||
− | もしくは、{{ic|nvidia-xconfig}} ユーティリティを使って、コマンドによって {{ic|xorg.conf}} に変更を挿入することもできます: |
||
+ | WantedBy=timers.target |
||
− | # nvidia-xconfig --busid=PCI:3:0:0 --sli=AA |
||
+ | }} |
||
+ | |||
+ | {{hc|/etc/systemd/system/nvidia-tdp.service|2= |
||
+ | [Unit] |
||
+ | Description=Set NVIDIA power limit |
||
+ | [Service] |
||
− | シェルから SLI モードが有効になっているか確認するには: |
||
+ | Type=oneshot |
||
− | {{hc|<nowiki>$ nvidia-settings -q all | grep SLIMode</nowiki>| |
||
+ | ExecStart=/usr/bin/nvidia-smi -pl 160.30 |
||
− | Attribute 'SLIMode' (arch:0.0): AA |
||
− | 'SLIMode' is a string attribute. |
||
− | 'SLIMode' is a read-only attribute. |
||
− | 'SLIMode' can use the following target types: X Screen. |
||
}} |
}} |
||
+ | そして、{{ic|nvidia-tdp.timer}} を[[有効化]]してください。 |
||
− | {{Warning|SLI を有効にした後、xorg の起動時にシステムがフリーズしたり反応しなくなることがあります。再起動する前にディスプレイマネージャを無効にすることを推奨します。}} |
||
− | === |
+ | === ログイン時にファンの速度を設定する === |
+ | ''nvidia-settings'' のコンソールインターフェイスを使ってグラフィックカードのファンの速度を調整することができます。まず、Xorg 設定の [[#オーバークロックを有効化する|Coolbits]] オプションでビット2を有効化していることを確認してください。 |
||
− | {{Warning|オーバークロックはハードウェアにダメージを与える可能性があり、このページの著者はメーカーによって決められた仕様の範囲外で製品を扱うことについて何も責任を負えないので注意してください。}} |
||
+ | {{Note| 現在 GeForce 400/500 シリーズのカードではこの方法を使ってログイン時にファンの速度を設定することはできません。この方法では ''nvidia-settings'' を使って現在の X セッション内でファンのスピードを変更することしかできません。}} |
||
− | GPU やメモリのオーバークロックは {{ic|Device}} セクションの ''Coolbits'' オプションによって制御され、サポートされない機能が使えるようになります: |
||
− | Option "Coolbits" "''value''" |
||
+ | Xorg が起動した時にファンを調整するには以下の行を [[xinitrc]] ファイルに記述します。{{ic|''n''}} は設定したいファンの速度のパーセンテージに置き換えて下さい。 |
||
− | {{Tip|''Coolbits'' オプションは Xorg の設定ファイルを変更する ''nvidia-xconfig'' で簡単に変えることができます: {{ic|1=# nvidia-xconfig --cool-bits=''value''}}。}} |
||
+ | nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUTargetFanSpeed=''n''" |
||
− | ''Coolbits'' の値は2進法でビットを立てた合計になります。それぞれのビットの意味は: |
||
+ | GPU とファンの番号を増やすことで二番目の 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]。 |
||
+ | nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=''n''" \ |
||
− | 複数の機能を有効にするには、合計した ''Coolbits'' の値を追加します。例えば、オーバークロックと Fermi コアの電圧アップを有効にするには、{{ic|Option "Coolbits" "24"}} と設定します。 |
||
+ | -a "[gpu:1]/GPUFanControlState=1" -a [fan:1]/GPUCurrentFanSpeed=''n''" & |
||
+ | [[GDM]] や [[KDM]] などのログインマネージャを使用している場合、デスクトップエントリファイルを作成して設定をさせることもできます。{{ic|~/.config/autostart/nvidia-fan-speed.desktop}} を作成してその中に以下のテキストを入力してください。{{ic|''n''}} は速度のパーセンテージに置き換えて下さい。 |
||
− | ''Coolbits'' のドキュメントは {{ic|/usr/share/doc/nvidia/html/xconfigoptions.html}} にあります。''Coolbits'' に関するドライバーバージョン 355.11 のドキュメントはオンラインで [ftp://download.nvidia.com/XFree86/Linux-x86/355.11/README/xconfigoptions.html こちら] から見ることができます。 |
||
+ | [Desktop Entry] |
||
− | {{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]}} |
||
+ | Type=Application |
||
+ | Exec=nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUCurrentFanSpeed=''n''" |
||
+ | X-GNOME-Autostart-enabled=true |
||
+ | Name=nvidia-fan-speed |
||
+ | {{Note|ドライバーのバージョン 349.16 から、{{ic|GPUCurrentFanSpeed}} は {{ic|GPUTargetFanSpeed}} に置き換わっています [https://devtalk.nvidia.com/default/topic/821563/linux/can-t-control-fan-speed-with-beta-driver-349-12/post/4526208/#4526208]。}} |
||
− | ==== 静的な 2D/3D クロックを設定する ==== |
||
+ | 複数のグラフィックカードのファン速度を調整できるようにしたい場合、以下のコマンドを実行: |
||
− | 以下の文字列を {{ic|Device}} セクションに設定すると PowerMizer がパフォーマンス最高レベルで有効になります (この行がないと VSync が動作しません): |
||
+ | $ nvidia-xconfig --enable-all-gpus |
||
− | Option "RegistryDwords" "PerfLevelSrc=0x2222" |
||
+ | $ 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 によって制御されません。}} |
||
+ | |||
+ | == カーネルモジュールパラメータ == |
||
+ | |||
+ | 一部のオプションはカーネルモジュールパラメータから設定できます。パラメータの完全なリストは {{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 曰く: |
||
+ | :結果として生じるビデオメモリの内容の消失は、ユーザスペースの NVIDIA ドライバーや一部のアプリケーションによって部分的に補われます。しかし、電源管理サイクルの終了時にレンダリングの破損やアプリケーションのクラッシュなどの機能不全が発生する可能性があります。 |
||
+ | |||
+ | "まだ実験段階の" インターフェイスを使用すれば、(ディスクまたは RAM に十分な領域があれば) ビデオメモリ全てを保存できるようになります。 |
||
+ | |||
+ | ビデオメモリの内容を全て保存し復元するようにするには、{{ic|nvidia}} カーネルモジュールに対して {{ic|1=NVreg_PreserveVideoMemoryAllocations=1}} [[カーネルモジュールパラメータ]]を設定する必要があります。NVIDIA はこのパラメータをデフォルトで設定していませんが、一方 Arch Linux では、サポートされているドライバにおいてこのパラメータがデフォルトで設定されています。 |
||
+ | |||
+ | また、{{ic|nvidia-suspend.service}} サービス、{{ic|nvidia-hibernate.service}} サービス、{{ic|nvidia-resume.service}} サービスを[[有効化]]しておく必要があります。Arch Linux では、上流の要件に従って、サポートされているドライバにおいてこれらのサービスはデフォルトで有効化されています。 |
||
+ | |||
+ | 詳細は [https://download.nvidia.com/XFree86/Linux-x86_64/560.35.03/README/powermanagement.html NVIDIA のドキュメント]を参照してください。 |
||
+ | |||
+ | {{Accuracy|[[NVIDIA#早期ロード|KMS を早期開始]]する場合 (つまり、initramfs の段階で {{ic|nvidia}} モジュールがロードされる場合)、initramfs の時点では、以前のビデオメモリの内容が保存されている {{ic|NVreg_TemporaryFilePath}} にアクセスできません。つまり、ハイバーネートを使用する場合は、KMS の早期開始を使用するべきではありません。}} |
||
+ | |||
+ | {{Note| |
||
+ | * [[カーネルモジュール#/etc/modprobe.d/ 内のファイルを使う]] にある通り、[[NVIDIA#DRM カーネルモード設定|early KMS]] を使用している場合は [[initramfs を再生成する]]必要があります。 |
||
+ | * 上流のデフォルトでは、ビデオメモリの内容は ([[tmpfs]] である) {{ic|/tmp}} に保存されます。NVIDIA は、最高のパフォーマンスを得るために[https://download.nvidia.com/XFree86/Linux-x86_64/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}} を明示的に有効化する必要があります。 |
||
+ | }} |
||
+ | == ドライバーの持続 == |
||
− | == Preserve video memory after suspend == |
||
+ | 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] 章をご覧ください。 |
||
− | 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.'' |
||
+ | ブート時に持続デーモンを開始するには {{ic|nvidia-persistenced.service}} を[[有効化]]してください。手動での使用については[https://docs.nvidia.com/deploy/driver-persistence/index.html#usage 上流のドキュメント]をご覧ください。 |
||
− | 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. |
||
+ | == YCbCr 4:2:0 サブサンプリングを強制する == |
||
− | 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. |
||
+ | [[Wikipedia:HDMI#Refresh frequency limits for standard video|古い出力規格の制限]]に悩まされているが、YUV 4:2:0 を使用することで問題を緩和できるような場合は、NVIDIA ドライバに YUV420 を強制するためのドキュメント化されていない X11 オプションがあります: |
||
− | 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: |
||
+ | Option "ForceYUV420" "True" |
||
− | options nvidia NVreg_PreserveVideoMemoryAllocations=1 NVreg_TemporaryFilePath=/tmp-nvidia |
||
+ | これで、より高い解像度とリフレッシュレートを利用できますが、画質に悪影響を及ぼします。 |
||
− | Feel free to replace "/tmp-nvidia" in the previous line with a path within your desired file system. |
||
+ | {{TranslationStatus|NVIDIA/Tips and tricks|2024-10-23|819073}} |
||
− | The interaction with '''/proc/driver/nvidia/suspend''' is handled by the simple Unix shell script at '''/usr/bin/nvidia-sleep.sh''', which will itself be called by a tool like [[Systemd]]. The Arch Linux {{Pkg|nvidia-utils}} package ships with the following relevant Systemd services (which essentially just call '''nvidia-sleep.sh'''): {{ic|nvidia-suspend}}, {{ic|nvidia-hibernate}}, {{ic|nvidia-resume}}. Contrary to NVIDIA's instructions, it is currently not necessary to enable {{ic|nvidia-resume}} (and it is in fact probably not a good idea to enable it), because the '''/usr/lib/systemd/system-sleep/nvidia''' script does the same thing as the service (but slightly earlier), and it is enabled by default (Systemd calls it after waking up from a suspend). Do enable {{ic|nvidia-suspend}} and/or {{ic|nvidia-hibernate}}. |
2024年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.conf
で use_graphics_for +,linux
を設定してください。ちょっとした注意事項としては、これによりブート中にカーネルパラメータが表示されなくなります。
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 の 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 の値のほうが正確なようです。
オーバークロックと冷却
オーバークロックを有効化する
オーバークロックは Device
セクションの Coolbits オプションによって制御されます。これにより、サポートされない様々な機能を有効化できます:
Option "Coolbits" "値"
Coolbits の値は2進数の構成ビットを足し合わせたものです。構成ビットは以下のとおりです:
1
(ビット0) - nvidia-settings の Clock Frequencies ページで古い(Fermi以前)コアをオーバークロックできるようにします。2
(ビット1) - このビットがセットされると、ドライバは「ビデオメモリの容量が異なる複数の GPU を使用するときに SLI の初期化を試みます。」4
(ビット2) - nvidia-settings の Thermal Monitor ページで GPU ファンの速度を手動設定できるようにします。8
(ビット3) - nvidia-settings の PowerMizer ページでオーバークロックできるようにします。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
とここにあります。
静的な 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 - グラフィカル。デスクトップセッションの開始時に設定を適用します。
- 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
カーネルモジュールパラメータ
一部のオプションはカーネルモジュールパラメータから設定できます。パラメータの完全なリストは 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_PreserveVideoMemoryAllocations=1
カーネルモジュールパラメータを設定する必要があります。NVIDIA はこのパラメータをデフォルトで設定していませんが、一方 Arch Linux では、サポートされているドライバにおいてこのパラメータがデフォルトで設定されています。
また、nvidia-suspend.service
サービス、nvidia-hibernate.service
サービス、nvidia-resume.service
サービスを有効化しておく必要があります。Arch Linux では、上流の要件に従って、サポートされているドライバにおいてこれらのサービスはデフォルトで有効化されています。
詳細は NVIDIA のドキュメントを参照してください。
ドライバーの持続
NVIDIA はブート時に任意で実行できるデーモンを用意しています。標準的な単一 GPU の X デスクトップ環境では持続デーモンは必要ではなく、むしろ問題を引き起こします [8]。詳細については NVIDIA ドキュメントの Driver Persistence 章をご覧ください。
ブート時に持続デーモンを開始するには nvidia-persistenced.service
を有効化してください。手動での使用については上流のドキュメントをご覧ください。
YCbCr 4:2:0 サブサンプリングを強制する
古い出力規格の制限に悩まされているが、YUV 4:2:0 を使用することで問題を緩和できるような場合は、NVIDIA ドライバに YUV420 を強制するためのドキュメント化されていない X11 オプションがあります:
Option "ForceYUV420" "True"
これで、より高い解像度とリフレッシュレートを利用できますが、画質に悪影響を及ぼします。