From: Namhyung Kim <namhyung@kernel.org>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Ingo Molnar <mingo@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Jiri Olsa <jolsa@kernel.org>, LKML <linux-kernel@vger.kernel.org>,
David Ahern <dsahern@gmail.com>, Andi Kleen <andi@firstfloor.org>,
Minchan Kim <minchan@kernel.org>
Subject: [PATCH 06/10] perf sched timehist: Introduce struct idle_time_data
Date: Tue, 6 Dec 2016 12:40:06 +0900 [thread overview]
Message-ID: <20161206034010.6499-7-namhyung@kernel.org> (raw)
In-Reply-To: <20161206034010.6499-1-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>
---
tools/perf/builtin-sched.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c
index 26efa99567b8..d3ee814ce77f 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;
@@ -2009,11 +2018,22 @@ static int init_idle_threads(int ncpu)
/* allocate the actual thread struct if needed */
for (i = 0; i < ncpu; ++i) {
+ struct idle_thread_runtime *itr;
+
idle_threads[i] = thread__new(0, 0);
if (idle_threads[i] == NULL)
return -ENOMEM;
thread__set_comm(idle_threads[i], 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(idle_threads[i], itr);
}
return 0;
@@ -2060,8 +2080,19 @@ static struct thread *get_idle_thread(int cpu)
idle_threads[cpu] = thread__new(0, 0);
if (idle_threads[cpu]) {
+ struct idle_thread_runtime *itr;
+
idle_threads[cpu]->tid = 0;
thread__set_comm(idle_threads[cpu], idle_comm, 0);
+
+ itr = zalloc(sizeof(*itr));
+ if (itr == NULL)
+ return NULL;
+
+ init_stats(&itr->tr.run_stats);
+ callchain_init(&itr->callchain);
+ callchain_cursor_reset(&itr->cursor);
+ thread__set_priv(idle_threads[cpu], itr);
}
}
--
2.10.1
next prev parent reply other threads:[~2016-12-06 3:42 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-06 3:40 [PATCHSET 00/10] perf sched timehist: Introduce --idle-hist option (v1) Namhyung Kim
2016-12-06 3:40 ` [PATCH 01/10] perf sched: Cleanup option processing Namhyung Kim
2016-12-06 3:58 ` David Ahern
2016-12-07 18:24 ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-12-06 3:40 ` [PATCH 02/10] perf tools: Introduce callchain_cursor__copy() Namhyung Kim
2016-12-07 18:25 ` [tip:perf/core] perf callchain: " tip-bot for Namhyung Kim
2016-12-06 3:40 ` [PATCH 03/10] perf sched timehist: Handle zero sample->tid properly Namhyung Kim
2016-12-06 3:52 ` David Ahern
2016-12-06 3:59 ` Namhyung Kim
2016-12-06 4:01 ` David Ahern
2016-12-07 2:06 ` Namhyung Kim
2016-12-08 14:19 ` Namhyung Kim
2016-12-07 18:25 ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-12-06 3:40 ` [PATCH 04/10] perf sched timehist: Split is_idle_sample() Namhyung Kim
2016-12-06 3:57 ` David Ahern
2016-12-07 1:26 ` Namhyung Kim
2016-12-06 3:40 ` [PATCH 05/10] perf sched timehist: Cleanup idle_max_cpu handling Namhyung Kim
2016-12-06 4:00 ` David Ahern
2016-12-07 18:26 ` [tip:perf/core] " tip-bot for Namhyung Kim
2016-12-06 3:40 ` Namhyung Kim [this message]
2016-12-06 4:07 ` [PATCH 06/10] perf sched timehist: Introduce struct idle_time_data David Ahern
2016-12-07 2:12 ` Namhyung Kim
2016-12-06 3:40 ` [PATCH 07/10] perf sched timehist: Save callchain when entering idle Namhyung Kim
2016-12-06 3:40 ` [PATCH 08/10] perf sched timehist: Skip non-idle events when necessary Namhyung Kim
2016-12-06 3:40 ` [PATCH 09/10] perf sched timehist: Add -I/--idle-hist option Namhyung Kim
2016-12-06 3:40 ` [PATCH 10/10] perf sched timehist: Show callchains for idle stat Namhyung Kim
2016-12-06 19:44 ` [PATCHSET 00/10] perf sched timehist: Introduce --idle-hist option (v1) Arnaldo Carvalho de Melo
2016-12-06 21:31 ` David Ahern
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=20161206034010.6499-7-namhyung@kernel.org \
--to=namhyung@kernel.org \
--cc=acme@kernel.org \
--cc=andi@firstfloor.org \
--cc=dsahern@gmail.com \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=minchan@kernel.org \
--cc=mingo@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.