Saturday, August 15, 2009

免費 Win32 Kernel/User 效能分析工具 - Kernrate

“Measure. Don't tune for speed until you've measured, and even then don't unless one part of the code overwhelms the rest.” - Rob Pike
在Windows平台上,Microsoft有推出一個可以測量Kernel/User Mode的System Profiler。我們可以用它測量某一段時間的各種Performance Statistics。最棒的是,它可以用取樣(Sampling)的方式來統計出哪些API是屬於HotSpot,可以成為Performance Tuning的根據。
首先,可以在Microsoft Download上面找到它。
http://www.microsoft.com/downloads/details.aspx?familyid=d6e95259-8d9d-4c22-89c4-fad382eddcd1&displaylang=en
把它安裝起來之後,建議先將Symbol Server的環境安裝起來。
  1. 在環境變數中加入”_NT_SYMBOL_PATH=SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols”
  2. 將dbghelp.dll和symsrv.dll複製到kernrate的執行路徑下。
然後就可以開始來試試測量第一支程式-Explorer.exe
  1. 切到kernrate的執行目錄下。
  2. 執行”Kernrate_i386_XP.exe -n explorer -z USER32”
  3. 接下來就可以看到類似”***> Press ctrl-c to finish collecting profile data”的訊息,表示Kernrate已經開始在進行取樣。
  4. 當想要結束取樣的話,就按ctrl-c。最後會有一大串的測量結果跑出來。
Time   20 hits, 19531 events per hit -------- 
Module                                Hits   msec  %Total  Events/Sec 
_FindProp                                 6     110338    23 %        1062 
_MapWindowPoints                          2     110338     7 %         354 
DIBFromBitmap                             1     110338     3 %         177 
CallWindowProcAorW                        1     110338     3 %         177 
GetPropW                                  1     110338     3 %         177 
HMValidateHandleNoRip                     1     110338     3 %         177 
`string'                                  1     110338     3 %         177 
IsWindow                                  1     110338     3 %         177 
ValidateHwndNoRip                         1     110338     3 %         177 
SendMessageWorker                         1     110338     3 %         177 
RealDefWindowProcWorker                   1     110338     3 %         177 
GetWindowLongA                            1     110338     3 %         177 
TranslateAcceleratorW                     1     110338     3 %         177 
_EndUserApiHook                           1     110338     3 %         177 
DispatchMessageWorker                     1     110338     3 %         177 
UserCallWinProcCheckWow                   1     110338     3 %         177 
_SEH_epilog                               1     110338     3 %         177 
_SEH_prolog                               1     110338     3 %         177 
HMValidateHandle                          1     110338     3 %         177 
ValidateHwnd                              1     110338     3 %         177
以上,依照API被取樣的次數由多到少排序。當然,這個結果並不足以下任何定論,至少可以給一個量化的基礎,根據一些推理和調整,就可以找出真正的HotSpot。
參考資料:

No comments: