-
Notifications
You must be signed in to change notification settings - Fork 5
i915 perf stream format
The stream is made of records that all have the same header:
struct i915_perf_record_header {
uint32_t type;
uint16_t pad;
uint16_t size;
};Most records are of type DRM_I915_PERF_RECORD_SAMPLE and contain the metrics we're interested in capturing. Other record types are DRM_I915_PERF_RECORD_OA_REPORT_LOST - signalling that the hardware had to drop an OA report and DRM_I915_PERF_RECORD_OA_BUFFER_OVERFLOW - signalling that the circular OA buffer that the hardware writes OA reports into has filled.
header->size is the total size of the record, including the size of the struct i915_perf_record_header.
The contents of sample records, following the header, are configurable via the properties given to the DRM_IOCTL_I915_PERF_OPEN ioctl when opening a stream. The boolean DRM_I915_PERF_PROP_SAMPLE_xyz properties control what's included in a stream's sample records. The relative order of data within a sample is predefined and documented in the i915_drm.h header. DRM_I915_PERF_PROP_SAMPLE_OA_REPORT requests i915 perf to forward raw OA snapshots as part of the sample payload. Each optional sub record of data that can be added to a sample payload can be expected to be 8 byte aligned.
The hardware can write raw OA counter snapshots in a number of formats with different sizes. Currently we're mostly just using the largest, 256 byte, formats I915_OA_FORMAT_A45_B8_C8 on Haswell or I915_OA_FORMAT_A32u40_A4u32_B8_C8 on Broadwell+
| Byte Offset | Counter |
|---|---|
| 0 | Report ID / Reason |
| 4 | Timestamp |
| 8 | Undefined |
| 12 | Aggregate Counter 0 |
| 16 | Aggregate Counter 1 |
| 20 | Aggregate Counter 2 |
| 24 | Aggregate Counter 3 |
| 28 | Aggregate Counter 4 |
| 32 | Aggregate Counter 5 |
| 36 | Aggregate Counter 6 |
| 40 | Aggregate Counter 7 |
| 44 | Aggregate Counter 8 |
| 48 | Aggregate Counter 9 |
| 52 | Aggregate Counter 10 |
| 56 | Aggregate Counter 11 |
| 60 | Aggregate Counter 12 |
| 64 | Aggregate Counter 13 |
| 68 | Aggregate Counter 14 |
| 72 | Aggregate Counter 15 |
| 76 | Aggregate Counter 16 |
| 80 | Aggregate Counter 17 |
| 84 | Aggregate Counter 18 |
| 88 | Aggregate Counter 19 |
| 92 | Aggregate Counter 20 |
| 96 | Aggregate Counter 21 |
| 100 | Aggregate Counter 22 |
| 104 | Aggregate Counter 23 |
| 108 | Aggregate Counter 24 |
| 112 | Aggregate Counter 25 |
| 116 | Aggregate Counter 26 |
| 120 | Aggregate Counter 27 |
| 124 | Aggregate Counter 28 |
| 128 | Aggregate Counter 29 |
| 132 | Aggregate Counter 30 |
| 136 | Aggregate Counter 31 |
| 140 | Aggregate Counter 32 |
| 144 | Aggregate Counter 33 |
| 148 | Aggregate Counter 34 |
| 152 | Aggregate Counter 35 |
| 156 | Aggregate Counter 36 |
| 160 | Aggregate Counter 37 |
| 164 | Aggregate Counter 38 |
| 168 | Aggregate Counter 39 |
| 172 | Aggregate Counter 40 |
| 176 | Aggregate Counter 41 |
| 180 | Aggregate Counter 42 |
| 184 | Aggregate Counter 43 |
| 188 | Aggregate Counter 44 |
| 192 | Boolean Counter 0 |
| 196 | Boolean Counter 1 |
| 200 | Boolean Counter 2 |
| 204 | Boolean Counter 3 |
| 208 | Boolean Counter 4 |
| 212 | Boolean Counter 5 |
| 216 | Boolean Counter 6 |
| 220 | Boolean Counter 7 |
| 224 | Custom Counter 0 |
| 228 | Custom Counter 1 |
| 232 | Custom Counter 2 |
| 236 | Custom Counter 3 |
| 240 | Custom Counter 4 |
| 244 | Custom Counter 5 |
| 248 | Custom Counter 6 |
| 252 | Custom Counter 7 |
| Byte Offset | Counter |
|---|---|
| 0 | Report ID / Reason |
| 4 | Timestamp |
| 8 | Context ID |
| 12 | GPU Clock Ticks |
| 16 | 40 bit Aggregate Counter 0 least significant 32 bits |
| 20 | 40 bit Aggregate Counter 1 least significant 32 bits |
| 24 | 40 bit Aggregate Counter 2 least significant 32 bits |
| 28 | 40 bit Aggregate Counter 3 least significant 32 bits |
| 32 | 40 bit Aggregate Counter 4 least significant 32 bits |
| 36 | 40 bit Aggregate Counter 5 least significant 32 bits |
| 40 | 40 bit Aggregate Counter 6 least significant 32 bits |
| 44 | 40 bit Aggregate Counter 7 least significant 32 bits |
| 48 | 40 bit Aggregate Counter 8 least significant 32 bits |
| 52 | 40 bit Aggregate Counter 9 least significant 32 bits |
| 56 | 40 bit Aggregate Counter 10 least significant 32 bits |
| 60 | 40 bit Aggregate Counter 11 least significant 32 bits |
| 64 | 40 bit Aggregate Counter 12 least significant 32 bits |
| 68 | 40 bit Aggregate Counter 13 least significant 32 bits |
| 72 | 40 bit Aggregate Counter 14 least significant 32 bits |
| 76 | 40 bit Aggregate Counter 15 least significant 32 bits |
| 80 | 40 bit Aggregate Counter 16 least significant 32 bits |
| 84 | 40 bit Aggregate Counter 17 least significant 32 bits |
| 88 | 40 bit Aggregate Counter 18 least significant 32 bits |
| 92 | 40 bit Aggregate Counter 19 least significant 32 bits |
| 96 | 40 bit Aggregate Counter 20 least significant 32 bits |
| 100 | 40 bit Aggregate Counter 21 least significant 32 bits |
| 104 | 40 bit Aggregate Counter 22 least significant 32 bits |
| 108 | 40 bit Aggregate Counter 23 least significant 32 bits |
| 112 | 40 bit Aggregate Counter 24 least significant 32 bits |
| 116 | 40 bit Aggregate Counter 25 least significant 32 bits |
| 120 | 40 bit Aggregate Counter 26 least significant 32 bits |
| 124 | 40 bit Aggregate Counter 27 least significant 32 bits |
| 128 | 40 bit Aggregate Counter 28 least significant 32 bits |
| 132 | 40 bit Aggregate Counter 29 least significant 32 bits |
| 136 | 40 bit Aggregate Counter 30 least significant 32 bits |
| 140 | 40 bit Aggregate Counter 31 least significant 32 bits |
| 144 | 32 bit Aggregate Counter 32 |
| 148 | 32 bit Aggregate Counter 33 |
| 152 | 32 bit Aggregate Counter 34 |
| 156 | 32 bit Aggregate Counter 35 |
| 160 | 40 bit Aggregate Counter 0 most significant 8 bits |
| 161 | 40 bit Aggregate Counter 1 most significant 8 bits |
| 162 | 40 bit Aggregate Counter 2 most significant 8 bits |
| 163 | 40 bit Aggregate Counter 3 most significant 8 bits |
| 164 | 40 bit Aggregate Counter 4 most significant 8 bits |
| 165 | 40 bit Aggregate Counter 5 most significant 8 bits |
| 166 | 40 bit Aggregate Counter 6 most significant 8 bits |
| 167 | 40 bit Flexible, Aggregate EU Counter 7 most significant 8 bits |
| 168 | 40 bit Flexible, Aggregate EU Counter 8 most significant 8 bits |
| 169 | 40 bit Flexible, Aggregate EU Counter 9 most significant 8 bits |
| 170 | 40 bit Flexible, Aggregate EU Counter 10 most significant 8 bits |
| 171 | 40 bit Flexible, Aggregate EU Counter 11 most significant 8 bits |
| 172 | 40 bit Flexible, Aggregate EU Counter 12 most significant 8 bits |
| 173 | 40 bit Flexible, Aggregate EU Counter 13 most significant 8 bits |
| 174 | 40 bit Flexible, Aggregate EU Counter 14 most significant 8 bits |
| 175 | 40 bit Flexible, Aggregate EU Counter 15 most significant 8 bits |
| 176 | 40 bit Flexible, Aggregate EU Counter 16 most significant 8 bits |
| 177 | 40 bit Flexible, Aggregate EU Counter 17 most significant 8 bits |
| 178 | 40 bit Flexible, Aggregate EU Counter 18 most significant 8 bits |
| 179 | 40 bit Flexible, Aggregate EU Counter 19 most significant 8 bits |
| 180 | 40 bit Flexible, Aggregate EU Counter 20 most significant 8 bits |
| 181 | 40 bit Aggregate Counter 21 most significant 8 bits |
| 182 | 40 bit Aggregate Counter 22 most significant 8 bits |
| 183 | 40 bit Aggregate Counter 23 most significant 8 bits |
| 184 | 40 bit Aggregate Counter 24 most significant 8 bits |
| 185 | 40 bit Aggregate Counter 25 most significant 8 bits |
| 186 | 40 bit Aggregate Counter 26 most significant 8 bits |
| 187 | 40 bit Aggregate Counter 27 most significant 8 bits |
| 188 | 40 bit Aggregate Counter 28 most significant 8 bits |
| 189 | 40 bit Aggregate Counter 29 most significant 8 bits |
| 190 | 40 bit Aggregate Counter 30 most significant 8 bits |
| 191 | 40 bit Aggregate Counter 31 most significant 8 bits |
| 192 | Boolean Counter 0 |
| 196 | Boolean Counter 1 |
| 200 | Boolean Counter 2 |
| 204 | Boolean Counter 3 |
| 208 | Boolean Counter 4 |
| 212 | Boolean Counter 5 |
| 216 | Boolean Counter 6 |
| 220 | Boolean Counter 7 |
| 224 | Custom Counter 0 |
| 228 | Custom Counter 1 |
| 232 | Custom Counter 2 |
| 236 | Custom Counter 3 |
| 240 | Custom Counter 4 |
| 244 | Custom Counter 5 |
| 248 | Custom Counter 6 |
| 252 | Custom Counter 7 |
On Broadwell+ the 32 bit Reason field bits 24:19 represent what triggered the report. This reason is represented with mutually exclusive flags:
| Flag Bit | Reason |
|---|---|
| 0 | Timer triggered sample |
| 1 | Internal report trigger 1 |
| 2 | Internal report trigger 2 |
| 3 | Context switch |
| 4 | GO transition from 1 to 0 |
| 5 | Clock ratio change between squashed Slice Clock frequency and squashed Unslice clock frequency |