有効にせずにNVIDIA切り替え可能グラフィックカードの使用量を監視できます。

有効にせずにNVIDIA切り替え可能グラフィックカードの使用量を監視できます。

私は、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-settingsdGPUが自動的にオンになることです。 dGPUが中断されている間、nvidia-smiこの値を使用してクエリループを中断することはできますが、/sys/bus/pci/devices/0000:01:00.0/power/runtime_statusdGPUが起動し、モニタがクエリを開始すると、スリープモードに戻りません(すべてのクエリが起動状態を維持するため)。

私が探求したアイデア

/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-settingsdGPUを「使用する」とは言いません)。また、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

関連情報