我试图弄清楚 taskstats 结构中的统计数据是如何相加的。我写了一个简单的 C 程序,它运行了一段时间做 IO 并退出。我使用从 taskstats netlink 多播组获得的 taskstats 结构来监视该程序的统计信息。当我对cpu_delay_total
、blkio_delay_total
、swapin_delay_total
、和的值求和时freepages_delay_total
,我得到一个比经过时间 ( )的值大约 0.5 秒的值ac_utime
ac_stime
ac_etime
以下是 3.5 秒运行的统计数据:
ac_etime: 3536036
ac_utime: 172000
ac_stime: 3032000
cpu_delay_total: 792528445
blkio_delay_total: 46320128
swapin_delay_total: 0
freepages_delay_total: 0
将延迟、utime 和 stime 的值相加4042848.573
(将延迟除以 1000 以转换为微秒),而etime
只有3536036
!
有趣的是,挂钟时间给出的值实际上等于 utime+stime: cpu_run_real_total: 3204000129
,而ac_utime + ac_stime: 3204000
cpu_run_real_total
尽管 taskstats.h 中的注释明确指出这是挂钟时间,但该字段是否给出了 cpu 时间?这些字段的总和大于经过时间的原因可能是什么?
我的内核版本是 3.2.0-38。