现在用联想的一个X200,最近发现CPU总是不闲着,用电池消耗的也特别快,用Process Explorer看了一下,报告说DPC占很多的CPU时间:
这个很不懂,要是一般的进程,杀掉就可以了,比如传说中的firefox就喜欢吃内存和CPU(其实很多时候是flash闹的),DPC叫 Deferred Procedure Call, 是Windows用来处理中断的玩意,这个东西咋办呢?
研究了一下发现 Windows DDK 的 tracelog 不错。 Windows DDK是驱动开发的工具包,其实我只要里面的一个tracelog.exe,和tracerpt.exe,网上找不到,害得我去当了最新的Windows DDK 7.0。参见这里:How much time is your driver spending in its DPCs and ISRs?
运行:
tracelog -start -f test01.etl -dpcisr -UsePerfCounter
tracelog -stop
tracerpt test01.etl -report d.txt -df</pre>
结果如下(节选):
DPC processor utilization for the whole trace
+--------------------------------------------------------+
| Processor Utilization Module Address |
+--------------------------------------------------------+
| 0 18.34% ntkrnlpa.exe 8050327A |
| 1 0.00% ntkrnlpa.exe 8050327A |
| 0 16.92% chdau32.sys A5CC2DC6 |
| 1 0.00% chdau32.sys A5CC2DC6 |
ntkrnlpa.exe没啥好看的,windows kernel,看看chdau32.sys吧,在同一个文件中:
+--------------------------------------------------------------------------------+
| Distribution of chdau32.sys (A5CC2DC6) DPC execution times for the whole trace |
+--------------------------------------------------------------------------------+
| Lower Bound Upper Bound Count Percent |
+--------------------------------------------------------------------------------+
| 0 1 0 0.00% |
.......
| 50 100 0 0.00% |
| 100 250 0 0.00% |
| 250 500 0 0.00% |
| 500 1000 636 13.94% |
| 1000 2500 3927 86.06% |
+--------------------------------------------------------------------------------+
| 4563 100.00% |
+--------------------------------------------------------------------------------+
这个肯定是有问题的,因为windows建议DPC的处理不能超过100ms,这个显然超过了很多,所以这就是罪魁祸首了。这个驱动属于Conexant 20561 SmartAudio HD, Disable掉这个驱动,果然CPU就没有人占用了!DPC也基本就是0了。
这个驱动别的地方没有,只有联想的网站上有,更新到最新的,还是不能解决这个问题,只好Disable他了。不过有趣的是,当我播放一点音乐或者弄点什么声音的时候,它的DPC处理就很好!真有意思……
另外还有两个工具,一个是DPC Latency Check的工具,这个工具显示目前系统的Latency,Latency高的系统播放电影、声音的时候就会产生不连贯的现象。我的系统默认就是黄色的!但是如果disable了Conexant 20561的该死的声卡,或者播放点音乐,它就变成绿色的了。
另外一个是微软的RATTv3,这个提供跟tracelog很类似的功能,不过结果不是很准确,也能弄出点结果来。而且,它还有GUI呢——一个Tray Icon.