[PATCH 0/8] Enable Gen 7 Observation Architecture

Robert Bragg robert at sixbynine.org
Tue Feb 2 21:30:47 UTC 2016


This series enables support for the Observation Architecture on Haswell

Compared to the last series I sent out, the main changes are:

* The terminology changed so we open a 'stream' not an 'event'.

* A stream is configured with an array of u64 properties after finding
  the previous config struct quite awkward to validate and not well
  suited to supporting multiple kinds of streams sharing common config
  options (which arises with work Sourab Gupta is looking at based on
  this driver)

* No pre-defined enum of metric set IDs and metric sets are now
  advertised via sysfs. This is to allow for configs being loaded at
  runtime in the future and the use of uuids that can be unambiguously
  mapped to corresponding normalization equations in userspace. Another
  consideration here was that we might need to add new versions of a
  particular config like 'compute basic' (more likely for newer configs
  with less testing) at which point the enum doesn't really make life
  easier for userspace if you have to be aware of the versioning
  relationships and attempt different IDs to find the latest version the
  kernel supports.

I haven't written igt tests for this yet, but can hopefully start
looking at that next if there's no major issue with the general api. So
far the interface has been tested and iterated based on what's worked
out well for GPU Top[1], an implementation of GL_INTEL_performance_query
in Mesa and an implementation of an API called MDAPI used by GPA/VTune
to capture metrics (private a.t.m as I'm not sure there would be much
general interest in it.)

The PRM for Haswell's OA unit can be found here:

https://01.org/sites/default/files/documentation/
observability_performance_counters_haswell.pdf

(though unfortunately it's not very complete documentation)

An example of opening an i915 perf stream can be seen in Mesa here:

https://github.com/rib/mesa/blob/wip/rib/oa-next/src/mesa/drivers/
dri/i965/brw_performance_query.c#L904

A summary of the stream format can seen here:

https://github.com/rib/linux/wiki/i915-perf-stream-format

There's an open issue to do with how to properly clear the status bits
in the OASTATUS1 register which I noticed the other day can't be right
a.t.m and I'm waiting for feedback on from the Windows team or OA
architect. I don't expect it will have much impact so it still seemed
worth sending this series now.

Another thing to mention is that I just noticed gputop is hitting the
cpu more than expected in its overview mode, polling for OA data and I
need to double check it's not a driver issue. Hopefully a minor issue;
probably not worth holding things up for.

Although this series only adds basic infrastructure and enables Haswell
it's probably good to keep in mind other work that builds on top. I've
also enabled Gen8+; there's some further work by Sourab Gupta to access
metrics in sync with command stream processing and Matthew Auld has
experimented with an interface for registering new OA configurations at
runtime.

In case it's helpful to reference, the Gen 8 enabling can be seen here:
https://github.com/rib/linux/tree/wip/rib/oa-next

Sourab's work can be seen here:
https://github.com/sourabgu/linux/tree/rebase-4.4-testing

Matt's patch for runtime configs can be seen here:
https://github.com/matt-auld/linux/tree/wip/matt-auld/oa-4.4-dynamic-testing

Regards,
- Robert

[1]
https://github.com/rib/gputop
https://github.com/rib/gputop/wiki/Build-Instructions


Robert Bragg (8):
  drm/i915: Add i915 perf infrastructure
  drm/i915: rename OACONTROL GEN7_OACONTROL
  drm/i915: Add 'render basic' Haswell OA unit config
  drm/i915: Add i915 perf event for Haswell OA unit
  drm/i915: advertise available metrics via sysfs
  drm/i915: Add dev.i915.perf_event_paranoid sysctl option
  drm/i915: add oa_event_min_timer_exponent sysctl
  drm/i915: Add more Haswell OA metric sets

 drivers/gpu/drm/i915/Makefile           |    4 +
 drivers/gpu/drm/i915/i915_cmd_parser.c  |    4 +-
 drivers/gpu/drm/i915/i915_dma.c         |    7 +
 drivers/gpu/drm/i915/i915_drv.h         |  154 ++++
 drivers/gpu/drm/i915/i915_gem_context.c |   23 +-
 drivers/gpu/drm/i915/i915_oa_hsw.c      |  658 ++++++++++++++++
 drivers/gpu/drm/i915/i915_oa_hsw.h      |   38 +
 drivers/gpu/drm/i915/i915_perf.c        | 1283 +++++++++++++++++++++++++++++++
 drivers/gpu/drm/i915/i915_reg.h         |  340 +++++++-
 include/uapi/drm/i915_drm.h             |  121 +++
 10 files changed, 2625 insertions(+), 7 deletions(-)
 create mode 100644 drivers/gpu/drm/i915/i915_oa_hsw.c
 create mode 100644 drivers/gpu/drm/i915/i915_oa_hsw.h
 create mode 100644 drivers/gpu/drm/i915/i915_perf.c

-- 
2.7.0



More information about the dri-devel mailing list