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

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

私はLinuxカーネルにトレースを許可する機能があると確信しています。みんなアプリケーションの読み書き(IO)とみんな子ですが、それを計算して表示できるユーティリティを見たことはありません。

timeたとえば、CPU時間の場合は、簡潔な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を持つシステムが必要です(あなたの言葉を読んでいますが、このソリューションを見るのも面白いかもしれません)。どちらも学びましたが、マスターすることはできませんでした。
私はアーチベースのLinuxディストリビューションでのみテストしました。

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

権限のないユーザーとして使用するには、ioコントローラを "user 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.

おすすめ記事