タスク/コマンド/プログラムのディスクIO読み取り/書き込みの概要を表示するユーティリティ

タスク/コマンド/プログラムのディスクIO読み取り/書き込みの概要を表示するユーティリティ

Linuxカーネルには追跡できる機能があるはずです全てアプリケーションの読み取りと書き込み(IO)と全てしかし、その子要素を計算して表示できるユーティリティは見たことがありません。

たとえば、CPU 時間の場合は、次のように使用してtime、わかりやすい CPU 使用情報を取得できます。

$ time cat --version > /dev/null

real    0m0.001s
user    0m0.001s
sys 0m0.000s

私はIOに関して似たようなものを探しています。例えば

$ calc_io task
Bytes read: 123456
Bytes written: 0

もちろん、/proc/$PID/io実行時情報を含む はありますが、Web ブラウザーなど、子プロセスを動的に生成および破棄するアプリケーションでそれを追跡するのは困難な作業のように思えます。実行して、strace -fF firefox生成されるすべての子プロセスを監視し、リアルタイムで追跡しようとする/proc/$PID/ioと、実装が難しすぎるように思えます。また、このファイルをどのくらいの頻度でポーリングして情報を取得するのでしょうか。子プロセスはほんの一瞬だけ存在する可能性があります。

もう一つのアイデアは、使用することですcgroupsが、使用したくない場合はどうすればよいですか? また、確認しました/sys/fs/cgroupが、関連する統計は表示されません。

答え1

私はこの投稿に出会い、とても興味深いと思いました。結局のところ、あなたが尋ねている質問は非常に自然なものなので、この問題はそれほど難しくないと思いました。

不完全で不完全な解決策しか見つけられませんでした。質問にまだ回答がないので、とにかく投稿することにしました。これには、systemd と cgroups2 を備えたシステムが必要です (あなたの言ったことを読みましたが、この解決策を見るのは興味深いかもしれません)。私は両方について学びましたが、習得していません。
私は arch ベースの Linux ディストリビューションでのみテストしました。

~]$ cat /etc/systemd/system/user\@1000.service.d/override.conf 
[Service]
Delegate=pids memory io

これを非特権ユーザーとして使用するには、IO コントローラーを「ユーザー systemd サブツリー」に「委任」する必要があるようです (特定の場所を示すことはできません。man systemd.resource-control。https://systemd.io/CGROUP_DELEGATIONhttps://wiki.archlinux.org/title/cgroups#As_unprivileged_user

~]$ cat ~/.config/systemd/user/my.slice 
[Slice]
IOAccounting=true

次に、プロセスを実行するために IOAccounting を有効にしたスライスを作成します。

リブート

~]$ cat foo.sh 
#!/bin/sh 

dd if=/dev/random of=/home/yarl/bar bs=1M count=7
dd if=/dev/random of=/home/yarl/bar bs=1M count=3

~]$ systemd-run --user --slice=my.slice /home/yarl/foo.sh

~]$ systemctl --user status my.slice
● my.slice - Slice /my
     Loaded: loaded (/home/yarl/.config/systemd/user/my.slice; static)
     Active: active since Sun 2021-11-07 20:25:20 CET; 12s ago
         IO: 100.0K read, 10.0M written
      Tasks: 0
     Memory: 3.2M
        CPU: 162ms
     CGroup: /user.slice/user-1000.slice/[email protected]/my.slice

nov. 07 20:25:20 pbpro systemd[1229]: Created slice Slice /my.

関連情報