• L
    Revert "mm, slub: consider rest of partial list if acquire_slab() fails" · 9b1ea29b
    Linus Torvalds 提交于
    This reverts commit 8ff60eb0.
    
    The kernel test robot reports a huge performance regression due to the
    commit, and the reason seems fairly straightforward: when there is
    contention on the page list (which is what causes acquire_slab() to
    fail), we do _not_ want to just loop and try again, because that will
    transfer the contention to the 'n->list_lock' spinlock we hold, and
    just make things even worse.
    
    This is admittedly likely a problem only on big machines - the kernel
    test robot report comes from a 96-thread dual socket Intel Xeon Gold
    6252 setup, but the regression there really is quite noticeable:
    
       -47.9% regression of stress-ng.rawpkt.ops_per_sec
    
    and the commit that was marked as being fixed (7ced3719: "slub:
    Acquire_slab() avoid loop") actually did the loop exit early very
    intentionally (the hint being that "avoid loop" part of that commit
    message), exactly to avoid this issue.
    
    The correct thing to do may be to pick some kind of reasonable middle
    ground: instead of breaking out of the loop on the very first sign of
    contention, or trying over and over and over again, the right thing may
    be to re-try _once_, and then give up on the second failure (or pick
    your favorite value for "once"..).
    Reported-by: Nkernel test robot <oliver.sang@intel.com>
    Link: https://lore.kernel.org/lkml/20210301080404.GF12822@xsang-OptiPlex-9020/
    Cc: Jann Horn <jannh@google.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Acked-by: NChristoph Lameter <cl@linux.com>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    9b1ea29b
slub.c 143.3 KB