「NVIDIA/ヒントとテクニック」の版間の差分
(→サスペンド後にビデオメモリを保持する: 訳を修正) |
(同期) |
||
271行目: | 271行目: | ||
ExecStart=/usr/bin/nvidia-smi -pl 160.30 |
ExecStart=/usr/bin/nvidia-smi -pl 160.30 |
||
}} |
}} |
||
+ | |||
+ | そして、{{ic|nvidia-tdp.timer}} を[[有効化]]してください。 |
||
=== ログイン時にファンの速度を設定する === |
=== ログイン時にファンの速度を設定する === |
||
357行目: | 359行目: | ||
ブート時に持続デーモンを開始するには {{ic|nvidia-persistenced.service}} を[[有効化]]してください。手動での使用については[https://docs.nvidia.com/deploy/driver-persistence/index.html#usage 上流のドキュメント]をご覧ください。 |
ブート時に持続デーモンを開始するには {{ic|nvidia-persistenced.service}} を[[有効化]]してください。手動での使用については[https://docs.nvidia.com/deploy/driver-persistence/index.html#usage 上流のドキュメント]をご覧ください。 |
||
− | {{TranslationStatus|NVIDIA/Tips and tricks|2023- |
+ | {{TranslationStatus|NVIDIA/Tips and tricks|2023-08-06|783081}} |
2023年8月6日 (日) 06:07時点における版
メインの記事は NVIDIA です。
目次
ターミナルの解像度を修正する
nouveau からドライバーを変えた場合、起動時のターミナルが低解像度で表示されるようになることがあります。
GRUB を使用している場合、GRUB/ヒントとテクニック#フレームバッファの解像度を設定するを見てください。
systemd-boot を使用している場合、esp/EFI/loader/loader.conf
内で console-mode
を設定してください。詳しくは systemd-boot#ローダー設定 をご覧ください。[1] [2]
rEFInd を使用している場合、esp/EFI/refind/refind.conf
と /etc/refind.d/refind.conf
に以下を追加してください(後者のファイルは任意ですが、両方に追加することを推奨します): [3]
use_graphics_for linux
ちょっとした注意事項としては、これによりブート中にカーネルパラメータが表示されなくなります。
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.0): 41. 'GPUCoreTemp' is an integer attribute. 'GPUCoreTemp' is a read-only attribute. 'GPUCoreTemp' can use the following target types: X Screen, GPU.
上記の場合、ボードの GPU 温度は 41 C になります。
rrdtool や conky などのユーティリティで使うために温度だけを表示したいときは:
$ nvidia-settings -q gpucoretemp -t
41
nvidia-smi
X を全く使わず (例: Wayland を実行している場合やヘッドレスサーバの場合) GPU から直接温度を読み込むことができる nvidia-smi を使います。 GPU の温度をシェルに表示するには、以下のように nvidia-smi を使って下さい:
$ nvidia-smi
このコマンドを使うと以下のように出力されます:
$ nvidia-smi
Fri Jan 6 18:53:54 2012 +------------------------------------------------------+ | NVIDIA-SMI 2.290.10 Driver Version: 290.10 | |-------------------------------+----------------------+----------------------+ | Nb. Name | Bus Id Disp. | Volatile ECC SB / DB | | Fan Temp Power Usage /Cap | Memory Usage | GPU Util. Compute M. | |===============================+======================+======================| | 0. GeForce 8500 GT | 0000:01:00.0 N/A | N/A N/A | | 30% 62 C N/A N/A / N/A | 17% 42MB / 255MB | N/A Default | |-------------------------------+----------------------+----------------------| | Compute processes: GPU Memory | | GPU PID Process name Usage | |=============================================================================| | 0. ERROR: Not Supported | +-----------------------------------------------------------------------------+
温度だけ見るには:
$ nvidia-smi -q -d TEMPERATURE
====NVSMI LOG==== Timestamp : Sun Apr 12 08:49:10 2015 Driver Version : 346.59 Attached GPUs : 1 GPU 0000:01:00.0 Temperature GPU Current Temp : 52 C GPU Shutdown Temp : N/A GPU Slowdown Temp : N/A
rrdtool や conky などのユーティリティで使うために温度だけを取得したいときは:
$ nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits
52
参照: https://www.question-defense.com/2010/03/22/gpu-linux-shell-temp-get-nvidia-gpu-temperatures-via-linux-cli[リンク切れ 2023-05-07]
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 から利用可能です。[4]16
(ビット4) - nvidia-settings の CLI のオプションを使ってオーバーボルテージできるようにします。Fermi や Fermi より新しいアーキテクチャでバージョン 346.16 から利用可能です。[5]
複数の機能を有効化するには Coolbits の値に上記の値を足し合わせてください。例えば、Fermi コアのオーバークロックとオーバーボルテージを有効化する場合は Option "Coolbits" "24"
をセットします。
Coolbits に関するドキュメントは /usr/share/doc/nvidia/html/xconfigoptions.html
とここにあります。
静的な 2D/3D クロックを設定する
以下の文字列を Device セクションに設定すると PowerMizer がパフォーマンス最高レベルで有効になります (この行がないと VSync が動作しません):
Option "RegistryDwords" "PerfLevelSrc=0x2222"
最高パフォーマンスモードへの変更を許可する
nvidia-settings でパフォーマンスモードを変更してもメモリレートをオーバークロックしてもほとんど影響を及ぼしません。以下を試してください:
- Coolbit を 24 や 28 にセットし、Powermizer RegistryDwords を削除して X を再起動。
- Clock と Memory レートの最大値を見つけだす。(起動後にあなたの gfx カードで報告されているものよりも低くなる可能性があります!):
$ nvidia-smi -q -d SUPPORTED_CLOCKS
- GPU 0 のレートを設定する:
# nvidia-smi -i 0 -ac memratemax,clockratemax
レートを最大に設定した後、パフォーマンスモードが nvidia-settings で利用でき、グラフィックスクロックとメモリ転送レートをオーバークロックできます。
オーバークロックの設定を保存する
通常、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 機能 [8] が有効になります。PAT 機能はメモリの割り当て方に影響を及ぼします。PAT は Pentium III に初めて導入され [9]、それよりも新しい CPU の殆どでサポートされています(wikipedia:Page attribute table#Processors を参照)。あなたのシステムでこの機能がサポートされている場合、パフォーマンスが向上するはずです。
/etc/modprobe.d/nvidia.conf
options nvidia-drm modeset=1 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 曰く ([10]、nvidia-utils パッケージの /usr/share/doc/nvidia/html/powermanagement.html
):
- 結果として生じるビデオメモリの内容の消失は、ユーザスペースの NVIDIA ドライバーや一部のアプリケーションによって部分的に補われます。しかし、電源管理サイクルの終了時にレンダリングの破損やアプリケーションのクラッシュなどの機能不全が発生する可能性があります。
システムはまだ試験段階ですが、(ディスクかメインメモリ上に十分なスペースがある場合) すべてのビデオメモリを保存することが可能です。インターフェイスは次のように /proc/driver/nvidia/suspend
を介します:
- Linux の通常の
/sys/power/state
ファイルに書き込む直前に "suspend" (または "hibernate") を/proc/driver/nvidia/suspend
に書き込みます。 - 復帰した直後か、サスペンドやハイバネートへの移行に失敗した後には
/proc/driver/nvidia/suspend
に "resume" を書き込みます。
ビデオメモリの内容をすべて保存するには、nvidia
カーネルモジュールを NVreg_PreserveVideoMemoryAllocations=1
オプションでロードし、nvidia-suspend.service
と nvidia-hibernate.service
を有効化してください。
変更を永続化させるには、以下のファイルを作成してください:
/etc/modprobe.d/nvidia-power-management.conf
options nvidia NVreg_PreserveVideoMemoryAllocations=1 NVreg_TemporaryFilePath=/path/to/tmp-nvidia
/proc/driver/nvidia/suspend
とのやり取りは、単純な Unix シェルスクリプトである /usr/bin/nvidia-sleep.sh
によって行われます。このスクリプト自体は systemd のようなツールによって呼び出されます。nvidia-utils パッケージには、次のサービスが同梱されています (本質的には nvidia-sleep.sh
を呼び出すだけです): nvidia-suspend.service
、nvidia-hibernate.service
、nvidia-resume.service
。
ドライバーの持続
NVIDIA はブート時に任意で実行できるデーモンを用意しています。標準的な単一 GPU の X デスクトップ環境では持続デーモンは必要ではなく、むしろ問題を引き起こします [11]。詳細については NVIDIA ドキュメントの Driver Persistence 章をご覧ください。
ブート時に持続デーモンを開始するには nvidia-persistenced.service
を有効化してください。手動での使用については上流のドキュメントをご覧ください。