nvidia-smi는 어디서 정보를 얻나요?

nvidia-smi는 어디서 정보를 얻나요?

Linux의 모든 것이 파일이라는 점을 감안할 때 프로세스는 마법처럼 어디에서나 정보를 가져오지 않습니다. sudo 없이 메시지가 표시되면 어딘가에 파일이 있다는 의미입니다.시스템 파일 시스템,프로세스, 또는파일 시스템 개발사용자로 액세스할 수 있습니다. 그렇지 않으면 파일이 아닌 커널 ABI(시스템 호출)에서 정보를 얻을 수도 있습니다.ioctl()그리고소켓()다른 직접 시스템 호출이 아닌 경우.getCPU().

따라서 이를 염두에 두고 nvidia-smi가 정보를 얻기 위해 읽는 소스 파일을 찾고 있습니다.

사실 nouveau, radeontop, AMDGPU 및 Intel이 사용하는 모든 제품에도 어떤 이유로 공개되지 않은 이 정보를 얻는 유사한 방법이 있기 때문에 Nvidia만 넘어서 이것을 확장하고 싶습니다.

이러한 프로세스는 어떤 파일에서 정보를 얻습니까?

내 궁극적인 목표는 이 파일을 읽는 것입니다.콘키그리고 시스템 CPU 및 RAM 사용량에 대해 했던 것처럼 시스템의 각 GPU에 대해 초당 16회 그래프를 표시합니다.

답변1

명령을 사용하여 직접 찾을 수 있습니다.

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

실행되고 nvidia-smi열리는 모든 파일의 목록이 생성됩니다 results.txt.

libnvidia-ml.so.1사용하고 있음을 알게 될 것입니다.NVIDIA 관리 라이브러리. 라이브러리를 로드한 후 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회 실행하는 것은 어리석은 과잉이라고 생각합니다.

관련 정보