我很确定 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
其中包含运行时信息,但跟踪它以动态生成和销毁子级的应用程序,例如网络浏览器似乎是一项艰巨的任务。我想如果您运行strace -fF firefox
然后监视所有正在生成的孩子并尝试实时跟踪/proc/$PID/io
- 不,似乎很难实现,那么您将多久轮询一次该文件以获取信息?孩子们可能存在一瞬间。
另一个想法是使用cgroups
,但如果我不想使用它们怎么办?我也检查过/sys/fs/cgroup
,我没有看到任何相关的统计数据。
我偶然发现了这篇文章,发现它非常有趣。我认为这个问题并不难,因为你问的问题毕竟是很自然的。
我只能找到一个不完美和不完整的解决方案。我还是决定发布它,因为问题还没有回答。这需要一个带有 systemd 和 cgroups2 的系统(我读过你所说的,但看到这个解决方案可能会很有趣)。这两个我都学过,我没有掌握。
我只在基于 arch 的 linux 发行版上进行了测试。
似乎您需要将 io 控制器“委派”到您的“用户 systemd 子树”以将其用作非特权用户(我无法指出一个特定的位置。man systemd.resource-control。https: //systemd.io /CGROUP_DELEGATION . https://wiki.archlinux.org/title/cgroups#As_unprivileged_user )
然后创建一个启用了 IOAccounting 的切片来运行您的进程。
重启