My friends, my life, my style - James S.F. Hsieh

10/21/2009

Event Tracing for Windows

ETW 全名為 "Event Tracing for Windows", 一種 Windows 作業系統提供的基礎建設, 用於高速追蹤系統的效能所設計的機制, ETW 基本上把角色分成 event providers, controllers, consumers, 和 event trace sessions 幾個部分, providers 代表著 event 的提供者, 而 sessions 代表著 ETW 的紀錄單位, ETW 所記錄的資訊會被紀錄在 Windows 的核心的 buffer 中, 在已非同步的方式傳給 consumers 或是非同步的寫到檔案中. controllers 則用於建立 sessions 與 enable/disable 相關的 providers. 相關的文章可以參考 Improve Debugging And Performance Tuning With ETW

ETW 可以記錄各種類型的資料型態並且用一致的方式進行資料的 publish, record, 與 present, 它使用了 data-driven 的方式來描述 event 的資料來達成上述的目標. 所以, 當我們要實作一個 event provider 時, 我們必須準備對應的 XML manifest 做為資料的描述, 並且註冊這個 manifest 來公開我們的 event, manifest 描述了一個 GUID 做為 event 的 ID, 這樣可以讓所有的 event consumer 都查詢與解釋這些資料, controller 也可以用這個 GUID 來通知對應的 provider, 而 provider 必須根據這個 manifest 描述的資料型態與語意來發出 event.

所以我們有幾個動作要完成才能完整的使用 ETW, 一下包含了動作與一些相關的 tools :

Provider 
  1. 定義 event 並且以 manifest 做為描述的方式  ecmangen.exe
  2. 註冊 event  wevtutil.exe
  3. 產生 event 對應的 C/C++ header 給 provider 使用  mc.exe
Controller 
  1. 用於啟動一個 provider  logman.exe   xperf.exe
Consumer 
  1. 用於即時顯示 provider 產生的 event  traceview.exe
  2. 用於儲存 provider 產生的 event  logman.exe   xperf.exe
  3. 用於顯示 provider 產生的 event  eventvwr.exe  xperfview.exe etviewer.exe
  4. 用於轉換 provider 產生的 event   tracerpt.exe
下次來介紹怎麼實作一個 Event provider :)