[Mesa-dev] [RFC 0/6] i965: INTEL_performance_query re-work

Samuel Pitoiset samuel.pitoiset at gmail.com
Mon May 11 08:09:51 PDT 2015


Did you write piglit tests according to what the spec says, btw ?

On 05/06/2015 02:53 AM, Robert Bragg wrote:
> As we've learned more about the observability capabilities of Gen
> graphics we've found that it's not enough to only try and configure the
> OA unit from userspace without any dedicated support from the kernel.
>
> As it is currently the i965 backends for both AMD_performance_monitor
> and INTEL_performance_query aren't able to report normalized metrics
> useful to application developers due to the limitations of configuring
> the OA unit from userspace via LRIs.
>
> More recently we've developed a perf PMU (performance monitoring unit)
> driver within the drm i915 driver ("i915_oa") that lets userspace
> configure and open an event fd via the perf_event_open syscall which
> provides us a more complete interface for configuring the Gen graphics
> OA unit.
>
> With help from the kernel we can support periodic sampling (where the
> hardware writes reports into a gpu mapped circular buffer that we can
> forward as perf samples), we can deal with the clock gating + PM
> limitations imposed by the observability hw and also manage + maintain
> the selection of performance counters.
>
> The perf_event_open(2) man page is a good starting point for anyone
> wanting to learn about the Linux perf interface. Something to beware of
> is that there's currently no precedent upstream for exposing device
> metrics via a perf PMU and although early feedback was sought for this
> work, some of this may be subject to change based on feedback from the
> core perf maintainers as well as the i915 drm driver maintainers.
>
> This PRM is a good starting point for anyone wanting to learn about the
> Gen graphics Observability hardware. Some important information is
> currently missing and this should be updated soon, but that's more
> directly related to the i915_oa perf driver. Notably though the report
> formats described here need to be understood by Mesa, since the perf
> samples simply forward the raw reports from the OA hardware.
>
> https://01.org/sites/default/files/documentation/
> observability_performance_counters_haswell.pdf
>
> This series re-works the i965 driver's support for exposing performance
> counters, taking advantage of this i915_oa perf event interface.
>
> A corresponding kernel branch with an initial i915_oa driver for Haswell
> can be found here:
>
> https://github.com/rib/linux  wip/rib/oa-hsw-4.0.0
>
> A corresponding libdrm branch can be found here:
>
> https://github.com/rib/drm  wip/rib/oa-hsw-4.0.0
>
> In case it's helpful to see another example using the i915_oa perf
> interface I've also been developing a 'gputop' tool that both lets me
> test the INTEL_performance_query interface to collect per-context
> metrics from Mesa and can also visualize system wide metrics (i.e.
> across all gpu contexts) using perf directly:
>
> https://github.com/rib/gputop
>
> Although I haven't updated the branches in a while, I could share some
> initial code adding support for Broadwell if anyone's interested to get
> a sense of what's involved in supporting later hardware generations.
>
> I still anticipate some (hopefully relatively minor) tweaking of
> implementation details based on review feedback for the i915_oa driver,
> but I hope that this is a good point to ask for some feedback on the
> Mesa changes.
>
> If it's more convenient, these patches can also be fetched from here:
>
> https://github.com/rib/mesa  wip/rib/oa-hsw-4.0.0
>
> Regards,
> - Robert
>
> Robert Bragg (6):
>    i965: Remove perf monitor/query backend
>    Separate INTEL_performance_query frontend
>    Model INTEL perf query backend after query object BE
>    i965: Implement INTEL_performance_query extension
>    i965: Expose OA counters via INTEL_performance_query
>    i965: Adds further support for "3D" OA counters
>
>   src/mapi/glapi/gen/gl_genexec.py                   |    1 +
>   src/mesa/Makefile.sources                          |    2 +
>   src/mesa/drivers/dri/i965/Makefile.sources         |    2 +-
>   src/mesa/drivers/dri/i965/brw_context.c            |    5 +-
>   src/mesa/drivers/dri/i965/brw_context.h            |  101 +-
>   .../drivers/dri/i965/brw_performance_monitor.c     | 1472 ------------
>   src/mesa/drivers/dri/i965/brw_performance_query.c  | 2356 ++++++++++++++++++++
>   src/mesa/drivers/dri/i965/intel_batchbuffer.c      |   10 +-
>   src/mesa/drivers/dri/i965/intel_extensions.c       |   69 +-
>   src/mesa/main/context.c                            |    3 +
>   src/mesa/main/dd.h                                 |   39 +
>   src/mesa/main/mtypes.h                             |   28 +
>   src/mesa/main/performance_monitor.c                |  579 -----
>   src/mesa/main/performance_monitor.h                |   39 -
>   src/mesa/main/performance_query.c                  |  608 +++++
>   src/mesa/main/performance_query.h                  |   80 +
>   16 files changed, 3197 insertions(+), 2197 deletions(-)
>   delete mode 100644 src/mesa/drivers/dri/i965/brw_performance_monitor.c
>   create mode 100644 src/mesa/drivers/dri/i965/brw_performance_query.c
>   create mode 100644 src/mesa/main/performance_query.c
>   create mode 100644 src/mesa/main/performance_query.h
>



More information about the mesa-dev mailing list