• Thomas Gleixner's avatar
    proc/stat: Make the interrupt statistics more efficient · c2da3f1b
    Thomas Gleixner authored
    Waiman reported that on large systems with a large amount of interrupts the
    readout of /proc/stat takes a long time to sum up the interrupt
    statistics. In principle this is not a problem. but for unknown reasons
    some enterprise quality software reads /proc/stat with a high frequency.
    
    The reason for this is that interrupt statistics are accounted per cpu. So
    the /proc/stat logic has to sum up the interrupt stats for each interrupt.
    
    The interrupt core provides now a per interrupt summary counter which can
    be used to avoid the summation loops completely except for interrupts
    marked PER_CPU which are only a small fraction of the interrupt space if at
    all.
    
    Another simplification is to iterate only over the active interrupts and
    skip the potentially large gaps in the interrupt number space and just
    print zeros for the gaps without going into the interrupt core in the first
    place.
    
    Waiman provided test results from a 4-socket IvyBridge-EX system (60-core
    120-thread, 3016 irqs) excuting a test program which reads /proc/stat
    50,000 times:
    
       Before: 18.436s (sys 18.380s)
       After:   3.769s (sys  3.742s)
    Reported-by: default avatarWaiman Long <longman@redhat.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Reviewed-by: default avatarAlexey Dobriyan <adobriyan@gmail.com>
    Reviewed-by: default avatarWaiman Long <longman@redhat.com>
    Reviewed-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Reviewed-by: default avatarDavidlohr Bueso <dbueso@suse.de>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: linux-fsdevel@vger.kernel.org
    Cc: Davidlohr Bueso <dave@stgolabs.net>
    Cc: Miklos Szeredi <miklos@szeredi.hu>
    Cc: Daniel Colascione <dancol@google.com>
    Cc: Dave Chinner <david@fromorbit.com>
    Cc: Randy Dunlap <rdunlap@infradead.org>
    Link: https://lkml.kernel.org/r/20190208135021.013828701@linutronix.de
    c2da3f1b
stat.c 5.97 KB