lkml.org 
[lkml]   [2013]   [Nov]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [tip:perf/core] tools/perf: Add required memory barriers
On Wed, 6 Nov 2013, Peter Zijlstra wrote:

> On Wed, Nov 06, 2013 at 03:44:56PM +0100, Peter Zijlstra wrote:
> > long head = ((__atomic long)pc->data_head).load(memory_order_acquire);
> >
> > coupled with:
> >
> > ((__atomic long)pc->data_tail).store(tail, memory_order_release);
> >
> > might be the 'right' and proper C11 incantations to avoid having to
> > touch kernel macros; but would obviously require a recent compiler.
> >
> > Barring that, I think we're stuck with:
> >
> > long head = ACCESS_ONCE(pc->data_head);
> > smp_rmb();
> >
> > ...
> >
> > smp_mb();
> > pc->data_tail = tail;
> >
> > And using the right asm goo for the barriers. That said, all these asm
> > barriers should include a compiler barriers (memory clobber) which
> > _should_ avoid the worst compiler trickery -- although I don't think it
> > completely obviates the need for ACCESS_ONCE() -- uncertain there.
>
> http://software.intel.com/en-us/articles/single-producer-single-consumer-queue/
>
> There's one for icc on x86.
>

I think the problem here is this really isn't a good interface.

Most users just want the most recent batch of samples. Something like

char buffer[4096];
int count;

do {
count=perf_read_sample_buffer(buffer,4096);
process_samples(buffer);
} while(count);

where perf_read_sample_buffer() is a syscall that just copies the current
valid samples to userspace.

Yes, this is inefficient (requires an extra copy of the values) but the
kernel then could handle all the SMP/multithread/barrier/locking issues.

How much overhead is really introduced by making a copy?

Requiring the user of a kernel interface to have a deep knowledge of
optimizing compilers, barriers, and CPU memory models is just asking for
trouble.

Especially as this all needs to get documented in the manpage and I'm not
sure that's possible in a sane fashion.

Vince




\
 
 \ /
  Last update: 2013-11-06 18:41    [W:0.255 / U:0.536 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site