私は、Linuxで切り替え可能なグラフィックを備えたシステム用のグラフィックモニタ(温度、メモリ比、使用率など)を構築しようとしています。
TLDR: ランタイム D3 (RTD3) を含む Ampere dGPU があるため、モニターは dGPU が目覚めないように照会するのではなく、他の項目によって dGPU が「使用」されるタイミングを何らかの方法で決定する必要があります。 「中古品」が実際に何を意味するのかを定義するのは現在の困難です。
背景
過去にoptimus-managerを使用したときは比較的簡単でした。nvidia-settings -t -q UsedDedicatedGPUmemory -q ...
GPUが検出ベースの場合にのみ実行されるループで実行できますcat /sys/bus/pci/devices/0000:01:00.0/power/runtime_status
。
しかし、今ではNvidia Ampere dGPUを搭載した素晴らしい新しいノートパソコンがあり、ランタイムD3電源管理をサポートしているので、dGPUを強制的にオンまたはオフにするためにoptimus-managerを使用する必要はありません。上記のsysfsコマンドを使用すると、dGPUが正常に終了し、同様のコマンドを実行してから約15秒間オンになってから再びオフにprime-run glxinfo | grep -i opengl
なることを確認できます。
問題は、dGPUのランタイム情報を照会するためにループ内でシステムモニタを使用(または作成)しようとすると、nvidia-settings
dGPUが自動的にオンになることです。 dGPUが中断されている間、nvidia-smi
この値を使用してクエリループを中断することはできますが、/sys/bus/pci/devices/0000:01:00.0/power/runtime_status
dGPUが起動し、モニタがクエリを開始すると、スリープモードに戻りません(すべてのクエリが起動状態を維持するため)。
私が探求したアイデア
/dev/nvidia*
他の場所で、他の人がこのファイルを使用し、nvidia-smi
どのプロセスがdGPUを「使用」しているかを確認したことを発見しました。私の場合は、アイドル状態(dGPUの一時停止など)とオン状態ですnvidia-settings
。
> sudo lsof /dev/nvidia*
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nvidia-pe 796 nvidia-persistenced 4u CHR 195,255 0t0 765 /dev/nvidiactl
nvidia-pe 796 nvidia-persistenced 5u CHR 195,0 0t0 772 /dev/nvidia0
nvidia-pe 796 nvidia-persistenced 6u CHR 195,0 0t0 772 /dev/nvidia0
nvidia-pe 796 nvidia-persistenced 7u CHR 195,0 0t0 772 /dev/nvidia0
nvidia-pe 796 nvidia-persistenced 8u CHR 195,0 0t0 772 /dev/nvidia0
Xorg 1105 root mem CHR 195,0 772 /dev/nvidia0
Xorg 1105 root mem CHR 195,255 765 /dev/nvidiactl
Xorg 1105 root 9u CHR 195,255 0t0 765 /dev/nvidiactl
Xorg 1105 root 13u CHR 195,255 0t0 765 /dev/nvidiactl
Xorg 1105 root 22u CHR 195,0 0t0 772 /dev/nvidia0
Xorg 1105 root 23u CHR 195,0 0t0 772 /dev/nvidia0
Xorg 1105 root 24u CHR 195,0 0t0 772 /dev/nvidia0
Xorg 1105 root 29u CHR 195,0 0t0 772 /dev/nvidia0
Xorg 1105 root 30u CHR 195,0 0t0 772 /dev/nvidia0
Xorg 1105 root 33u CHR 195,0 0t0 772 /dev/nvidia0
Xorg 1105 root 34u CHR 195,0 0t0 772 /dev/nvidia0
Xorg 1105 root 35u CHR 195,0 0t0 772 /dev/nvidia0
Xorg 1105 root 44u CHR 195,254 0t0 774 /dev/nvidia-modeset
Xorg 1105 root 59u CHR 195,0 0t0 772 /dev/nvidia0
Xorg 1105 root 60u CHR 195,0 0t0 772 /dev/nvidia0
nvidia-se 84896 ndwar 6u CHR 195,255 0t0 765 /dev/nvidiactl
nvidia-se 84896 ndwar 7u CHR 195,0 0t0 772 /dev/nvidia0
nvidia-se 84896 ndwar 8u CHR 510,0 0t0 766 /dev/nvidia-uvm
nvidia-se 84896 ndwar 10u CHR 195,0 0t0 772 /dev/nvidia0
nvidia-se 84896 ndwar 11u CHR 195,0 0t0 772 /dev/nvidia0
どのプロセスがカードを使用しているかをnvidiaに直接尋ねる(明らかにしばらく目を覚ます):
> nvidia-smi pmon -c 1
# gpu pid type sm mem enc dec command
# Idx # C/G % % % % name
0 1105 G - - - - Xorg
NET Frameworkの「列設定」ページに移動してdGPUを強制的にオンにすることができるため、これが何を意味するのか少し混乱していますnvidia-settings
。しかし、上記の出力は変わりません(例えば、nvidia-smiはnvidia-settings
dGPUを「使用する」とは言いません)。また、Xorgは常に実行していますが、dGPUを特別に使用するために他のアプリケーションを開かない限り、dGPUは一時停止されます。
システムメッセージ
オペレーティングシステム:アーチLinux
lspci | grep -i nvidia
01:00.0 3D controller: NVIDIA Corporation GA107GLM [RTX A1000 6GB Laptop GPU] (rev a1)
> cat /proc/driver/nvidia/gpus/0000:01:00.0/power
Runtime D3 status: Enabled (fine-grained)
Video Memory: Off
GPU Hardware Support:
Video Memory Self Refresh: Supported
Video Memory Off: Supported
glxinfo | grep "OpenGL renderer"
OpenGL renderer string: Mesa Intel(R) Graphics (RPL-P)
prime-run glxinfo | grep "OpenGL renderer"
OpenGL renderer string: NVIDIA RTX A1000 6GB Laptop GPU/PCIe/SSE2