获取正在运行特定进程的处理器数量

时间:2012-02-22 06:02:00

标签: c++ windows performance winapi

我有与进程关联的processID。我使用CreateProcess()函数创建了此过程。在运行期间,我想跟踪它运行的处理器数量以及此可执行文件在多核计算机上使用的时间。

我想写同样的C ++代码;谁可以帮我这个事?

我正在使用Win XP多核计算机。

2 个答案:

答案 0 :(得分:1)

GetProcessAffinityMask

  

检索指定进程的进程关联掩码和系统的系统关联掩码。

GetProcessTimes

  

检索指定进程的计时信息。

答案 1 :(得分:0)

您可以使用Windows事件跟踪(ETW)和CSwitch事件(在每个上下文切换时发出)在Vista或更高版本上捕获此级别的详细信息。

各种工具(例如Windows Performance Toolkit)捕获并可视化此数据。

但是,Windows XP不支持此功能。

如果您只是想知道您的典型并发性(即在给定时间运行了多少线程),您可以定期对perfmon线程数据进行采样(来自HKEY_PERFORMANCE_DATA)。 “线程状态”计数器将为您提供进程中每个线程的即时状态(即每个线程是否正在运行)。显然,这个抽样过程会将最大并发数限制为(处理器数量-1)。

但你真的需要这么多细节吗? GetProcessTimes通常就足够了。

<强>更新

您可以在测试计算机上运行应用程序,只需使用perfmon测量每个CPU的利用率。您还应该测量每个进程的CPU利用率,以确保没有其他任何进程意外运行。

要捕获报告的数据,请以管理员身份运行perfmon。

  • 导航到右侧的“性能监视器”以显示实时性能图表。选择要监视的对象/计数器(即所有处理器和进程的“%Processor Time”)。 Perfmon应该开始实时捕获数据。
  • 右键点击图表并选择捕获频率(例如,如果您的应用运行了几个小时,您可能不希望每秒都有数据)。
  • 右键单击右侧树中的“性能监视器”节点,然后选择“新建|数据收集器集”。输入名称,然后单击其他默认值。
  • 导航到右侧的数据收集器集(在“数据收集器集|用户定义的”下)。您可以使用工具栏按钮(或右键单击)来启动和停止数据收集。
  • 现在您已经有一些数据返回到性能监视器图形并选择“查看日志数据”(第二个工具栏按钮)。从“源”选项卡中选择日志文件。这会显示捕获数据的图表。
  • 右键单击图表并选择“将数据另存为...”您可以选择CSV或TSV。

就是这样。