【问题标题】:Measuring device drivers CPU/IO utilization caused by my program测量由我的程序引起的设备驱动程序 CPU/IO 利用率
【发布时间】:2011-01-06 19:16:25
【问题描述】:

有时代码可以利用设备驱动程序直到系统无响应。

最近我优化了一个 WIN32/VC++ 代码,它使系统几乎没有响应。但是,CPU 使用率非常低。原因是 GDI 对象(钢笔、画笔等)的创建和销毁数以千计。一旦我将代码重构为只创建一次所有对象 - 系统就会再次响应。

这让我想到一个问题:有没有办法测量给定程序/函数/代码行的设备驱动程序(GPU/磁盘/等)的 CPU/IO 使用率?

【问题讨论】:

  • 如果你想看到你的程序的整体效果,打开进程资源管理器,查看系统进程下的线程,以及csrss.exe下的线程。不确定是否可以将其与行/方法等相关联。
  • 看看this method。它的测量结果非常粗略,但它可以准确地告诉您,直到代码行、花费的时间以及是 I/O 还是 CPU。

标签: c++ windows debugging device-driver measurement


【解决方案1】:

在开始之前,您可以使用 SysInternals Utilities(现在是 Microsoft 产品,参见 http://technet.microsoft.com/en-us/sysinternals/bb545027)中的各种工具来给出一个基本概念。在您的情况下,进程资源管理器 (procexp) 和进程监视器 (procmon) 表现不错。在进行深入分析之前,它们可用于让您对缓慢的类型有一个基本的了解。

然后您可以使用 xperf http://msdn.microsoft.com/en-us/performance/default 向下钻取。通过正确的设置,该工具可以让您找到导致速度缓慢的确切功能,而无需将分析代码注入现有程序。已经有一个 PDC 视频谈论如何使用它http://www.microsoftpdc.com/2009/CL16,我强烈推荐这个工具。根据我自己的经验,最好先使用 procexp/procmon 进行观察,然后再使用 xperf 定位您的嫌疑人,因为如果不以智能方式过滤,xperf 会产生大量信息。

在某些涉及锁定争用的困难情况下,Windows 调试工具 (windbg) 将非常方便,并且有专门的书籍讨论它的用法。这些书通常讨论挂起检测,这里也有很多技术可以用来检测慢速。 (例如 !runaway)

【讨论】:

    【解决方案2】:

    也许您可以为此使用ETW?不太确定它是否能帮助您了解是哪条线路导致了什么,但它应该可以让您全面了解您的应用的运行情况。

    【讨论】:

      【解决方案3】:

      要实时查看程序的CPU/内存/磁盘使用情况,可以使用windows自带的资源监视器和任务管理器程序。您可以通过打印出 systime 来找到一个代码块相对于其他代码块所花费的时间。记住不要一次做太多监控,因为这会影响你的计算。

      如果您知道程序占用了多少 CPU 时间以及代码块占用了多少时间百分比,那么您可以大致估计一个代码块占用多少 CPU 时间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-29
        • 1970-01-01
        相关资源
        最近更新 更多