All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org, Namhyung Kim <namhyung@kernel.org>,
	Andi Kleen <andi@firstfloor.org>, Jiri Olsa <jolsa@kernel.org>,
	Minchan Kim <minchan@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH 03/22] perf sched timehist: Introduce struct idle_time_data
Date: Tue, 13 Dec 2016 12:09:09 -0300	[thread overview]
Message-ID: <20161213150928.13144-4-acme@kernel.org> (raw)
In-Reply-To: <20161213150928.13144-1-acme@kernel.org>

From: Namhyung Kim <namhyung@kernel.org>

The struct idle_time_data is to keep idle stats with callchains entering
to the idle task.  The normal thread_runtime calculation is done
transparently since it extends the struct thread_runtime.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: David Ahern <dsahern@gmail.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20161208144755.16673-3-namhyung@kernel.org
[ Align struct field names ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-sched.c | 37 +++++++++++++++++++++++++++++++++----
 1 file changed, 33 insertions(+), 4 deletions(-)

diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
index 966eddce1609..e108b0f6a246 100644
--- a/tools/perf/builtin-sched.c
+++ b/tools/perf/builtin-sched.c
@@ -230,6 +230,15 @@ struct evsel_runtime {
 	u32 ncpu;       /* highest cpu slot allocated */
 };
 
+/* per cpu idle time data */
+struct idle_thread_runtime {
+	struct thread_runtime	tr;
+	struct thread		*last_thread;
+	struct rb_root		sorted_root;
+	struct callchain_root	callchain;
+	struct callchain_cursor	cursor;
+};
+
 /* track idle times per cpu */
 static struct thread **idle_threads;
 static int idle_max_cpu;
@@ -1997,13 +2006,31 @@ static void save_task_callchain(struct perf_sched *sched,
 	}
 }
 
+static int init_idle_thread(struct thread *thread)
+{
+	struct idle_thread_runtime *itr;
+
+	thread__set_comm(thread, idle_comm, 0);
+
+	itr = zalloc(sizeof(*itr));
+	if (itr == NULL)
+		return -ENOMEM;
+
+	init_stats(&itr->tr.run_stats);
+	callchain_init(&itr->callchain);
+	callchain_cursor_reset(&itr->cursor);
+	thread__set_priv(thread, itr);
+
+	return 0;
+}
+
 /*
  * Track idle stats per cpu by maintaining a local thread
  * struct for the idle task on each cpu.
  */
 static int init_idle_threads(int ncpu)
 {
-	int i;
+	int i, ret;
 
 	idle_threads = zalloc(ncpu * sizeof(struct thread *));
 	if (!idle_threads)
@@ -2017,7 +2044,9 @@ static int init_idle_threads(int ncpu)
 		if (idle_threads[i] == NULL)
 			return -ENOMEM;
 
-		thread__set_comm(idle_threads[i], idle_comm, 0);
+		ret = init_idle_thread(idle_threads[i]);
+		if (ret < 0)
+			return ret;
 	}
 
 	return 0;
@@ -2064,8 +2093,8 @@ static struct thread *get_idle_thread(int cpu)
 		idle_threads[cpu] = thread__new(0, 0);
 
 		if (idle_threads[cpu]) {
-			idle_threads[cpu]->tid = 0;
-			thread__set_comm(idle_threads[cpu], idle_comm, 0);
+			if (init_idle_thread(idle_threads[cpu]) < 0)
+				return NULL;
 		}
 	}
 
-- 
2.9.3

  parent reply	other threads:[~2016-12-13 15:12 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-13 15:09 [GIT PULL 00/22] perf/core improvements and fixes Arnaldo Carvalho de Melo
2016-12-13 15:09 ` [PATCH 01/22] perf tools: Move headers check into bash script Arnaldo Carvalho de Melo
2016-12-13 15:09 ` [PATCH 02/22] perf sched timehist: Split is_idle_sample() Arnaldo Carvalho de Melo
2016-12-13 15:09 ` Arnaldo Carvalho de Melo [this message]
2016-12-13 15:09 ` [PATCH 04/22] perf sched timehist: Save callchain when entering idle Arnaldo Carvalho de Melo
2016-12-13 15:09 ` [PATCH 05/22] perf sched timehist: Skip non-idle events when necessary Arnaldo Carvalho de Melo
2016-12-13 15:09 ` [PATCH 06/22] perf sched timehist: Add -I/--idle-hist option Arnaldo Carvalho de Melo
2016-12-13 15:09 ` [PATCH 07/22] perf sched timehist: Show callchains for idle stat Arnaldo Carvalho de Melo
2016-12-13 15:09 ` [PATCH 08/22] tools lib bpf: Sync {tools,}/include/uapi/linux/bpf.h Arnaldo Carvalho de Melo
2016-12-13 15:09 ` [PATCH 09/22] tools lib bpf: use __u32 from linux/types.h Arnaldo Carvalho de Melo
2016-12-13 15:09 ` [PATCH 10/22] tools lib bpf: Add flags to bpf_create_map() Arnaldo Carvalho de Melo
2016-12-13 15:09 ` [PATCH 11/22] samples/bpf: Make samples more libbpf-centric Arnaldo Carvalho de Melo
2016-12-13 15:09 ` [PATCH 12/22] samples/bpf: Switch over to libbpf Arnaldo Carvalho de Melo
2016-12-13 15:09 ` [PATCH 13/22] samples/bpf: Remove perf_event_open() declaration Arnaldo Carvalho de Melo
2016-12-13 15:09 ` [PATCH 14/22] samples/bpf: Move open_raw_sock to separate header Arnaldo Carvalho de Melo
2016-12-13 15:09 ` [PATCH 15/22] perf sdt: Add scanning of sdt probles arguments Arnaldo Carvalho de Melo
2016-12-13 15:09 ` [PATCH 16/22] perf tools: Remove some needless __maybe_unused Arnaldo Carvalho de Melo
2016-12-13 15:09 ` [PATCH 17/22] perf mem: Fix --all-user/--all-kernel options Arnaldo Carvalho de Melo
2016-12-13 15:09 ` [PATCH 18/22] perf evsel: Use variable instead of repeating lengthy FD macro Arnaldo Carvalho de Melo
2016-12-13 15:09 ` [PATCH 19/22] perf thread_map: Add thread_map__remove function Arnaldo Carvalho de Melo
2016-12-13 15:09 ` [PATCH 20/22] perf evsel: Allow to ignore missing pid Arnaldo Carvalho de Melo
2016-12-13 15:09 ` [PATCH 21/22] perf record: Force ignore_missing_thread for uid option Arnaldo Carvalho de Melo
2016-12-13 15:09 ` [PATCH 22/22] samples/bpf: Drop unnecessary build targets Arnaldo Carvalho de Melo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20161213150928.13144-4-acme@kernel.org \
    --to=acme@kernel.org \
    --cc=acme@redhat.com \
    --cc=andi@firstfloor.org \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=minchan@kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.