Lets get to it! Here is how to take a basic trace then look at CPU and disk utilization. Its really simple, just three commands to turn on tracing, turn it off, and then view the trace.
The next article in this series is Xperf support for XP
First, from an elevated command prompt window, enable a basic set of the kernel events using this command:
xperf -on PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+INTERRUPT+DPC+CSWITCH -maxbuffers 1024
This command enables a set of events in the kernel and sets the maximum number of buffers to 1024. The default size for each buffer is 64K. So for this session, ETW will use up to 64MB of memory for ETW buffers. As buffers are filled with events, they are written to the log file in the background and then made available again for accepting events. By default, xperf sets the minimum number of buffers to 64. ETW will start with this many buffers and only allocate more buffers if needed. Events will only be lost if ETW cannot allocate more buffers and/or keep up with the event rate by writing data to the disk. By default, the kernel events are written to \kernel.etl on the current drive.
Next, do something interesting – it can be anything from opening Internet explorer and a web page, or compiling a program with Visual studio, to something more complex like opening three or four Microsoft Office applications and doing some work.
Run the following command when your interesting thing is done:
xperf -d foo.etl
This simple command will take 10 to 30 seconds (or possibly longer) because it merging the raw kernel event data with meta data and doing some other post processing. We call this ‘stop and merge’. Here is what this command does
Performs a ‘run down’, during which the kernel logs a set of events that describe the state of the system.
Turns off the kernel logger
Interlaces data from multiple trace files and the kernel trace.
Adds some meta info to the trace needed for processing the trace on other systems. This data is saved in the trace as a set of synthetic events.
Saves the trace data into the file foo.etl (or the file name of your choice).
Finally, load the trace in the Performance Analyzer with the following command
For this example, I took a trace of using Visual Studio 2008 to compile a program. Here are screen shots of the CPU Usage by CPU and for disk I/O counts.
The CPU usage by process graph makes this easy, just click on the fly out control on the left of the window and select the CPU Usage by Process graph.
The fly out frame lists the graphs available for the events in the trace. If there trace doesn’t contain events that are needed for a particular graph, then the graph is not shown.
Performance Analyzer will automatically save the graphs you have selected. You can change them at any time.
For my trace, the CPU usage for the DEVENV.EXE process and two CL.EXE processes looked like this.
DEVENV is the Visual Studio 2008 environment itself. The CL.EXE processes are the two compiler sessions it started, one for each CPU on my laptop.
This is a simple example that illustrates some key points
The kernel events can be enabled and disabled at any time. There is no need to re-boot the system, log-out/log-in, or restart processes to use the kernel events, or any ETW event provider. ETW events from any source can be dynamically controlled at run time.
The xperf tools are designed for a post processing model, one where a trace is captured, then later analyzed. This is in contrast to an observational model where you watch dynamic charts, graphics, or tabular data as something occurs. The reason for this model is that ETW and the tools are designed for log time efficiency.
This model is also specifically designed for taking traces on one machine, then analyzing them on another machine. This ability is critical for running performance tests in a lab setting.
The tools let you look at both system wide activity and process specific activity.