Messages in this thread | | | Date | Wed, 2 Oct 2013 14:18:21 +0200 | From | Jiri Olsa <> | Subject | Re: [PATCH] perf session: Add option to copy events when queueing |
| |
On Fri, Sep 06, 2013 at 01:37:01PM -0600, David Ahern wrote: > When processing events the session code has an ordered samples queue which is > used to time-sort events coming in across multiple mmaps. At a later point in > time samples on the queue are flushed up to some timestamp at which point the > event is actually processed. > > When analyzing events live (ie., record/analysis path in the same command) > there is a race that leads to corrupted events and parse errors which cause > perf to terminate. The problem is that when the event is placed in the ordered > samples queue it is only a reference to the event which is really sitting in > the mmap buffer. Even though the event is queued for later processing the mmap > tail pointer is updated which indicates to the kernel that the event has been > processed. The race is flushing the event from the queue before it gets > overwritten by some other event. For commands trying to process events live > (versus just writing to a file) and processing a high rate of events this leads > to parse failures and perf terminates.
hi, 'perf top -G dwarf' hit this due to longer callchains processing your patch fixed that, thanks! ;-)
> > Examples hitting this problem are 'perf kvm stat live', especially with nested > VMs which generate 100,000+ traces per second, and a command processing > scheduling events with a high rate of context switching -- e.g., running > 'perf bench sched pipe'. > > This patch offers live commands an option to copy the event when it is placed in > the ordered samples queue. >
SNIP
> > new->timestamp = timestamp; > new->file_offset = file_offset; > - new->event = event; > + > + if (s->copy_on_queue) { > + new->event = malloc(event->header.size); > + memcpy(new->event, event, event->header.size);
missing allocation error check
jirka
| |