From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758165AbcIXN2J (ORCPT ); Sat, 24 Sep 2016 09:28:09 -0400 Received: from mail.efficios.com ([167.114.142.141]:59210 "EHLO mail.efficios.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751900AbcIXN2I (ORCPT ); Sat, 24 Sep 2016 09:28:08 -0400 Date: Sat, 24 Sep 2016 13:28:51 +0000 (UTC) From: Mathieu Desnoyers To: Julien Desfossez Cc: Peter Zijlstra , Thomas Gleixner , rostedt , Ingo Molnar , daolivei , linux-kernel Message-ID: <887136036.31284.1474723731191.JavaMail.zimbra@efficios.com> In-Reply-To: <1474649375-28056-6-git-send-email-jdesfossez@efficios.com> References: <1474649375-28056-1-git-send-email-jdesfossez@efficios.com> <1474649375-28056-6-git-send-email-jdesfossez@efficios.com> Subject: Re: [RFC PATCH v2 5/5] tracing: add sched_update_prio MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [167.114.142.141] X-Mailer: Zimbra 8.7.0_GA_1659 (ZimbraWebClient - FF45 (Linux)/8.7.0_GA_1659) Thread-Topic: tracing: add sched_update_prio Thread-Index: 8zYNrMOPrWqzYX/JCwHEndf38T/7kQ== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ----- On Sep 23, 2016, at 12:49 PM, Julien Desfossez jdesfossez@efficios.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 > Cc: Steven Rostedt (Red Hat) > Cc: Thomas Gleixner > Cc: Ingo Molnar > Reviewed-by: Mathieu Desnoyers > Signed-off-by: Julien Desfossez > --- > 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 > #include > > +#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