• Chris Wilson's avatar
    drm/i915: Limit the busy wait on requests to 5us not 10ms! · ca5b721e
    Chris Wilson authored
    When waiting for high frequency requests, the finite amount of time
    required to set up the irq and wait upon it limits the response rate. By
    busywaiting on the request completion for a short while we can service
    the high frequency waits as quick as possible. However, if it is a slow
    request, we want to sleep as quickly as possible. The tradeoff between
    waiting and sleeping is roughly the time it takes to sleep on a request,
    on the order of a microsecond. Based on measurements of synchronous
    workloads from across big core and little atom, I have set the limit for
    busywaiting as 10 microseconds. In most of the synchronous cases, we can
    reduce the limit down to as little as 2 miscroseconds, but that leaves
    quite a few test cases regressing by factors of 3 and more.
    
    The code currently uses the jiffie clock, but that is far too coarse (on
    the order of 10 milliseconds) and results in poor interactivity as the
    CPU ends up being hogged by slow requests. To get microsecond resolution
    we need to use a high resolution timer. The cheapest of which is polling
    local_clock(), but that is only valid on the same CPU. If we switch CPUs
    because the task was preempted, we can also use that as an indicator that
     the system is too busy to waste cycles on spinning and we should sleep
    instead.
    
    __i915_spin_request was introduced in
    commit 2def4ad9 [v4.2]
    Author: Chris Wilson <chris@chris-wilson.co.uk>
    Date:   Tue Apr 7 16:20:41 2015 +0100
    
         drm/i915: Optimistically spin for the request completion
    
    v2: Drop full u64 for unsigned long - the timer is 32bit wraparound safe,
    so we can use native register sizes on smaller architectures. Mention
    the approximate microseconds units for elapsed time and add some extra
    comments describing the reason for busywaiting.
    
    v3: Raise the limit to 10us
    v4: Now 5us.
    Reported-by: default avatarJens Axboe <axboe@kernel.dk>
    Link: https://lkml.org/lkml/2015/11/12/621Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
    Cc: "Rogozhkin, Dmitry V" <dmitry.v.rogozhkin@intel.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
    Cc: Eero Tamminen <eero.t.tamminen@intel.com>
    Cc: "Rantala, Valtteri" <valtteri.rantala@intel.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Link: http://patchwork.freedesktop.org/patch/msgid/1449833608-22125-3-git-send-email-chris@chris-wilson.co.uk
    ca5b721e
i915_gem.c 135 KB