监控 nvidia 可切换显卡的使用情况而不使其保持唤醒状态

监控 nvidia 可切换显卡的使用情况而不使其保持唤醒状态

我正在尝试为 Linux 上具有可切换显卡的系统构建显卡监视器(温度、内存百分比、利用率等)。

TLDR:因为我有一个带有运行时 D3 (RTD3) 的 Ampere 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 电源管理,因此我不需要使用 optimus-manager 来强制打开/关闭我的 dGPU。我可以通过上面的 sysfs 命令验证 dGPU 是否正常关闭,然后在运行类似的操作后打开大约 15 秒,prime-run glxinfo | grep -i opengl然后再次关闭。

现在的问题是,如果我尝试在循环中使用nvidia-settings(或) 创建系统监视器来查询 dGPU 的运行时信息,则 dGPU 将自动打开。当 dGPU 挂起时,nvidia-smi我可以使用 的值/sys/bus/pci/devices/0000:01:00.0/power/runtime_status来 noop 查询循环,但是一旦 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           

我对这一切意味着什么感到有点困惑,因为我可以通过转到 中的“热设置”页面来强制 dGPU 保持开启状态nvidia-settings。但是,上面的输出不会改变(例如 nvidia-smi 没有说nvidia-settings是“使用”dGPU)。此外,Xorg 始终在运行,但 dGPU 会暂停,除非我打开另一个应用程序专门使用 dGPU。

系统信息

操作系统:arch 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

相关内容