nvidia-smi 从哪里获取信息?

nvidia-smi 从哪里获取信息?

鉴于 Linux 中的一切都是文件,进程不会神奇地从任何地方获取信息。如果您在没有 sudo 的情况下看到信息,则意味着某处有一个文件系统文件系统,进程, 或者开发文件系统可以作为用户访问。否则,它也可能只是来自内核 ABI(系统调用)而不是文件,其中信息也可以从诸如读写控制()插座()如果不是其他直接系统调用,例如获取CPU()

因此,考虑到这一点,我正在寻找 nvidia-smi 读取的源文件以获取其信息

事实上,我想比 Nvidia 单独扩展这一点,因为 nouveau、radeontop、AMDGPU 以及英特尔使用的任何东西,也有类似的方式来获取这些由于某种原因而未透露的信息......

这些进程从哪些文件获取信息?

我的最终目标是阅读这些文件康基并为系统中的每个 GPU 每秒显示 16 次图表,就像我为系统 CPU 和 RAM 使用情况所做的那样。

答案1

您可以通过一个命令自己找到这一点。

strace -o results.txt -e trace=openat nvidia-smi

将运行nvidia-smi并创建它打开的每个文件的列表results.txt

你会发现它使用的libnvidia-ml.so.1NVIDIA 管理库。加载该库后,nvidia-smi打开如下文件:

  • /dev/nvidia0
  • /dev/nvidia-caps/nvidia-cap2
  • /dev/nvidiactl
  • /dev/nvidia-uvm

你会发现这些设备节点不会产生任何有用的监控信息供直接读取;毫无疑问,图书馆正在ioctl(2)对这些设备进行特定的系统调用以获取所需的信息。 (您可以通过 确认这一点strace -o results2.txt -e trace=openat,ioctl nvidia-smi。)

如果您希望进行一些编程来获取所需的信息,您可能应该阅读NVML API 参考指南并使用该libnvidia-ml.so.1库,而不是尝试ioctl()在您自己的代码中进行原始调用。您可能会在第 2.14 章中找到几乎所有您想要实时监控的内容,设备查询

但是,有些文件看起来可以直接读取:

  • /proc/driver/nvidia/capabilities/mig/config
  • /proc/driver/nvidia/capabilities/mig/monitor
  • /proc/driver/nvidia/params

这给了我们希望/proc/driver/nvidia/,它的子目录可能值得研究;唉,里面没有太多值得实时监控的东西。

所以,不幸的是,它看起来不像用 Conky 读取一些文件那么容易;如果您不愿意进行一些编程,我是否建议您从处理输出开始

nvidia-smi -q -d MEMORY,UTILIZATION,TEMPERATURE,VOLTAGE,POWER

或者类似的命令?

我认为以每秒 16 次的周期运行这种监控是一种愚蠢的矫枉过正,除非您正在排除特定问题。

相关内容