• Lionel Landwerlin's avatar
    drm/i915/perf: lock powergating configuration to default when active · ec431eae
    Lionel Landwerlin authored
    If some of the contexts submitting workloads to the GPU have been
    configured to shutdown slices/subslices, we might loose the NOA
    configurations written in the NOA muxes.
    
    One possible solution to this problem is to reprogram the NOA muxes
    when we switch to a new context. We initially tried this in the
    workaround batchbuffer but some concerns where raised about the cost
    of reprogramming at every context switch. This solution is also not
    without consequences from the userspace point of view. Reprogramming
    of the muxes can only happen once the powergating configuration has
    changed (which happens after context switch). This means for a window
    of time during the recording, counters recorded by the OA unit might
    be invalid. This requires userspace dealing with OA reports to discard
    the invalid values.
    
    Minimizing the reprogramming could be implemented by tracking of the
    last programmed configuration somewhere in GGTT and use MI_PREDICATE
    to discard some of the programming commands, but the command streamer
    would still have to parse all the MI_LRI instructions in the
    workaround batchbuffer.
    
    Another solution, which this change implements, is to simply disregard
    the user requested configuration for the period of time when i915/perf
    is active.
    
    On most platforms there are no issues with this apart from a performance
    penality for some media workloads that benefit from running on a partially
    powergated GPU. We already prevent RC6 from affecting the programming so
    it doesn't sound completely unreasonable to hold on powergating for the
    same reason.
    
    On Icelake however there would a functional problem if the slices not-
    containing the VME block were left enabled with a running media workload
    which explicitly disabled them. To avoid a GPU hang in this case, on
    Icelake we lock the enablement to only slices which contain VME blocks.
    Downside is that it means degraded GPU performance when OA is active but
    there is no known alternative solution for this.
    
    v2: Leave RPCS programming in intel_lrc.c (Lionel)
    
    v3: Update for s/union intel_sseu/struct intel_sseu/ (Lionel)
        More to_intel_context() (Tvrtko)
        s/dev_priv/i915/ (Tvrtko)
    
    Tvrtko Ursulin:
    
    v4:
     * Rebase for make_rpcs changes.
    
    v5:
     * Apply OA restriction from make_rpcs directly.
    
    v6:
     * Rebase for context image setup changes.
    
    v7:
     * Move stream assignment before metric enable.
    
    v8-9:
     * Rebase.
    
    v10:
     * Squashed with ICL support patch.
    
    Bspec: 21140
    Co-developed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Signed-off-by: default avatarLionel Landwerlin <lionel.g.landwerlin@intel.com>
    Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
    Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> # v9
    Reviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20190205095032.22673-2-tvrtko.ursulin@linux.intel.com
    ec431eae
intel_lrc.h 4.6 KB