[Intel-gfx] [PATCH 00/14] drm/i915: Moar plane update optimizations

ville.syrjala at linux.intel.com ville.syrjala at linux.intel.com
Fri Mar 17 21:17:54 UTC 2017


From: Ville Syrjälä <ville.syrjala at linux.intel.com>

The plane updates are still taking far too long, at least with
heavy kernel debug knobs turned on. Using kms_atomic_transitions
I'm currently seeing numbers as high as 170 usec on my VLV.

To combat lockdep the most beneficial thing is taking the
uncore.lock around the entire pipe update. Combined with all
the other optimizations here I was able to push the max
duration below 60 usec with my debug kernel.

The pre-compute stuff isn't supremely important with lockdep/etc.
turned on, but once those are turned off the few usec saved by
the other optimizations start to matter. With all the optimization
and a less debug heavy kernel I was able to get the max duration
to around 15 usec. It was around 25 usec with the current code.

Mika was saying that he's still seeing huge numbers (as high
as 400 usec) with the current drm-tip, and that wasn't even with
a particularly debug heavy kernel. One theory is that there's
contention on the uncore.lock. So I'm thinking we may want to
split the lock into two; one for gt, the other for display. Not
starving the GPU by hogging the shared lock for display stuff
might also be a good thing. I've not tried playing with more
GPU heavy scenarios yet

Anyways, running out of time to play with this more today so
I figured I'd post what I have now.

Series available here:
git://github.com/vsyrjala/linux.git plane_update_optimization

Ville Syrjälä (14):
  drm/i915: Extract skl_plane_ctl()
  drm/i915: Use skl_plane_ctl() for the SKL "sprite" planes
  drm/i915: Extract i9xx_plane_ctl()
  drm/i915: Extract vlv_sprite_ctl()
  drm/i915: Extract ivb_sprite_ctl()
  drm/i915: Extract ilk_sprite_ctl()
  drm/i915: Extract i845_cursor_ctl() and i9xx_cursor_ctl()
  drm/i915: Pre-compute plane control register value
  drm/i915: Introduce i9xx_check_plane_surface()
  drm/i915: Eliminate ironlake_update_primary_plane()
  drm/i915: Use i9xx_check_plane_surface() for sprite planes as well
  drm/i915: Keep vblanks enabled during the entire pipe update
  WIP/drm/i915: Protect the entire pipe update with uncore.lock
  WIP/drm/i915: Nuke posting reads from plane updates

 drivers/gpu/drm/i915/i915_irq.c      |  66 ++++--
 drivers/gpu/drm/i915/i915_trace.h    |  28 +--
 drivers/gpu/drm/i915/intel_display.c | 436 +++++++++++++++++------------------
 drivers/gpu/drm/i915/intel_drv.h     |  16 +-
 drivers/gpu/drm/i915/intel_pm.c      |  11 +-
 drivers/gpu/drm/i915/intel_sprite.c  | 355 ++++++++++++----------------
 6 files changed, 440 insertions(+), 472 deletions(-)

-- 
2.10.2



More information about the Intel-gfx mailing list