CPU周期与总CPU时间的关系

时间:2016-09-17 16:33:43

标签: windows cpu

在Windows上,GetProcessTimes()和QueryProcessCycleTime()可用于获取应用程序的所有线程的总计。我期望(显然天真地)找到总循环数和总处理器时间(用户+内核)之间的比例关系。转换为相同单位(秒)并以应用程序运行时间的百分比表示时,它们甚至不会关闭;它们之间的比例差异很大。

应用程序启动后,它们相当接近。

3.6353% CPU cycles
5.2000% CPU time
0.79    Ratio

但是这个比例随着应用程序保持闲置而增加(低于11小时后,大部分是空闲的)。

0.0474% CPU cycles
0.0039% CPU time
12.16   Ratio

显然,计算的周期不会对用户或内核时间有所贡献。我很好奇它是如何运作的。请赐教。

感谢。

  • 文斯

1 个答案:

答案 0 :(得分:0)

GetProcessTimes和QueryProcessCycleTime值以不同方式计算。 GetProcesTimes / GetThreadTimes更新以响应计时器中断,而QueryProcessCycleTime值基于实际线程执行时间的跟踪。当使用和比较两种API结果时,这些不同的测量方法可能导致非常不同的时序结果。特别是因为GetThreadTimes仅包含其线程计数器的完全完成的时隙值(参见http://blog.kalmbachnet.de/?postid=28),这通常会导致不正确的时序。

由于GetProcessTimes通常报告的时间少于实际花费的时间(由于并非总是完成其时间片),因此它是有意义的 与循环测量百分比相比,其CPU时间百分比将随着时间的推移而降低。