• Tvrtko Ursulin's avatar
    drm/i915: Use consistent forcewake auto-release timeout across kernel configs · a57a4a67
    Tvrtko Ursulin authored
    Because it is based on jiffies, current implementation releases the
    forcewake at any time between straight away and between 1ms and 10ms,
    depending on the kernel configuration (CONFIG_HZ).
    
    This is probably not what has been desired, since the dynamics of keeping
    parts of the GPU awake should not be correlated with this kernel
    configuration parameter.
    
    Change the auto-release mechanism to use hrtimers and set the timeout to
    1ms with a 1ms of slack. This should make the GPU power consistent
    across kernel configs, and timer slack should enable some timer coalescing
    where multiple force-wake domains exist, or with unrelated timers.
    
    For GlBench/T-Rex this decreases the number of forcewake releases from
    ~480 to ~300 per second, and for a heavy combined OGL/OCL test from
    ~670 to ~360 (HZ=1000 kernel).
    
    Even though this reduction can be attributed to the average release period
    extending from 0-1ms to 1-2ms, as discussed above, it will make the
    forcewake timeout consistent for different CONFIG_HZ values.
    
    Real life measurements with the above workload has shown that, with this
    patch, both manage to auto-release the forcewake between 2-4 times per
    10ms, even though the number of forcewake gets is dramatically different.
    
    T-Rex requests between 5-10 explicit gets and 5-10 implict gets in each
    10ms period, while the OGL/OCL test requests 250 and 380 times in the same
    period.
    
    The two data points together suggest that the nature of the forwake
    accesses is bursty and that further changes and potential timeout
    extensions, or moving the start of timeout from the first to the last
    automatic forcewake grab, should be carefully measured for power and
    performance effects.
    
    v2:
      * Commit spelling. (Dave Gordon)
      * More discussion on numbers in the commit. (Chris Wilson)
    Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Reviewed-by: default avatarDave Gordon <david.s.gordon@intel.com>
    Cc: Chris Wilson <chris@chris-wilson.co.uk>
    Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    a57a4a67
i915_drv.h 112 KB