Skip to content
  • Hitoshi Mitake's avatar
    lockdep: Add improved subclass caching · 62016250
    Hitoshi Mitake authored
    
    
    Current lockdep_map only caches one class with subclass == 0,
    and looks up hash table of classes when subclass != 0.
    
    It seems that this has no problem because the case of
    subclass != 0 is rare. But locks of struct rq are
    acquired with subclass == 1 when task migration is executed.
    Task migration is high frequent event, so I modified lockdep
    to cache subclasses.
    
    I measured the score of perf bench sched messaging.
    This patch has slightly but certain (order of milli seconds
    or 10 milli seconds) effect when lots of tasks are running.
    I'll show the result in the tail of this description.
    
    NR_LOCKDEP_CACHING_CLASSES specifies how many classes can be
    cached in the instances of lockdep_map.
    I discussed with Peter Zijlstra in LinuxCon Japan about
    this approach and he taught me that caching every subclasses(8)
    is cleary waste of memory. So number of cached classes
    should be configurable.
    
    === Score comparison of benchmarks ===
    # "min" means best score, and "max" means worst score
    
    for i in `seq 1 10`; do ./perf bench -f simple sched messaging; done
    
    before: min: 0.565000, max: 0.583000, avg: 0.572500
    after:  min: 0.559000, max: 0.568000, avg: 0.563300
    
    # with more processes
    for i in `seq 1 10`; do ./perf bench -f simple sched messaging -g 40; done
    
    before: min: 2.274000, max: 2.298000, avg: 2.286300
    after:  min: 2.242000, max: 2.270000, avg: 2.259700
    
    Signed-off-by: default avatarHitoshi Mitake <mitake@dcl.info.waseda.ac.jp>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
    LKML-Reference: <1286269311-28336-2-git-send-email-mitake@dcl.info.waseda.ac.jp>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    62016250