lkml.org 
[lkml]   [2009]   [May]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 3/3] ring-buffer: make cpu buffer entries counter atomic

On Fri, 1 May 2009, Ingo Molnar wrote:
> > The entries keeps track of the number of entries in the buffer. A
> > writer (producer) adds to the counter and readers (consumers)
> > subtract from them. A writer can subtract them if it overwrites a
> > page before the producer consumes it.
> >
> > Only the writers are pinned to a CPU, the readers happen on any
> > CPU.
>
> But that does not require atomicity. It requires careful use of
> barriers, but otherwise atomicity is not needed. Update of machine
> word variables (if they are aligned to a machine word) is guaranteed
> to be atomic, even without atomic_t overhead.

I'm confused :-/ This throws out all that I learned in multi threaded
programming.

If I have a shared variable used by two threads, the adding and
subtracting of that variable does not need to be atomic?

CPU0 CPU1
---- ----
load A load A
sub 1, A sub 1, A
store A store A

can work??

BTW, how expensive is an LOCK operation on a cache line that is not
shared by other CPUs? As long as a reader is not running, the updating of
the variable is not shared.

Also, if this becomes a problem, I can just nuke the field. I like knowing
the number of entries in the buffer, as well as the number of overruns.
But these are more for debugging purposes. The overruns should probably be
kept, because that is the only way a tracer can know if a overrun
occurred. The number of entries in the buffer is not as important.

-- Steve


\
 
 \ /
  Last update: 2009-05-01 19:17    [W:0.117 / U:0.380 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site