Skip to content
  • Peter Zijlstra's avatar
    lockstat: human readability tweaks · c46261de
    Peter Zijlstra authored
    
    
    Present all this fancy new lock statistics information:
    
    *warning, _wide_ output ahead*
    
    (output edited for purpose of brevity)
    
     # cat /proc/lock_stat
    lock_stat version 0.1
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------
                                  class name    contentions   waittime-min   waittime-max waittime-total   acquisitions   holdtime-min   holdtime-max holdtime-total
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------
    
                             &inode->i_mutex:         14458           6.57      398832.75     2469412.23        6768876           0.34    11398383.65   339410830.89
                             ---------------
                             &inode->i_mutex           4486          [<ffffffff802a08f9>] pipe_wait+0x86/0x8d
                             &inode->i_mutex              0          [<ffffffff802a01e8>] pipe_write_fasync+0x29/0x5d
                             &inode->i_mutex              0          [<ffffffff802a0e18>] pipe_read+0x74/0x3a5
                             &inode->i_mutex              0          [<ffffffff802a1a6a>] do_lookup+0x81/0x1ae
    
    .................................................................................................................................................................
    
                  &inode->i_data.tree_lock-W:           491           0.27          62.47         493.89        2477833           0.39         468.89     1146584.25
                  &inode->i_data.tree_lock-R:            65           0.44           4.27          48.78       26288792           0.36         184.62    10197458.24
                  --------------------------
                    &inode->i_data.tree_lock             46          [<ffffffff80277095>] __do_page_cache_readahead+0x69/0x24f
                    &inode->i_data.tree_lock             31          [<ffffffff8026f9fb>] add_to_page_cache+0x31/0xba
                    &inode->i_data.tree_lock              0          [<ffffffff802770ee>] __do_page_cache_readahead+0xc2/0x24f
                    &inode->i_data.tree_lock              0          [<ffffffff8026f6e4>] find_get_page+0x1a/0x58
    
    .................................................................................................................................................................
    
                          proc_inum_idr.lock:             0           0.00           0.00           0.00             36           0.00          65.60         148.26
                            proc_subdir_lock:             0           0.00           0.00           0.00        3049859           0.00         106.81     1563212.42
                            shrinker_rwsem-W:             0           0.00           0.00           0.00              5           0.00           1.73           3.68
                            shrinker_rwsem-R:             0           0.00           0.00           0.00            633           2.57         246.57       10909.76
    
    'contentions' and 'acquisitions' are the number of such events measured (since
    the last reset). The waittime- and holdtime- (min, max, total) numbers are
    presented in microseconds.
    
    If there are any contention points, the lock class is presented in the block
    format (as i_mutex and tree_lock above), otherwise a single line of output is
    presented.
    
    The output is sorted on absolute number of contentions (read + write), this
    should get the worst offenders presented first, so that:
    
     # grep : /proc/lock_stat | head
    
    will quickly show who's bad.
    
    The stats can be reset using:
    
     # echo 0 > /proc/lock_stat
    
    [bunk@stusta.de: make 2 functions static]
    [akpm@linux-foundation.org: fix printk warning]
    Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
    Acked-by: default avatarIngo Molnar <mingo@elte.hu>
    Acked-by: default avatarJason Baron <jbaron@redhat.com>
    Signed-off-by: default avatarAdrian Bunk <bunk@stusta.de>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    c46261de