Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1209852

[PATCH 2/3] perf tools: Make fork event processing more resilient

Path csiph.com!au2pb.net!feeder.erje.net!us.feeder.erje.net!newsfeed.fsmpi.rwth-aachen.de!newsfeed.straub-nv.de!news-2.dfn.de!news.dfn.de!news.informatik.hu-berlin.de!tfh-berlin.DE!fu-berlin.de!bofh.it!news.nic.it!robomod
From Adrian Hunter <adrian.hunter@intel.com>
Newsgroups linux.kernel
Subject [PATCH 2/3] perf tools: Make fork event processing more resilient
Date Wed, 19 Aug 2015 16:40:01 +0200
Message-ID <pZcGZ-eH-13@gated-at.bofh.it> (permalink)
References <pZcGZ-eH-5@gated-at.bofh.it>
X-Original-To Arnaldo Carvalho de Melo <acme@kernel.org>, Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>, Jiri Olsa <jolsa@redhat.com>, Jiri Olsa <jolsa@kernel.org>
X-Extloop1 1
X-Ironport-Av E=Sophos;i="5.15,710,1432623600"; d="scan'208";a="544778952"
X-Mailer git-send-email 1.9.1
Organization Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki
Sender robomod@news.nic.it
List-ID <linux-kernel.vger.kernel.org>
X-Mailing-List linux-kernel@vger.kernel.org
Approved robomod@news.nic.it
Lines 60
X-Original-Cc linux-kernel@vger.kernel.org, torvalds@linux-foundation.org, mingo@kernel.org
X-Original-Date Wed, 19 Aug 2015 17:29:20 +0300
X-Original-Message-ID <1439994561-27436-3-git-send-email-adrian.hunter@intel.com>
X-Original-References <1439994561-27436-1-git-send-email-adrian.hunter@intel.com>
X-Original-Sender linux-kernel-owner@vger.kernel.org
Xref csiph.com linux.kernel:1209852

Show key headers only | View raw


When processing a fork event, the tools lookup the parent
thread by its tid.  In a couple of cases, it is possible
for that thread to have the wrong pid.  That can happen
if the data is being processed out of order, or if the
(fork) event that would have removed the erroneous
thread was lost.  Assume the latter case, print a dump
message, remove the erroneous thread, create a new one
with the correct pid, and keep going.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/util/machine.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
index 7ff682770fdb..f1a4c833121e 100644
--- a/tools/perf/util/machine.c
+++ b/tools/perf/util/machine.c
@@ -1387,6 +1387,24 @@ int machine__process_fork_event(struct machine *machine, union perf_event *event
 							event->fork.ptid);
 	int err = 0;
 
+	if (dump_trace)
+		perf_event__fprintf_task(event, stdout);
+
+	/*
+	 * There may be an existing thread that is not actually the parent,
+	 * either because we are processing events out of order, or because the
+	 * (fork) event that would have removed the thread was lost. Assume the
+	 * latter case and continue on as best we can.
+	 */
+	if (parent->pid_ != (pid_t)event->fork.ppid) {
+		dump_printf("removing erroneous parent thread %d/%d\n",
+			    parent->pid_, parent->tid);
+		machine__remove_thread(machine, parent);
+		thread__put(parent);
+		parent = machine__findnew_thread(machine, event->fork.ppid,
+						 event->fork.ptid);
+	}
+
 	/* if a thread currently exists for the thread id remove it */
 	if (thread != NULL) {
 		machine__remove_thread(machine, thread);
@@ -1395,8 +1413,6 @@ int machine__process_fork_event(struct machine *machine, union perf_event *event
 
 	thread = machine__findnew_thread(machine, event->fork.pid,
 					 event->fork.tid);
-	if (dump_trace)
-		perf_event__fprintf_task(event, stdout);
 
 	if (thread == NULL || parent == NULL ||
 	    thread__fork(thread, parent, sample->time) < 0) {
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | Next — Next in thread | Find similar | Unroll thread


Thread

[PATCH 2/3] perf tools: Make fork event processing more resilient Adrian Hunter <adrian.hunter@intel.com> - 2015-08-19 16:40 +0200
  [tip:perf/core] perf tools:   Make fork event processing more resilient tip-bot for Adrian Hunter <tipbot@zytor.com> - 2015-08-20 12:10 +0200

csiph-web