• Tim Chen's avatar
    [PATCH] Reducing local_bh_enable/disable overhead in irqtrace · 3c829c36
    Tim Chen authored
    The recent changes from irqtrace feature has added overheads to
    local_bh_disable and local_bh_enable that reduces UDP performance across
    x86_64 and IA64, even though IA64 does not support the irqtrace feature.
    Patch in question is
    
    [PATCH]lockdep: irqtrace subsystem, core
    http://www.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=c
    ommit;h=de30a2b3
    
    Prior to this patch, local_bh_disable was a short macro.  Now it is a
    function which calls __local_bh_disable with added irq flags save and
    restore.  The irq flags save and restore were also added to
    local_bh_enable, probably for injecting the trace irqs code.
    
    This overhead is on the generic code path across all architectures.  On a
    IA_64 test machine (Itanium-2 1.6 GHz) running a benchmark like netperf's
    UDP streaming test, the added overhead results in a drop of 3% in
    throughput, as udp_sendmsg calls the local_bh_enable/disable several times.
    
    Other workloads that have heavy usages of local_bh_enable/disable could
    also be affected.  The patch ideally should not have affected IA-64
    performance as it does not have IRQ tracing support.  A significant portion
    of the overhead is in the added irq flags save and restore, which I think
    is not needed if IRQ tracing is unused.  A suggested patch is attached
    below that recovers the lost performance.  However, the "ifdef"s in the
    patch are a bit ugly.
    Signed-off-by: default avatarTim Chen <tim.c.chen@intel.com>
    Acked-by: default avatarIngo Molnar <mingo@elte.hu>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    3c829c36
softirq.c 14.1 KB