• Keika Kobayashi's avatar
    softirq: introduce statistics for softirq · aa0ce5bb
    Keika Kobayashi authored
    Statistics for softirq doesn't exist.
    It will be helpful like statistics for interrupts.
    This patch introduces counting the number of softirq,
    which will be exported in /proc/softirqs.
    
    When softirq handler consumes much CPU time,
    /proc/stat is like the following.
    
    $ while :; do  cat /proc/stat | head -n1 ; sleep 10 ; done
    cpu  88 0 408 739665 583 28 2 0 0
    cpu  450 0 1090 740970 594 28 1294 0 0
                                  ^^^^
                                 softirq
    
    In such a situation,
    /proc/softirqs shows us which softirq handler is invoked.
    We can see the increase rate of softirqs.
    
    <before>
    $ cat /proc/softirqs
                    CPU0       CPU1       CPU2       CPU3
    HI                 0          0          0          0
    TIMER         462850     462805     462782     462718
    NET_TX             0          0          0        365
    NET_RX          2472          2          2         40
    BLOCK              0          0        381       1164
    TASKLET            0          0          0        224
    SCHED         462654     462689     462698     462427
    RCU             3046       2423       3367       3173
    
    <after>
    $ cat /proc/softirqs
                    CPU0       CPU1       CPU2       CPU3
    HI                 0          0          0          0
    TIMER         463361     465077     465056     464991
    NET_TX            53          0          1        365
    NET_RX          3757          2          2         40
    BLOCK              0          0        398       1170
    TASKLET            0          0          0        224
    SCHED         463074     464318     464612     463330
    RCU             3505       2948       3947       3673
    
    When CPU TIME of softirq is high,
    the rates of increase is the following.
      TIMER  : 220/sec     : CPU1-3
      NET_TX : 5/sec       : CPU0
      NET_RX : 120/sec     : CPU0
      SCHED  : 40-200/sec  : all CPU
      RCU    : 45-58/sec   : all CPU
    
    The rates of increase in an idle mode is the following.
      TIMER  : 250/sec
      SCHED  : 250/sec
      RCU    : 2/sec
    
    It seems many softirqs for receiving packets and rcu are invoked.  This
    gives us help for checking system.
    Signed-off-by: default avatarKeika Kobayashi <kobayashi.kk@ncos.nec.co.jp>
    Reviewed-by: default avatarHiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
    Reviewed-by: default avatarKOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Eric Dumazet <dada1@cosmosbay.com>
    Cc: Alexey Dobriyan <adobriyan@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    aa0ce5bb
softirq.c 19.6 KB