[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1288334377.8661.157.camel@Palantir>
Date: Fri, 29 Oct 2010 08:39:37 +0200
From: Raistlin <raistlin@...ux.it>
To: Peter Zijlstra <peterz@...radead.org>
Cc: Ingo Molnar <mingo@...e.hu>, Thomas Gleixner <tglx@...utronix.de>,
Steven Rostedt <rostedt@...dmis.org>,
Chris Friesen <cfriesen@...tel.com>, oleg@...hat.com,
Frederic Weisbecker <fweisbec@...il.com>,
Darren Hart <darren@...art.com>,
Johan Eker <johan.eker@...csson.com>,
"p.faure" <p.faure@...tech.ch>,
linux-kernel <linux-kernel@...r.kernel.org>,
Claudio Scordino <claudio@...dence.eu.com>,
michael trimarchi <trimarchi@...is.sssup.it>,
Fabio Checconi <fabio@...dalf.sssup.it>,
Tommaso Cucinotta <cucinotta@...up.it>,
Juri Lelli <juri.lelli@...il.com>,
Nicola Manica <nicola.manica@...i.unitn.it>,
Luca Abeni <luca.abeni@...tn.it>,
Dhaval Giani <dhaval@...is.sssup.it>,
Harald Gustafsson <hgu1972@...il.com>,
paulmck <paulmck@...ux.vnet.ibm.com>
Subject: [RFC][PATCH 16/22] sched: add SMP traceporints for -deadline tasks
Add tracepoints for the events involved in -deadline task migration
(mainly push, pull and migrate-task).
Signed-off-by: Dario Faggioli <raistlin@...ux.it>
---
include/trace/events/sched.h | 109 ++++++++++++++++++++++++++++++++++++++++++
kernel/sched.c | 3 +
kernel/sched_dl.c | 7 +++
3 files changed, 119 insertions(+), 0 deletions(-)
diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h
index 03baa17..f1d805f 100644
--- a/include/trace/events/sched.h
+++ b/include/trace/events/sched.h
@@ -475,6 +475,115 @@ TRACE_EVENT(sched_timer_dl,
);
/*
+ *
+ */
+TRACE_EVENT(sched_push_task_dl,
+
+ TP_PROTO(struct task_struct *n, u64 clock, int later_cpu),
+
+ TP_ARGS(n, clock, later_cpu),
+
+ TP_STRUCT__entry(
+ __array( char, comm, TASK_COMM_LEN )
+ __field( pid_t, pid )
+ __field( u64, clock )
+ __field( s64, rt )
+ __field( u64, dl )
+ __field( int, cpu )
+ __field( int, later_cpu )
+ ),
+
+ TP_fast_assign(
+ memcpy(__entry->comm, n->comm, TASK_COMM_LEN);
+ __entry->pid = n->pid;
+ __entry->clock = clock;
+ __entry->rt = n->dl.runtime;
+ __entry->dl = n->dl.deadline;
+ __entry->cpu = task_cpu(n);
+ __entry->later_cpu = later_cpu;
+ ),
+
+ TP_printk("comm=%s pid=%d rt=%Ld [ns] dl=%Lu [ns] clock=%Lu [ns] cpu=%d later_cpu=%d",
+ __entry->comm, __entry->pid, (long long)__entry->rt,
+ (unsigned long long)__entry->dl, (unsigned long long)__entry->clock,
+ __entry->cpu, __entry->later_cpu)
+);
+
+/*
+ *
+ */
+TRACE_EVENT(sched_pull_task_dl,
+
+ TP_PROTO(struct task_struct *p, u64 clock, int src_cpu),
+
+ TP_ARGS(p, clock, src_cpu),
+
+ TP_STRUCT__entry(
+ __array( char, comm, TASK_COMM_LEN )
+ __field( pid_t, pid )
+ __field( u64, clock )
+ __field( s64, rt )
+ __field( u64, dl )
+ __field( int, cpu )
+ __field( int, src_cpu )
+ ),
+
+ TP_fast_assign(
+ memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
+ __entry->pid = p->pid;
+ __entry->clock = clock;
+ __entry->rt = p->dl.runtime;
+ __entry->dl = p->dl.deadline;
+ __entry->cpu = task_cpu(p);
+ __entry->src_cpu = src_cpu;
+ ),
+
+ TP_printk("comm=%s pid=%d rt=%Ld [ns] dl=%Lu [ns] clock=%Lu [ns] cpu=%d later_cpu=%d",
+ __entry->comm, __entry->pid, (long long)__entry->rt,
+ (unsigned long long)__entry->dl, (unsigned long long)__entry->clock,
+ __entry->cpu, __entry->src_cpu)
+);
+
+/*
+ * Tracepoint for migrations involving -deadline tasks:
+ */
+TRACE_EVENT(sched_migrate_task_dl,
+
+ TP_PROTO(struct task_struct *p, u64 clock, int dest_cpu, u64 dclock),
+
+ TP_ARGS(p, clock, dest_cpu, dclock),
+
+ TP_STRUCT__entry(
+ __array( char, comm, TASK_COMM_LEN )
+ __field( pid_t, pid )
+ __field( u64, clock )
+ __field( s64, rt )
+ __field( u64, dl )
+ __field( int, orig_cpu )
+ __field( int, dest_cpu )
+ __field( u64, dclock )
+ ),
+
+ TP_fast_assign(
+ memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
+ __entry->pid = p->pid;
+ __entry->clock = clock;
+ __entry->rt = p->dl.runtime;
+ __entry->dl = p->dl.deadline;
+ __entry->orig_cpu = task_cpu(p);
+ __entry->dest_cpu = dest_cpu;
+ __entry->dclock = dclock;
+ ),
+
+ TP_printk("comm=%s pid=%d rt=%Ld [ns] dl=%Lu [ns] orig_cpu=%d orig_clock=%Lu [ns] "
+ "dest_cpu=%d dest_clock=%Lu [ns]",
+ __entry->comm, __entry->pid, (long long)__entry->rt,
+ (unsigned long long)__entry->dl, __entry->orig_cpu,
+ (unsigned long long)__entry->clock, __entry->dest_cpu,
+ (unsigned long long)__entry->dclock)
+);
+
+/*
* sched_stat tracepoints for -deadline tasks:
*/
DECLARE_EVENT_CLASS(sched_stat_template_dl,
diff --git a/kernel/sched.c b/kernel/sched.c
index 060d0c9..79cac6e 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -2235,6 +2235,9 @@ void set_task_cpu(struct task_struct *p, unsigned int new_cpu)
#endif
trace_sched_migrate_task(p, new_cpu);
+ if (unlikely(dl_task(p)))
+ trace_sched_migrate_task_dl(p, task_rq(p)->clock,
+ new_cpu, cpu_rq(new_cpu)->clock);
if (task_cpu(p) != new_cpu) {
p->se.nr_migrations++;
diff --git a/kernel/sched_dl.c b/kernel/sched_dl.c
index 229814a..cc87949 100644
--- a/kernel/sched_dl.c
+++ b/kernel/sched_dl.c
@@ -1294,6 +1294,10 @@ retry:
/* Will lock the rq it'll find */
later_rq = find_lock_later_rq(next_task, rq);
+
+ trace_sched_push_task_dl(next_task, rq->clock,
+ later_rq ? later_rq->cpu : -1);
+
if (!later_rq) {
struct task_struct *task;
@@ -1378,6 +1382,9 @@ static int pull_dl_task(struct rq *this_rq)
goto skip;
p = pick_next_earliest_dl_task(src_rq, this_cpu);
+ if (p)
+ trace_sched_pull_task_dl(p, this_rq->clock,
+ src_rq->cpu);
/*
* We found a task to be pulled if:
--
1.7.2.3
--
<<This happens because I choose it to happen!>> (Raistlin Majere)
----------------------------------------------------------------------
Dario Faggioli, ReTiS Lab, Scuola Superiore Sant'Anna, Pisa (Italy)
http://blog.linux.it/raistlin / raistlin@...ga.net /
dario.faggioli@...ber.org
Download attachment "signature.asc" of type "application/pgp-signature" (199 bytes)
Powered by blists - more mailing lists