lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Sat, 24 Sep 2016 13:28:51 +0000 (UTC)
From:   Mathieu Desnoyers <mathieu.desnoyers@...icios.com>
To:     Julien Desfossez <jdesfossez@...icios.com>
Cc:     Peter Zijlstra <peterz@...radead.org>,
        Thomas Gleixner <tglx@...utronix.de>,
        rostedt <rostedt@...dmis.org>, Ingo Molnar <mingo@...hat.com>,
        daolivei <daolivei@...hat.com>,
        linux-kernel <linux-kernel@...r.kernel.org>
Subject: Re: [RFC PATCH v2 5/5] tracing: add sched_update_prio

----- On Sep 23, 2016, at 12:49 PM, Julien Desfossez jdesfossez@...icios.com wrote:

> This tracepoint allows to keep track of all explicit priority changes of
> a task. It outputs the scheduling policy, the nice value, the
> rt_priority and the deadline-related attributes (dl_runtime, dl_deadline
> and dl_period).
> 
> It is emitted in the code path of the sched_setscheduler, sched_setattr,
> sched_setparam, and nice system calls.
> 
> This allows the analysis of real-time scheduling delays based on the
> configured scheduling priorities and policies, which cannot be performed
> with the current instrumentation in sched_switch. Also, instead of
> exposing the internal kernel prio field, this tracepoint only outputs
> the user-visible priority attributes.
> 
> The effective priority of running threads can also be temporarily
> changed in the PI code, but a dedicated tracepoint is already in place
> to cover this case.
> 
> Here are a few output examples:
> After fork of a normal task:
> sched_update_prio: comm=bash pid=2104, policy=SCHED_NORMAL, nice=0,
>	rt_priority=0, dl_runtime=0, dl_deadline=0, dl_period=0
> 
> renice -n 10 of a normal task:
> sched_update_prio: comm=sleep pid=2130, policy=SCHED_NORMAL, nice=10,
>	rt_priority=0, dl_runtime=0, dl_deadline=0, dl_period=0
> 
> SCHED_FIFO 60:
> sched_update_prio: comm=chrt pid=2105, policy=SCHED_FIFO, nice=0,
>	rt_priority=60, dl_runtime=0, dl_deadline=0, dl_period=0
> 
> SCHED_RR 60:
> sched_update_prio: comm=chrt pid=2109, policy=SCHED_RR, nice=0,
>	rt_priority=60, dl_runtime=0, dl_deadline=0, dl_period=0
> 
> SCHED_DEADLINE:
> sched_update_prio: comm=b pid=2110, policy=SCHED_DEADLINE, nice=0,
>	rt_priority=0, dl_runtime=10000000, dl_deadline=30000000,
>	dl_period=30000000
> 
> Cc: Peter Zijlstra <peterz@...radead.org>
> Cc: Steven Rostedt (Red Hat) <rostedt@...dmis.org>
> Cc: Thomas Gleixner <tglx@...utronix.de>
> Cc: Ingo Molnar <mingo@...hat.com>
> Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@...icios.com>
> Signed-off-by: Julien Desfossez <jdesfossez@...icios.com>
> ---
> include/trace/events/sched.h | 68 ++++++++++++++++++++++++++++++++++++++++++++
> kernel/sched/core.c          |  3 ++
> 2 files changed, 71 insertions(+)
> 
> diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h
> index 582357d..8d3343b 100644
> --- a/include/trace/events/sched.h
> +++ b/include/trace/events/sched.h
> @@ -8,6 +8,34 @@
> #include <linux/tracepoint.h>
> #include <linux/binfmts.h>
> 
> +#define SCHEDULING_POLICY				\
> +	EM( SCHED_NORMAL,	"SCHED_NORMAL")		\
> +	EM( SCHED_FIFO,		"SCHED_FIFO")		\
> +	EM( SCHED_RR,		"SCHED_RR")		\
> +	EM( SCHED_BATCH,	"SCHED_BATCH")		\
> +	EM( SCHED_IDLE,		"SCHED_IDLE")		\
> +	EMe(SCHED_DEADLINE,	"SCHED_DEADLINE")
> +

As spotted by the build bot, you should either move this
definition to patch 3/5 (which requires it), or reorder your
patchset to put this patch before the two that require it.

> +/*
> + * First define the enums in the above macros to be exported to userspace
> + * via TRACE_DEFINE_ENUM().
> + */
> +#undef EM
> +#undef EMe
> +#define EM(a, b)	TRACE_DEFINE_ENUM(a);
> +#define EMe(a, b)	TRACE_DEFINE_ENUM(a);
> +
> +SCHEDULING_POLICY
> +
> +/*
> + * Now redefine the EM() and EMe() macros to map the enums to the strings
> + * that will be printed in the output.
> + */
> +#undef EM
> +#undef EMe
> +#define EM(a, b)	{a, b},
> +#define EMe(a, b)	{a, b}
> +

Thanks,

Mathieu

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