All of lore.kernel.org
 help / color / mirror / Atom feed
From: Juri Lelli <juri.lelli@gmail.com>
To: peterz@infradead.org, tglx@linutronix.de
Cc: mingo@redhat.com, rostedt@goodmis.org, oleg@redhat.com,
	fweisbec@gmail.com, darren@dvhart.com, johan.eker@ericsson.com,
	p.faure@akatech.ch, linux-kernel@vger.kernel.org,
	claudio@evidence.eu.com, michael@amarulasolutions.com,
	fchecconi@gmail.com, tommaso.cucinotta@sssup.it,
	juri.lelli@gmail.com, nicola.manica@disi.unitn.it,
	luca.abeni@unitn.it, dhaval.giani@gmail.com, hgu1972@gmail.com,
	paulmck@linux.vnet.ibm.com, raistlin@linux.it,
	insop.song@gmail.com, liming.wang@windriver.com,
	jkacur@redhat.com, harald.gustafsson@ericsson.com,
	vincent.guittot@linaro.org,
	bruce.ashfield@windriver.com--no-chain-reply-to
Subject: [PATCH 08/14] sched: add latency tracing for -deadline tasks.
Date: Mon, 14 Oct 2013 12:43:40 +0200	[thread overview]
Message-ID: <1381747426-31334-9-git-send-email-juri.lelli@gmail.com> (raw)
In-Reply-To: <1381747426-31334-1-git-send-email-juri.lelli@gmail.com>

From: Dario Faggioli <raistlin@linux.it>

It is very likely that systems that wants/needs to use the new
SCHED_DEADLINE policy also want to have the scheduling latency of
the -deadline tasks under control.

For this reason a new version of the scheduling wakeup latency,
called "wakeup_dl", is introduced.

As a consequence of applying this patch there will be three wakeup
latency tracer:
 * "wakeup", that deals with all tasks in the system;
 * "wakeup_rt", that deals with -rt and -deadline tasks only;
 * "wakeup_dl", that deals with -deadline tasks only.

Signed-off-by: Dario Faggioli <raistlin@linux.it>
Signed-off-by: Juri Lelli <juri.lelli@gmail.com>
---
 kernel/trace/trace_sched_wakeup.c |   44 +++++++++++++++++++++++++++++++++----
 kernel/trace/trace_selftest.c     |   28 +++++++++++++----------
 2 files changed, 57 insertions(+), 15 deletions(-)

diff --git a/kernel/trace/trace_sched_wakeup.c b/kernel/trace/trace_sched_wakeup.c
index fee77e1..1457fb1 100644
--- a/kernel/trace/trace_sched_wakeup.c
+++ b/kernel/trace/trace_sched_wakeup.c
@@ -27,6 +27,7 @@ static int			wakeup_cpu;
 static int			wakeup_current_cpu;
 static unsigned			wakeup_prio = -1;
 static int			wakeup_rt;
+static int			wakeup_dl;
 
 static arch_spinlock_t wakeup_lock =
 	(arch_spinlock_t)__ARCH_SPIN_LOCK_UNLOCKED;
@@ -472,9 +473,17 @@ probe_wakeup(void *ignore, struct task_struct *p, int success)
 	tracing_record_cmdline(p);
 	tracing_record_cmdline(current);
 
-	if ((wakeup_rt && !rt_task(p)) ||
-			p->prio >= wakeup_prio ||
-			p->prio >= current->prio)
+	/*
+	 * Semantic is like this:
+	 *  - wakeup tracer handles all tasks in the system, independently
+	 *    from their scheduling class;
+	 *  - wakeup_rt tracer handles tasks belonging to sched_dl and
+	 *    sched_rt class;
+	 *  - wakeup_dl handles tasks belonging to sched_dl class only.
+	 */
+	if ((wakeup_dl && !dl_task(p)) ||
+	    (wakeup_rt && !dl_task(p) && !rt_task(p)) ||
+	    (p->prio >= wakeup_prio || p->prio >= current->prio))
 		return;
 
 	pc = preempt_count();
