• Davidlohr Bueso's avatar
    rbtree: optimize root-check during rebalancing loop · 2aadf7fc
    Davidlohr Bueso authored
    The only times the nil-parent (root node) condition is true is when the
    node is the first in the tree, or after fixing rbtree rule #4 and the
    case 1 rebalancing made the node the root.  Such conditions do not apply
    most of the time:
    
    (i) The common case in an rbtree is to have more than a single node,
        so this is only true for the first rb_insert().
    
    (ii) While there is a chance only one first rotation is needed, cases
        where the node's uncle is black (cases 2,3) are more common as we can
        have the following scenarios during the rotation looping:
    
        case1 only, case1+1, case2+3, case1+2+3, case3 only, etc.
    
    This patch, therefore, adds an unlikely() optimization to this
    conditional.  When profiling with CONFIG_PROFILE_ANNOTATED_BRANCHES, a
    kernel build shows that the incorrect rate is less than 15%, and for
    workloads that involve insert mostly trees overtime tend to have less
    than 2% incorrect rate.
    
    Link: http://lkml.kernel.org/r/20170719014603.19029-3-dave@stgolabs.netSigned-off-by: default avatarDavidlohr Bueso <dbueso@suse.de>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    2aadf7fc
rbtree.c 18.3 KB