Skip to content

Add timing mechanism for renders on Intel hardware

Mark Janes requested to merge majanes/mesa:intel-measure into master

This infrastructure collects GPU timestamps over common intervals, and generates a CSV report to show how long rendering took. The overhead of collection is limited to the flushing that is required at the interval boundaries for accurate timestamps.

By default, timing data is sent to stderr. To direct output to a file: INTEL_MEASURE=file=/tmp/measure.csv {workload}

To begin capturing timestamps at a particular frame: INTEL_MEASURE=file=/tmp/measure.csv,start=15 {workload}

To capture only 23 frames: INTEL_MEASURE=count=23 {workload}

To capture frames 15-37, stopping before frame 38: INTEL_MEASURE=start=15,count=23 {workload}

Designate an asynchronous control file with: INTEL_MEASURE=control=path/to/control.fifo {workload}

As the workload runs, enable capture for 5 frames with:

$ echo 5 > path/to/control.fifo

Enable unbounded capture:

$ echo -1 > path/to/control.fifo

and disable with:

$ echo 0 > path/to/control.fifo

Select the boundaries of each snapshot with: INTEL_MEASURE=draw : DEFAULT - Collects timings for every render INTEL_MEASURE=rt : Collects timings when the render target changes INTEL_MEASURE=batch : Collects timings when batches are submitted INTEL_MEASURE=frame : Collects timings at frame boundaries

With INTEL_MEASURE=interval=5, the duration of 5 events will be combined into a single record in the output. When possible, a single start and end event will be submitted to the GPU to minimize stalling. Combined events will not span batches, except in the case of INTEL_MEASURE=frame.

Merge request reports