@@ -486,7 +495,7 @@ probe_wakeup(void *ignore, struct task_struct *p, int success)
 	arch_spin_lock(&wakeup_lock);
 
 	/* check for races. */
-	if (!tracer_enabled || p->prio >= wakeup_prio)
+	if (!tracer_enabled || (!dl_task(p) && p->prio >= wakeup_prio))
 		goto out_locked;
 
 	/* reset the trace */
@@ -597,16 +606,25 @@ static int __wakeup_tracer_init(struct trace_array *tr)
 
 static int wakeup_tracer_init(struct trace_array *tr)
 {
+	wakeup_dl = 0;
 	wakeup_rt = 0;
 	return __wakeup_tracer_init(tr);
 }
 
 static int wakeup_rt_tracer_init(struct trace_array *tr)
 {
+	wakeup_dl = 0;
 	wakeup_rt = 1;
 	return __wakeup_tracer_init(tr);
 }
 
+static int wakeup_dl_tracer_init(struct trace_array *tr)
+{
+	wakeup_dl = 1;
+	wakeup_rt = 0;
+	return __wakeup_tracer_init(tr);
+}
+
 static void wakeup_tracer_reset(struct trace_array *tr)
 {
 	int lat_flag = save_flags & TRACE_ITER_LATENCY_FMT;
@@ -674,6 +692,20 @@ static struct tracer wakeup_rt_tracer __read_mostly =
 	.use_max_tr	= true,
 };
 
+static struct tracer wakeup_dl_tracer __read_mostly =
+{
+	.name		= "wakeup_dl",
+	.init		= wakeup_dl_tracer_init,
+	.reset		= wakeup_tracer_reset,
+	.start		= wakeup_tracer_start,
+	.stop		= wakeup_tracer_stop,
+	.wait_pipe	= poll_wait_pipe,
+	.print_max	= 1,
+#ifdef CONFIG_FTRACE_SELFTEST
+	.selftest    = trace_selftest_startup_wakeup,
+#endif
+};
+
 __init static int init_wakeup_tracer(void)
 {
 	int ret;
@@ -686,6 +718,10 @@ __init static int init_wakeup_tracer(void)
 	if (ret)
 		return ret;
 
+	ret = register_tracer(&wakeup_dl_tracer);
+	if (ret)
+		return ret;
+
 	return 0;
 }
 core_initcall(init_wakeup_tracer);
