在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的環境安裝起來。
- 在環境變數中加入”_NT_SYMBOL_PATH=SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols”
- 將dbghelp.dll和symsrv.dll複製到kernrate的執行路徑下。
- 切到kernrate的執行目錄下。
- 執行”Kernrate_i386_XP.exe -n explorer -z USER32”
- 接下來就可以看到類似”***> Press ctrl-c to finish collecting profile data”的訊息,表示Kernrate已經開始在進行取樣。
- 當想要結束取樣的話,就按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。
參考資料:
- kernrate symbol configuration
- An introduction to kernrate (the Windows kernel profiler)
- Kernrate Usage Guide.doc in kernrate package (推薦使用前必看)
No comments:
Post a Comment