Skip to content
Snippets Groups Projects
  • Keika Kobayashi's avatar
    aa0ce5bb
    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
    History
    softirq: introduce statistics for softirq
    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>