• Chris Wilson's avatar
    drm/i915/gem: Make context persistence optional · a0e04715
    Chris Wilson authored
    Our existing behaviour is to allow contexts and their GPU requests to
    persist past the point of closure until the requests are complete. This
    allows clients to operate in a 'fire-and-forget' manner where they can
    setup a rendering pipeline and hand it over to the display server and
    immediately exit. As the rendering pipeline is kept alive until
    completion, the display server (or other consumer) can use the results
    in the future and present them to the user.
    
    The compute model is a little different. They have little to no buffer
    sharing between processes as their kernels tend to operate on a
    continuous stream, feeding the results back to the client application.
    These kernels operate for an indeterminate length of time, with many
    clients wishing that the kernel was always running for as long as they
    keep feeding in the data, i.e. acting like a DSP.
    
    Not all clients want this persistent "desktop" behaviour and would prefer
    that the contexts are cleaned up immediately upon closure. This ensures
    that when clients are run without hangchecking (e.g. for compute kernels
    of indeterminate runtime), any GPU hang or other unexpected workloads
    are terminated with the process and does not continue to hog resources.
    
    The default behaviour for new contexts is the legacy persistence mode,
    as some desktop applications are dependent upon the existing behaviour.
    New clients will have to opt in to immediate cleanup on context
    closure. If the hangchecking modparam is disabled, so is persistent
    context support -- all contexts will be terminated on closure.
    
    We expect this behaviour change to be welcomed by compute users, who
    have often been caught between a rock and a hard place. They disable
    hangchecking to avoid their kernels being "unfairly" declared hung, but
    have also experienced true hangs that the system was then unable to
    clean up. Naturally, this leads to bug reports.
    
    Testcase: igt/gem_ctx_persistence
    Link: https://github.com/intel/compute-runtime/pull/228Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Cc: Michał Winiarski <michal.winiarski@intel.com>
    Cc: Jon Bloomfield <jon.bloomfield@intel.com>
    Reviewed-by: default avatarJon Bloomfield <jon.bloomfield@intel.com>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Reviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Acked-by: default avatarJason Ekstrand <jason@jlekstrand.net>
    Link: https://patchwork.freedesktop.org/patch/msgid/20191029202338.8841-1-chris@chris-wilson.co.uk
    a0e04715
i915_gem_context.c 57.7 KB