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回実行するのは愚かな過剰だと思います。