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/