gpt4 book ai didi

linux - 是否可以测量 Linux 进程的累积 IO 等待时间?

转载 作者:太空狗 更新时间:2023-10-29 12:39:47 26 4
gpt4 key购买 nike

我可以使用哪个 C API 来获取 Linux 上退出的子进程的总磁盘 IO 等待时间(绝对值)? 例如PID 为 1234 的进程运行了 10 秒,并等待 IO 操作完成 3 秒。

背景:我试图找出磁盘缓慢对应用程序缓慢的影响。换句话说:应用程序必须等待磁盘操作完成多长时间(以毫秒为单位)?

尽管 Linux 内核在 IO 上为每个进程提供了一些统计信息 (/proc/<PID>/io),但我没有找到任何方法来获取正在运行的(已完成的)进程的累积等待时间。

CPU 时间是在 *rusage 上提供的wait4()的结构或 getrusage()功能,但没有 IO 等待时间。

顶部显示的 IO 等待时间没有帮助,因为它是按一段时间内的比率计算的(% = IOwait_time/Idle_Time over last 5 seconds)。基于此信息,无法可靠地计算进程在整个生命周期内的累积 IO 等待时间。

我不能做任何繁重的用户空间分析,因为它会减慢应用程序的速度。在最好的情况下,我想在子进程终止时收集进程的总 IO 等待时间。

来自答案和评论:

@emmrk 提供了检查每个进程统计资源的提示 /proc/<pid>/stat进程统计接口(interface)。不幸的是,此资源(与系统范围的 /proc/stat 相比)不提供 IO 等待计数器。

@gavv:讨论了在退出之前捕获进程的好方法: Extract all statistic of a process from /proc just before the process exit (Linux)

@盖乌斯mentions他仍然能够阅读/proc/<pid>/stat即使在进程退出后不久。

最佳答案

查看 man procfs,每个进程的 /proc/stat 条目:

         iowait (since Linux 2.5.41)
(5) Time waiting for I/O to complete.

编辑:

根据您想要达到的精度,获取值范围的“实用”方法从运行后台脚本到 cat/proc/pid/statn秒到使用 kprobes 捕获 sys_exit 并读取 /proc/pid/stat,同时防止进程退出。

kprobe 方法可能会使您的系统变得笨拙(因为许多进程将无法退出),因此另一种方法是通过 连接一个负责显示统计信息的函数>/proc/ 文件系统。相关代码在内核源码中的/fs/proc/stat.c

关于linux - 是否可以测量 Linux 进程的累积 IO 等待时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49734845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com