# Event Tracing for Windows

Event Tracing for Windows (ETW), manchmal kurz Event Tracing (etwa: Ereignisverfolgung) bezeichnet, ist eine Softwareplattform unter Microsoft Windows, um eine detaillierte Ablaufverfolgung von Computerprogrammen zu ermöglichen. ETW läuft im Windows-Kernel und ist auf eine hohe Performance optimiert. ETW ist zudem die Nachfolgetechnologie zu den davor eingesetzten Performance Countern.
ETW bietet hierbei die Möglichkeit die Aufzeichnung von Ereignissen zur Laufzeit des Programms zu starten und zu stoppen. Zudem kann nach den aufzuzeichneten Ereignissen gefiltert werden um die aufzuzeichnende Datenmenge zu reduzieren.
ETW-Ereignisse können hierbei von Anwendungsentwicklern bereitgestellt oder in eigenen Trace-Anwendungen konsumiert werden. Die Trace-Ereignisse können dazu verwendet werden eine Anwendung zu debuggen sowie Kapazitäts- und Leistungsanalysen durchzuführen.

## ETW-Rollen

Grundsätzlich unterscheidet man bei ETW zwischen Providern, Consumern, und Controllern:

### Provider

    Eine Anwendung, welche ETW-Ereignisse bereitstellt. Provider werden mittels wevtutil zentral registriert und können mittels logman -query providers aufgelistet werden. Unter PowerShell kann stattdessen Get-ETWTraceProvider verwendet werden.

### Consumer

    Zeichnet ETW-Ereignisse aus ETW-Sessions auf. Die Ereignisse können hierbei direkt aus dem Puffer einer ETW-Session oder aus einer Datei gelesen werden und werden in chronologischer Reihenfolge zugestellt.
    Windows liefert einige Programme mit, welche auf die Aufzeichnung und Anzeige bestimmter ETW-Ereignisse spezialisiert sind. Hierzu gehört der Windows Performance Monitor, der Taskmanager, der Event Viewer, sowie die Anwendungs- und Systemdiagnose.

### Controller

    Ordnet den Providern entsprechende Consumer zu, aktiviert und deaktiviert die Ereignisaufzeichnung und bestimmt, welche Ereignisse aufgezeichnet werden. Der Controller bestimmt zudem die Größe des Puffers für die Aufzeichnung und optional den Speicherort der Tracelog-Datei. Zugunsten der Performance und Stabilität des Betriebssystems können hierbei einzelne ETW-Ereignisse verloren gehen, etwa wenn der Puffer überfüllt ist. Der Controller erhält von ETW zudem Statistiken zur Ereignis-Aufzeichnung.

## Event Tracing Sessions

ETW unterstützt unter Windows 2000 bis zu 32 und bei neueren Windows-Systemen bis zu 64 gleichzeitigen Aufzeichnungen von ETW-Events, den sogenannten Event Tracing Sessions.
Hierbei sind zwei Sessions für das System reserviert:

### Global Logger Session

    Stellt das Logging bereits zum Start des Betriebssystems bereit und dient für die Aufzeichnung von Ereignissen von Gerätetreibern.

### NT Kernel Logger Session

    Stellt die Aufzeichnung von Ereignissen des Betriebssystemkernels bereit. Hierzu gehören unter anderem der Zustand zur CPU, dem Zustand des Arbeitsspeichers und Informationen zu I/O-Ereignissen.

## Anwendungen

* Performance Explorer. In: Developer Network. Microsoft, abgerufen am 2. Mai 2017 (englisch, Profiler von .NET Anwendungen in Visual Studio, mit dem ETW-Events aufgezeichnet und analysiert werden können).
* dotTrace .NET Performance Profiler. Jetbrains, abgerufen am 2. Mai 2017 (englisch, Profiler von .NET Anwendungen, mit dem ETW-Events aufgezeichnet und analysiert werden können).
* PerfView. In: GitHub. Microsoft, abgerufen am 2. Mai 2017.
* Windows Performance Toolkit. In: Hardware Dev Center. Microsoft, abgerufen am 2. Mai 2017 (enthält den Windows Performance Recorder (WPR) und den Windows Performance Analyzer (WPA), welche ETW-Events auswerten).

## Bibliotheken

* Microsoft EventSource Library. In: NuGet Gallery. Microsoft, abgerufen am 2. Mai 2017 (Ermöglicht die Implementierung von ETW-Providern).
* Jon Wagner: EventSourceProxy (ESP). Abgerufen am 2. Mai 2017 (Vereinfacht die Implementierung von ETW-Providern).
* Microsoft TraceEvent Library. In: NuGet Gallery. Microsoft, abgerufen am 2. Mai 2017 (Ermöglicht die Implementierung von ETW-Consumern).
* Microsoft EventRegister Tool. In: NuGet Gallery. Microsoft, abgerufen am 2. Mai 2017 (Anwendung zur Registrierung von ETW-Providern).