• M
    rbtree: reference Documentation/rbtree.txt for usage instructions · 1457d287
    Michel Lespinasse 提交于
    I recently started looking at the rbtree code (with an eye towards
    improving the augmented rbtree support, but I haven't gotten there yet).
    I noticed a lot of possible speed improvements, which I am now proposing
    in this patch set.
    
    Patches 1-4 are preparatory: remove internal functions from rbtree.h so
    that users won't be tempted to use them instead of the documented APIs,
    clean up some incorrect usages I've noticed (in particular, with the
    recently added fs/proc/proc_sysctl.c rbtree usage), reference the
    documentation so that people have one less excuse to miss it, etc.
    
    Patch 5 is a small module I wrote to check the rbtree performance.  It
    creates 100 nodes with random keys and repeatedly inserts and erases them
    from an rbtree.  Additionally, it has code to check for rbtree invariants
    after each insert or erase operation.
    
    Patches 6-12 is where the rbtree optimizations are done, and they touch
    only that one file, lib/rbtree.c .  I am getting good results out of these
    - in my small benchmark doing rbtree insertion (including search) and
    erase, I'm seeing a 30% runtime reduction on Sandybridge E5, which is more
    than I initially thought would be possible.  (the results aren't as
    impressive on my two other test hosts though, AMD barcelona and Intel
    Westmere, where I am seeing 14% runtime reduction only).  The code size -
    both source (ommiting comments) and compiled - is also shorter after these
    changes.  However, I do admit that the updated code is more arduous to
    read - one big reason for that is the removal of the tree rotation
    helpers, which added some overhead but also made it easier to reason about
    things locally.  Overall, I believe this is an acceptable compromise,
    given that this code doesn't get modified very often, and that I have good
    tests for it.
    
    Upon Peter's suggestion, I added comments showing the rtree configuration
    before every rotation.  I think they help; however it's still best to have
    a copy of the cormen/leiserson/rivest book when digging into this code.
    
    This patch: reference Documentation/rbtree.txt for usage instructions
    
    include/linux/rbtree.h included some basic usage instructions, while
    Documentation/rbtree.txt had some more complete and easier to follow
    instructions.  Replacing the former with a reference to the latter.
    Signed-off-by: NMichel Lespinasse <walken@google.com>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Acked-by: NDavid Woodhouse <David.Woodhouse@intel.com>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Daniel Santos <daniel.santos@pobox.com>
    Cc: Jens Axboe <axboe@kernel.dk>
    Cc: "Eric W. Biederman" <ebiederm@xmission.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    1457d287
rbtree.h 3.6 KB