2012-01-20 53 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,您还可以使用缓冲区大小进行播放,并可以将日志记录分为多个记录器。