On Fri, Mar 27, 2015 at 02:10:54PM -0600, David Ahern wrote: > On 3/27/15 1:49 PM, Don Zickus wrote: > >diff --git a/tools/perf/util/thread.c b/tools/perf/util/thread.c > >index 1c8fbc9..7ee3823 100644 > >--- a/tools/perf/util/thread.c > >+++ b/tools/perf/util/thread.c > >@@ -187,6 +187,7 @@ static int thread__clone_map_groups(struct thread > >*thread, > > if (thread->pid_ == parent->pid_) > > return 0; > > There's your answer ... the 2 lines above. > > > > >+ printf("DON:\n"); > > /* But this one is new process, copy maps. */ > > for (i = 0; i < MAP__NR_TYPES; ++i) > > if (map_groups__clone(thread->mg, parent->mg, i) < 0) > > > >before David's patch, we do _not_ see any DON markers. After David's patch > >we see a 1:1 match of DON markers to the number of threads currently running > >in the system. > > Your "speed up" is based on the assumption that all synthesized > threads are their own parent which is wrong. ie., ppid != tgid of > the process.
Actually, we originally intended the opposite I think. We were trying to get perf to avoid reading /proc/<pid>/maps and do the slow and painful ascii to binary parsing by re-using a similar map (from a forked parent). Our speed up may have been implemented incorrectly and dumb luck got us a speed up, but we didn't mean to assume ppid != tgid, IIRC. :-) I think your's and acme's explaination makes sense. As a result, we are ok with this patch. You mentioned a v2, splitting up the patch. I will wait for that patch and ack it. Thanks! Cheers, Don > > Before ppid was getting initialized to -1. If you just make that > change to revert to the -1: > > diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c > index d5efa5092ce6..ce4ca061c2e5 100644 > --- a/tools/perf/util/event.c > +++ b/tools/perf/util/event.c > @@ -150,8 +150,8 @@ static int perf_event__synthesize_fork(struct > perf_tool *tool, > { > memset(&event->fork, 0, sizeof(event->fork) + machine->id_hdr_size); > > - event->fork.ppid = tgid; > - event->fork.ptid = tgid; > + event->fork.ppid = -1; > + event->fork.ptid = -1; > event->fork.pid = tgid; > event->fork.tid = pid; > event->fork.header.type = PERF_RECORD_FORK; > > You see the "DON" messages. > > David -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/