• Brad Volkin's avatar
    drm/i915: Use hash tables for the command parser · 44e895a8
    Brad Volkin authored
    For clients that submit large batch buffers the command parser has
    a substantial impact on performance. On my HSW ULT system performance
    drops as much as ~20% on some tests. Most of the time is spent in the
    command lookup code. Converting that from the current naive search to
    a hash table lookup reduces the performance drop to ~10%.
    
    The choice of value for I915_CMD_HASH_ORDER allows all commands
    currently used in the parser tables to hash to their own bucket (except
    for one collision on the render ring). The tradeoff is that it wastes
    memory. Because the opcodes for the commands in the tables are not
    particularly well distributed, reducing the order still leaves many
    buckets empty. The increased collisions don't seem to have a huge
    impact on the performance gain, but for now anyhow, the parser trades
    memory for performance.
    
    NB: Ville noticed that the error paths through the ring init code
    will leak memory. I've not addressed that here. We can do a follow
    up pass to handle all of the leaks.
    
    v2: improved comment describing selection of hash key mask (Damien)
    replace a BUG_ON() with an error return (Tvrtko, Ville)
    commit message improvements
    Signed-off-by: default avatarBrad Volkin <bradley.d.volkin@intel.com>
    Reviewed-by: default avatarDamien Lespiau <damien.lespiau@intel.com>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    44e895a8
intel_ringbuffer.c 63.3 KB