Re: Reducing local_bh_enable/disable overhead in irqtrace

From: Ingo Molnar
Date: Wed Jul 26 2006 - 04:18:46 EST



* Tim Chen <tim.c.chen@xxxxxxxxxxxxxxx> wrote:

> Ingo,
>
> 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=de30a2b355ea85350ca2f58f3b9bf4e5bc007986
>
> 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.

agreed - this side-effect of irqtracing should not happen. The #ifdefs
are ugly, but i can see no better way either.

> Signed-off-by: Tim Chen <tim.c.chen@xxxxxxxxx>

Acked-by: Ingo Molnar <mingo@xxxxxxx>

Ingo
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/