diff --git a/kernel/trace/trace_selftest.c b/kernel/trace/trace_selftest.c
index a7329b7..f76f8d6 100644
--- a/kernel/trace/trace_selftest.c
+++ b/kernel/trace/trace_selftest.c
@@ -1022,11 +1022,17 @@ trace_selftest_startup_nop(struct tracer *trace, struct trace_array *tr)
 #ifdef CONFIG_SCHED_TRACER
 static int trace_wakeup_test_thread(void *data)
 {
-	/* Make this a RT thread, doesn't need to be too high */
-	static const struct sched_param param = { .sched_priority = 5 };
+	/* Make this a -deadline thread */
+	struct sched_param2 paramx = {
+		.sched_priority = 0,
+		.sched_runtime = 100000ULL,
+		.sched_deadline = 10000000ULL,
+		.sched_period = 10000000ULL
+		.sched_flags = 0
+	};
 	struct completion *x = data;
 
-	sched_setscheduler(current, SCHED_FIFO, &param);
+	sched_setscheduler2(current, SCHED_DEADLINE, &paramx);
 
 	/* Make it know we have a new prio */
 	complete(x);
@@ -1040,8 +1046,8 @@ static int trace_wakeup_test_thread(void *data)
 	/* we are awake, now wait to disappear */
 	while (!kthread_should_stop()) {
 		/*
-		 * This is an RT task, do short sleeps to let
-		 * others run.
+		 * This will likely be the system top priority
+		 * task, do short sleeps to let others run.
 		 */
 		msleep(100);
 	}
@@ -1054,21 +1060,21 @@ trace_selftest_startup_wakeup(struct tracer *trace, struct trace_array *tr)
 {
 	unsigned long save_max = tracing_max_latency;
 	struct task_struct *p;
-	struct completion isrt;
+	struct completion is_ready;
 	unsigned long count;
 	int ret;
 
-	init_completion(&isrt);
+	init_completion(&is_ready);
 
-	/* create a high prio thread */
-	p = kthread_run(trace_wakeup_test_thread, &isrt, "ftrace-test");
+	/* create a -deadline thread */
+	p = kthread_run(trace_wakeup_test_thread, &is_ready, "ftrace-test");
 	if (IS_ERR(p)) {
 		printk(KERN_CONT "Failed to create ftrace wakeup test thread ");
 		return -1;
 	}
 
-	/* make sure the thread is running at an RT prio */
-	wait_for_completion(&isrt);
+	/* make sure the thread is running at -deadline policy */
+	wait_for_completion(&is_ready);
 
 	/* start the tracing */
 	ret = tracer_init(trace, tr);
-- 
1.7.9.5


  parent reply	other threads:[~2013-10-14 10:44 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-14 10:43 [PATCH 00/14] sched: SCHED_DEADLINE v8 Juri Lelli
2013-10-14 10:43 ` [PATCH 01/14] sched: add sched_class->task_dead Juri Lelli
2013-10-14 10:43 ` [PATCH 02/14] sched: add extended scheduling interface Juri Lelli
2013-10-14 10:43 ` [PATCH 03/14] sched: SCHED_DEADLINE structures & implementation Juri Lelli
2013-10-14 11:10   ` Peter Zijlstra
2013-10-14 13:05     ` Juri Lelli
2013-10-14 13:51       ` Peter Zijlstra
2013-10-14 11:18   ` Peter Zijlstra
2013-10-14 11:24   ` Peter Zijlstra
2013-10-14 14:36     ` Juri Lelli
2013-10-14 11:33   ` Peter Zijlstra
2013-10-14 16:16     ` Juri Lelli
2013-10-14 16:19       ` Peter Zijlstra
2013-10-14 11:44   ` Peter Zijlstra
2013-10-14 16:58     ` Juri Lelli
2013-10-14 17:34       ` Peter Zijlstra
2013-10-14 20:48         ` Juri Lelli
2013-10-14 11:49   ` Peter Zijlstra
2013-10-14 20:36     ` Juri Lelli
2013-10-14 11:51   ` Peter Zijlstra
2013-10-14 21:26     ` Juri Lelli
2013-10-14 10:43 ` [PATCH 04/14] sched: SCHED_DEADLINE SMP-related data structures & logic Juri Lelli
2013-10-14 12:03   ` Peter Zijlstra
2013-10-15  9:36     ` Juri Lelli
2013-10-15 10:35       ` Peter Zijlstra
2013-10-15 11:36         ` Juri Lelli
2013-10-17 16:49         ` [tip:sched/core] sched/rt: Add missing rmb() tip-bot for Peter Zijlstra
2013-10-14 10:43 ` [PATCH 05/14] sched: SCHED_DEADLINE avg_update accounting Juri Lelli
2013-10-14 10:43 ` [PATCH 06/14] sched: add period support for -deadline tasks Juri Lelli
2013-10-14 12:07   ` Peter Zijlstra
2013-10-15  8:23     ` Juri Lelli
2013-10-15  8:43       ` Peter Zijlstra
2013-10-14 10:43 ` [PATCH 07/14] sched: add schedstats " Juri Lelli
2013-10-14 12:08   ` Peter Zijlstra
2013-10-15  9:06     ` Juri Lelli
2013-10-14 10:43 ` Juri Lelli [this message]
2013-10-14 10:43 ` [PATCH 09/14] rtmutex: turn the plist into an rb-tree Juri Lelli
2013-10-14 10:43 ` [PATCH 10/14] sched: drafted deadline inheritance logic Juri Lelli
2013-10-14 10:43 ` [PATCH 11/14] sched: add bandwidth management for sched_dl Juri Lelli
2013-10-14 10:43 ` [PATCH 12/14] sched: make dl_bw a sub-quota of rt_bw Juri Lelli
2013-10-14 14:06   ` Ingo Molnar
2013-10-15 10:00     ` Juri Lelli
2013-10-15 10:26       ` Peter Zijlstra
2013-10-15 11:35         ` Juri Lelli
2013-10-15 12:25         ` Ingo Molnar
2013-10-15 12:35           ` Peter Zijlstra
2013-10-15 13:11             ` Ingo Molnar
2013-10-16  8:59               ` Peter Zijlstra
2013-10-16  9:19                 ` Ingo Molnar
2013-10-14 10:43 ` [PATCH 13/14] sched: speed up -dl pushes with a push-heap Juri Lelli
2013-10-14 10:43 ` [PATCH 14/14] sched: add sched_dl documentation Juri Lelli
2013-10-14 10:53 ` [PATCH 00/14] sched: SCHED_DEADLINE v8 Juri Lelli
2013-10-14 12:24 ` Peter Zijlstra
2013-10-14 12:38   ` Ingo Molnar
2013-10-14 13:22     ` Peter Zijlstra
2013-10-14 13:36       ` Ingo Molnar
2013-10-14 13:50         ` Peter Zijlstra
  -- strict thread matches above, loose matches on Subject: below --
2013-11-07 13:43 [PATCH 00/14] sched: SCHED_DEADLINE v9 Juri Lelli
2013-11-07 13:43 ` [PATCH 08/14] sched: add latency tracing for -deadline tasks Juri Lelli
2013-11-20 21:33   ` Steven Rostedt
2013-11-27 13:43     ` Juri Lelli
2013-11-27 14:16       ` Steven Rostedt
2013-11-27 14:19         ` Juri Lelli
2013-11-27 14:26         ` Peter Zijlstra
2013-11-27 14:34           ` Ingo Molnar
2013-11-27 14:58             ` Peter Zijlstra
2013-11-27 15:35               ` Ingo Molnar
2013-11-27 15:40                 ` Peter Zijlstra
2013-11-27 15:46                   ` Ingo Molnar
2013-11-27 15:54                     ` Peter Zijlstra
2013-11-27 15:56                     ` Steven Rostedt
2013-11-27 16:01                       ` Peter Zijlstra
2013-11-27 16:02                       ` Steven Rostedt
2013-11-27 16:13                       ` Ingo Molnar
2013-11-27 16:33                         ` Steven Rostedt
2013-11-27 16:24                   ` Oleg Nesterov
2013-11-27 15:42               ` Ingo Molnar
2013-11-27 15:00           ` Steven Rostedt
2013-02-11 18:50 [PATCH 00/14] sched: SCHED_DEADLINE v7 Juri Lelli
2013-02-11 18:50 ` [PATCH 08/14] sched: add latency tracing for -deadline tasks Juri Lelli

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=1381747426-31334-9-git-send-email-juri.lelli@gmail.com \
    --to=juri.lelli@gmail.com \
    --cc=bruce.ashfield@windriver.com--no-chain-reply-to \
    --cc=claudio@evidence.eu.com \
    --cc=darren@dvhart.com \
    --cc=dhaval.giani@gmail.com \
    --cc=fchecconi@gmail.com \
    --cc=fweisbec@gmail.com \
    --cc=harald.gustafsson@ericsson.com \
    --cc=hgu1972@gmail.com \
    --cc=insop.song@gmail.com \
    --cc=jkacur@redhat.com \
    --cc=johan.eker@ericsson.com \
    --cc=liming.wang@windriver.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luca.abeni@unitn.it \
    --cc=michael@amarulasolutions.com \
    --cc=mingo@redhat.com \
    --cc=nicola.manica@disi.unitn.it \
    --cc=oleg@redhat.com \
    --cc=p.faure@akatech.ch \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=raistlin@linux.it \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    --cc=tommaso.cucinotta@sssup.it \
    --cc=vincent.guittot@linaro.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.