All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Daniel Bristot de Oliveira <bristot@redhat.com>,
	Ingo Molnar <mingo@redhat.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Juri Lelli <juri.lelli@gmail.com>,
	Arnaldo Carvalho de Melo <acme@redhat.com>,
	LKML <linux-kernel@vger.kernel.org>,
	linux-rt-users <linux-rt-users@vger.kernel.org>
Subject: Re: [PATCH 3/4] sched/deadline: Tracepoints for deadline scheduler
Date: Tue, 23 Feb 2016 15:27:53 +0100	[thread overview]
Message-ID: <20160223142753.GR6375@twins.programming.kicks-ass.net> (raw)
In-Reply-To: <20160223104408.GO6357@twins.programming.kicks-ass.net>

On Tue, Feb 23, 2016 at 11:44:08AM +0100, Peter Zijlstra wrote:
>  include/trace/events/sched.h | 97 +++++++++++++++++++++++++++++++++++++++-----
>  1 file changed, 86 insertions(+), 11 deletions(-)
> 
> diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h
> index 9b90c57517a9..b902eb71830b 100644
> --- a/include/trace/events/sched.h
> +++ b/include/trace/events/sched.h
> @@ -103,9 +103,15 @@ DEFINE_EVENT(sched_wakeup_template, sched_wakeup_new,
>  	     TP_PROTO(struct task_struct *p),
>  	     TP_ARGS(p));
>  
> +#define TASK_STATE_PREEMPT	(TASK_STATE_MAX << 0)
> +#define TASK_STATE_THROTTLED	(TASK_STATE_MAX << 1)
> +#define TASK_STATE_YIELDED	(TASK_STATE_MAX << 2)
> +
>  #ifdef CREATE_TRACE_POINTS
>  static inline long __trace_sched_switch_state(bool preempt, struct task_struct *p)
>  {
> +	long state = p->state;
> +
>  #ifdef CONFIG_SCHED_DEBUG
>  	BUG_ON(p != current);
>  #endif /* CONFIG_SCHED_DEBUG */
> @@ -114,10 +120,49 @@ static inline long __trace_sched_switch_state(bool preempt, struct task_struct *
>  	 * Preemption ignores task state, therefore preempted tasks are always
>  	 * RUNNING (we will not have dequeued if state != RUNNING).
>  	 */
> -	return preempt ? TASK_RUNNING | TASK_STATE_MAX : p->state;
> +	if (preempt) {
> +		state = TASK_RUNNING | TASK_STATE_MAX;
> +	} else if (dl_task(p)) {
> +		if (p->dl.dl_throttled)
> +			state |= TASK_STATE_THROTTLED;
> +		else if (p->dl.dl_yielded)
> +			state |= TASK_STATE_YIELDED;

These might want to be inverted, that is, yielded will have throttled
set, so yield should take precedence.

> +	}
> +
> +	return state;
>  }
>  #endif /* CREATE_TRACE_POINTS */
>  
> +#define __trace_sched_switch_fields(name)	do {			\
> +	__entry->name##_policy = name->policy;				\
> +	switch (name->policy) {						\

Sadly we cannot use policy, for that isn't updated on PI. The best we
can do is dl_task(), rt_task() else ...

> +	case SCHED_IDLE:						\

This doesn't have nice, so should go with default;

> +	case SCHED_BATCH:						\
> +	case SCHED_NORMAL:						\
> +		__entry->name##_f1 = PRIO_TO_NICE(name->static_prio);	\
> +		__entry->name##_f2 = 0;					\
> +		__entry->name##_f3 = 0;					\
> +		break;							\
> +	case SCHED_RR:							\
> +	case SCHED_FIFO:						\
> +		__entry->name##_f1 = USER_PRIO(name->normal_prio);	\
> +		__entry->name##_f2 = 0;					\
> +		__entry->name##_f3 = 0;					\
> +		break;							\
> +	case SCHED_DEADLINE:						\
> +		__entry->name##_f1 = name->dl.runtime;			\
> +		__entry->name##_f2 = name->dl.deadline;			\
> +		__entry->name##_f3 = name->dl.dl_period;		\
> +		break;							\
> +	default:							\
> +		__entry->name##_f1 = 0;					\
> +		__entry->name##_f2 = 0;					\
> +		__entry->name##_f3 = 0;					\
> +		break;							\
> +	}								\
> +} while (0)

  parent reply	other threads:[~2016-02-23 14:28 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-22 17:08 [PATCH 0/4] Tracepoints for deadline scheduler Daniel Bristot de Oliveira
2016-02-22 17:08 ` [PATCH 1/4] tracing: Add __print_ns_to_secs() and __print_ns_without_secs() helpers Daniel Bristot de Oliveira
2016-02-22 17:08 ` [PATCH 2/4] sched: Move deadline container_of() helper functions into sched.h Daniel Bristot de Oliveira
2016-02-22 17:08 ` [PATCH 3/4] sched/deadline: Tracepoints for deadline scheduler Daniel Bristot de Oliveira
2016-02-22 17:32   ` Peter Zijlstra
2016-02-22 17:48     ` Steven Rostedt
2016-02-22 20:11       ` Daniel Bristot de Oliveira
2016-02-22 21:30       ` Peter Zijlstra
2016-02-22 22:30         ` Steven Rostedt
2016-02-23 10:40           ` Juri Lelli
2016-02-23 10:44           ` Peter Zijlstra
2016-02-23 13:10             ` Steven Rostedt
2016-02-24  8:48               ` Ingo Molnar
2016-02-23 14:27             ` Peter Zijlstra [this message]
2016-02-23 16:19             ` Daniel Bristot de Oliveira
2016-02-24  2:29             ` Daniel Bristot de Oliveira
2016-02-22 17:48   ` kbuild test robot
2016-02-22 17:08 ` [PATCH 4/4] tools lib traceevent: Implements '%' operation Daniel Bristot de Oliveira
2016-02-22 20:23   ` Steven Rostedt
2016-02-23 14:38     ` Arnaldo Carvalho de Melo
2016-02-23 14:44       ` Arnaldo Carvalho de Melo
2016-02-25  5:41   ` [tip:perf/core] tools lib traceevent: Implement " tip-bot for Daniel Bristot de Oliveira

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=20160223142753.GR6375@twins.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=acme@redhat.com \
    --cc=bristot@redhat.com \
    --cc=juri.lelli@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rt-users@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    /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.