2012-01-20 51 views
0

如何確定ETW會話是否正在丟棄事件?當ETW丟棄事件時檢測到

如果它正在丟棄事件,我如何配置跟蹤會話以便事件不會被丟棄?

我寫了一個自定義的ETW提供程序來幫助進行一些調試工作。我目前使用logman.exe捕獲跟蹤數據。

查看結果時,看起來有些事件正在丟失。基本上我正在尋找類似:

事件A 事件C

,他們的應該是介入的事件B,但一個沒有出現在跟蹤文件。它應該是不可能要做到這一點,這使我相信,ETW被丟棄的事件。

當然,我想驗證我看到的問題是由於丟失的事件,而不是由我的代碼中的錯誤引起的。我試過谷歌,但無法提供任何東西。是否有人知道我可以檢查是否有事件被丟棄?

+0

我一直在使用logman來收集結果。 –

回答

0

我一直在使用logman來捕獲結果。它看起來像tracelog會給我關於丟失事件的信息,並且我可以調整它的緩衝參數以減少事件損失。

1

它沒有直接回答這個問題(如何檢測滴),但它可能解釋滴:

EVENT_TRACE_NO_PER_PROCESSOR_BUFFERING

寫入已登錄不同的處理器來共同 緩衝的事件。當使用系統時間在不同處理器 上發佈事件時,使用此模式可以消除不按順序出現 的事件問題。此模式還可以消除 循環日誌看來會將事件放在多個處理器 計算機上的問題。

如果不使用這種模式,並且使用系統的時間,該事件可能 顯現出的順序在多處理器計算機上。這是因爲 ETW緩衝區與處理器而不是線程關聯。其結果 ,如果一個線程從一個CPU切換到另一個,後者CPU相關聯的緩衝器 可以與前CPU相關聯的一個 之前刷新到磁盤。

如果您期望發生大量事件(例如,每秒超過1000個事件),則不應使用此模式。

注意,處理器數不包含與該事件。在Windows 7和Windows Server 2008 R2之前不可用 。

0

如果您使用xperf收集日誌,它會在事件丟失時生成警告。使用xperf,您還可以使用緩衝區大小進行播放,並可以將日誌記錄分爲多個記錄器。