• Byungchul Park's avatar
    locking/lockdep: Add a boot parameter allowing unwind in cross-release and disable it by default · d141babe
    Byungchul Park authored
    Johan Hovold reported a heavy performance regression caused by lockdep
    cross-release:
    
     > Boot time (from "Linux version" to login prompt) had in fact doubled
     > since 4.13 where it took 17 seconds (with my current config) compared to
     > the 35 seconds I now see with 4.14-rc4.
     >
     > I quick bisect pointed to lockdep and specifically the following commit:
     >
     >	28a903f6 ("locking/lockdep: Handle non(or multi)-acquisition
     >	               of a crosslock")
     >
     > which I've verified is the commit which doubled the boot time (compared
     > to 28a903f6^) (added by lockdep crossrelease series [1]).
    
    Currently cross-release performs unwind on every acquisition, but that
    is very expensive.
    
    This patch makes unwind optional and disables it by default and only
    records acquire_ip.
    
    Full stack traces are sometimes required for full analysis, in which
    case a boot paramter, crossrelease_fullstack, can be specified.
    
    On my qemu Ubuntu machine (x86_64, 4 cores, 512M), the regression was
    fixed. We measure boot times with 'perf stat --null --repeat 10 $QEMU',
    where $QEMU launches a kernel with init=/bin/true:
    
    1. No lockdep enabled:
    
     Performance counter stats for 'qemu_booting_time.sh bzImage' (10 runs):
    
           2.756558155 seconds time elapsed                    ( +-  0.09% )
    
    2. Lockdep enabled:
    
     Performance counter stats for 'qemu_booting_time.sh bzImage' (10 runs):
    
           2.968710420 seconds time elapsed                    ( +-  0.12% )
    
    3. Lockdep enabled + cross-release enabled:
    
     Performance counter stats for 'qemu_booting_time.sh bzImage' (10 runs):
    
           3.153839636 seconds time elapsed                    ( +-  0.31% )
    
    4. Lockdep enabled + cross-release enabled + this patch applied:
    
     Performance counter stats for 'qemu_booting_time.sh bzImage' (10 runs):
    
           2.963669551 seconds time elapsed                    ( +-  0.11% )
    
    I.e. lockdep cross-release performance is now indistinguishable from
    vanilla lockdep.
    Bisected-by: default avatarJohan Hovold <johan@kernel.org>
    Analyzed-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Suggested-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Reported-by: default avatarJohan Hovold <johan@kernel.org>
    Signed-off-by: default avatarByungchul Park <byungchul.park@lge.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: amir73il@gmail.com
    Cc: axboe@kernel.dk
    Cc: darrick.wong@oracle.com
    Cc: david@fromorbit.com
    Cc: hch@infradead.org
    Cc: idryomov@gmail.com
    Cc: johannes.berg@intel.com
    Cc: kernel-team@lge.com
    Cc: linux-block@vger.kernel.org
    Cc: linux-fsdevel@vger.kernel.org
    Cc: linux-mm@kvack.org
    Cc: linux-xfs@vger.kernel.org
    Cc: oleg@redhat.com
    Cc: tj@kernel.org
    Link: http://lkml.kernel.org/r/1508921765-15396-5-git-send-email-byungchul.park@lge.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    d141babe
lockdep.c 126 KB