• Chris Wilson's avatar
    drm/i915: Limit searching for PIN_HIGH · eb479f86
    Chris Wilson authored
    To no surprise (since we've flip-flopped over the use of PIN_HIGH a few
    times), doing a search by address over a pathologically fragmented
    address space is exceeding slow. To protect ourselves from nearly
    unbounded latency (think searching a million holes while under
    struct_mutex), limit the search for the highest available hole and
    fallback to best-fit if it fails.
    
    In the pathologically fragmented case, such as igt/gem_ctx_thrash, the
    effect is dramatic, bringing the runtime down from hours to seconds
    (depending on how many other slow searches you hit, e.g. alloc_iova()
    and alloc_vmap_area() both degrade to a slow rbtree walk after their
    small cache is exhausted). For the real world, the number of search
    steps is unlikely to be significant as we should only need to search
    once per new context.
    Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
    Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Reviewed-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20180521082131.13744-3-chris@chris-wilson.co.uk
    eb479f86
i915_gem_gtt.c 105 KB