我想弄清楚taskstats结构中的统计信息如何加起来。我写了一个简单的C程序,它运行一段时间并执行IO并退出。我使用taskstats结构来监视这个程序的统计信息,我从taskstats netlink多播组中获得这个结构。当我总结的cpu_delay_total
,blkio_delay_total
,swapin_delay_total
,freepages_delay_total
,ac_utime
和ac_stime
的值,得到了一个值,该值比所经过的时间的值大约0.5秒(ac_etime
)taskstats stats not add up
这里有一个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
领域给予的CPU时间,尽管在taskstats.h评论明确指出,这是一个挂钟时间?这些字段的总和大于经过时间的原因是什么?
我的内核版本是3.2.0-38。