跟踪/计算进程的CPU和IO使用的标准方法

时间:2011-03-03 13:56:23

标签: c windows unix io cpu

我一直在寻找计算运行流程的CPU和I / O使用的标准方法。我正在研究以下选项。

Running a Windows program and detect when it ends with C++

How does this code calculate the number of CPU cycles elapsed?

http://www.codeproject.com/KB/threads/Get_CPU_Usage.aspx

我无法让最后一个工作。我需要这些数字。

usr = userTime - last_userTime;
ker = kernelTime - last_kernelTime;
idl = idleTime - last_idleTime;

我主要寻找基于Windows GCC的解决方案。我正在使用Dev C ++ 4来测试这些。我也对unix(solaris / Linux with GCC)上的类似解决方案感兴趣。

还有一种获取cpu的方法,当进程处于运行状态时(如图中的跟踪),以及限制进程的CPU使用率时,进程使用它。 注意:我不是在寻找工具。我正在寻找标准的C代码。 如果你想分享其他语言的标准,比如C ++,Python,欢迎你。

1 个答案:

答案 0 :(得分:1)

标准方法是使用Windows的性能计数器。它们有“原始”和“烹饪”形式,可以通过至少三种不同的方式访问:

  1. direct:Windows registry
  2. 中的特殊键
  3. 效果数据助手(PDH)组件
  4. WMI
  5. 我应该警告你,所有这些都有一个相当陡峭的初始学习曲线。一旦你已经达到可以合理地收集和使用来自一个计数器的数据的程度,那么添加更多数据通常很容易。

    在您的问题中,您还提到了一种收集CPU使用率数据的完全不同的方法。这里的想法是定期使用GetProcessTimes。例如,在启动子进程后,您可以设置一个计时器并每秒调用一次,以获得子进程的持续CPU使用率。

    如果您要以这种方式获得CPU使用率,您可能希望使用GetProcessMemoryInfo以几乎相同的方式收集内存使用情况统计信息。

    但是,对于I / O统计数据,我不太了解性能计数器的真正替代方法。