Re: [PATCH v2] perf tool: Fix ppid for synthesized fork events
From: David Ahern
Date: Fri Mar 27 2015 - 16:11:01 EST
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.
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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/