Re: [PATCH 3/3] ring-buffer: make cpu buffer entries counter atomic

From: Ingo Molnar
Date: Fri May 01 2009 - 07:51:19 EST



* Steven Rostedt <rostedt@xxxxxxxxxxx> wrote:

> From: Steven Rostedt <srostedt@xxxxxxxxxx>
>
> The entries counter in cpu buffer is not atomic. Although it only
> gets updated by a single CPU, interrupts may come in and update
> the counter too. This would cause missing entries to be added.

> - unsigned long entries;
> + atomic_t entries;

Hm, that's not really good as atomics can be rather expensive and
this is the fastpath.

This is the upteenth time or so that the fact that we do not disable
irqs while generating trace entries bites us in one way or another.
IRQs can come in and confuse function trace output, etc. etc.

Please lets do what i suggested a long time ago: disable irqs _once_
in any trace point and run atomically from that point on, and enable
them once, at the end.

The cost is very small and it turns into a win immediately by
elimination of a _single_ atomic instruction. (even on Nehalem they
cost 20 cycles. More on older CPUs.) We can drop the preempt-count
disable/enable as well and a lot of racy code as well. Please.

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/