Skip to content
  • Robert Bragg's avatar
    drm/i915: Add i915 perf infrastructure · eec688e1
    Robert Bragg authored
    
    
    Adds base i915 perf infrastructure for Gen performance metrics.
    
    This adds a DRM_IOCTL_I915_PERF_OPEN ioctl that takes an array of uint64
    properties to configure a stream of metrics and returns a new fd usable
    with standard VFS system calls including read() to read typed and sized
    records; ioctl() to enable or disable capture and poll() to wait for
    data.
    
    A stream is opened something like:
    
      uint64_t properties[] = {
          /* Single context sampling */
          DRM_I915_PERF_PROP_CTX_HANDLE,        ctx_handle,
    
          /* Include OA reports in samples */
          DRM_I915_PERF_PROP_SAMPLE_OA,         true,
    
          /* OA unit configuration */
          DRM_I915_PERF_PROP_OA_METRICS_SET,    metrics_set_id,
          DRM_I915_PERF_PROP_OA_FORMAT,         report_format,
          DRM_I915_PERF_PROP_OA_EXPONENT,       period_exponent,
       };
       struct drm_i915_perf_open_param parm = {
          .flags = I915_PERF_FLAG_FD_CLOEXEC |
                   I915_PERF_FLAG_FD_NONBLOCK |
                   I915_PERF_FLAG_DISABLED,
          .properties_ptr = (uint64_t)properties,
          .num_properties = sizeof(properties) / 16,
       };
       int fd = drmIoctl(drm_fd, DRM_IOCTL_I915_PERF_OPEN, &param);
    
    Records read all start with a common { type, size } header with
    DRM_I915_PERF_RECORD_SAMPLE being of most interest. Sample records
    contain an extensible number of fields and it's the
    DRM_I915_PERF_PROP_SAMPLE_xyz properties given when opening that
    determine what's included in every sample.
    
    No specific streams are supported yet so any attempt to open a stream
    will return an error.
    
    v2:
        use i915_gem_context_get() - Chris Wilson
    v3:
        update read() interface to avoid passing state struct - Chris Wilson
        fix some rebase fallout, with i915-perf init/deinit
    v4:
        s/DRM_IORW/DRM_IOW/ - Emil Velikov
    
    Signed-off-by: default avatarRobert Bragg <robert@sixbynine.org>
    Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
    Reviewed-by: default avatarSourab Gupta <sourab.gupta@intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Link: http://patchwork.freedesktop.org/patch/msgid/20161107194957.3385-2-robert@sixbynine.org
    eec688e1