Linux でグラフィックボードを使わない時は電源を切って節電したいと思ったので調べました.
検証方法
- Ubuntu 22.04.3 LTS
- NVIDIA GeForce RTX 4080
- NVIDIA Driver 535
- マザーボード MSI PRO B660-A DDR4

パソコン全体の消費電力をELPA電力計で測定します.
drain state を切り替える
nvidia-smi drain コマンドを使用します.
nvidia-smi drain
drain -- Display drain state information about the system as well as remove and discover devices.
Usage: nvidia-smi drain [options]
Options include:
[-p | --pciid]: GPU PCI ID in the format XXXX:YY.Z.a
where XXXX = domain
YY = bus
Z = device a = function
[-m | --modify]: Modify the drain state of a GPU specified by -p.
Persistence mode must be disabled to perform this function.
0 = not draining
1 = draining
[-q | --query]: Query the drain state of a GPU specified by -p.
[-r | --remove]: If possible, remove the GPU specified by -p.
The GPU must have already been put in a drain state using -m and
persistence mode for this GPU must be disabled.
[-d | --discover]: Discover all GPUs on the system that had previously been removed.
[-h | --help]: Display help information
例えば,nvidia-smi drain -p 0000:01:00.0 -m 1 を実行すると,グラフィックボードが見つからなくなります.
$ nvidia-smi No devices were found
nvidia-smi drain -p 0000:01:00.0 -m 0 を実行すれば元通り使えます.
なんとなく節電できているような気持ちになりますが,drain state を変更しても,パソコンの消費電力は変わりませんでした.
prime-select コマンド
apt install nvidia-prime でインストールします.prime-select intel を実行しましたが,
UnboundLocalError: local variable 't' referenced before assignment
というエラーが出て変更できませんでした.修正方法は分かりませんでした.
PCI を無効にする
lspci コマンドでデバイスを確認できるので,これの電源を切る方法を検索しましたが,見つけられませんでした.OS レベルでPCIデバイスの電源を切るは難しいようです.UEIFの設定画面を確認しましたが見つけられませんでした.
ASMP を設定する
Active-State Power Management (ASPM) は接続するデバイスが使用中でない時に PCIe リンク用に電力状態を低く設定することで電力を節約する機能だそうです*1.UEIFの設定画面でASPMを有効にすることで,アイドル時に5W程度消費電力が減りましたが,グラフィックボードを取り付ける前よりは45W高かったです.
グラフィックボードを取り外す
パソコンからグラフィックボードを物理的に取り外せば消費電力は下がりますが,これを繰り返すとPCIスロットが消耗して壊れるかもしれません.グラフィックボードの寿命を縮めるならば,アイドル時に45W消費電力が増えてもよいと思います.
グラフィックボードは常に使うわけではないですが時々使用するので,そのまま使うのがよさそうです.
