All of lore.kernel.org
 help / color / mirror / Atom feed
From: Clark Williams <williams@redhat.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Peter Zijlstra <peterz@infradead.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>
Subject: Re: [PATCH] sched: add a tuning knob to allow changing RR tmeslice
Date: Wed, 23 Jan 2013 14:46:46 -0600	[thread overview]
Message-ID: <20130123144646.6221097e@redhat.com> (raw)
In-Reply-To: <1358971778.21576.122.camel@gandalf.local.home>

[-- Attachment #1: Type: text/plain, Size: 4585 bytes --]

On Wed, 23 Jan 2013 15:09:38 -0500
Steven Rostedt <rostedt@goodmis.org> wrote:

> On Thu, 2012-11-08 at 14:27 -0600, Clark Williams wrote:
> > Subject: [PATCH] sched: add a tuning knob to allow changing RR timeslice
> > 
> > User wanted a facility simliar to the ability on Solaris to adjust
> > the SCHED_RR timeslice value. Add a /proc/sys/kernel scheduler knob
> > named sched_rr_timeslice_ms which allows global changing of the SCHED_RR
> > timeslice value. User visable value is in milliseconds but is stored as
> > jiffies.  Setting to 0 (zero) resets to the default (currently 100ms).
> > 
> 
> Hmm, has this been ignored?
> 
> I guess the real question, is it still needed (or wanted)?
> 

Yes, we've got a couple of customers that have been asking for it. 

> -- Steve
> 
> > Patch against tip/master, currently 3.7-rc3.
> > 
> > Signed-off-by: Clark Williams <williams@redhat.com>
> > ---
> >  include/linux/sched.h |  6 +++++-
> >  kernel/sched.c        | 19 +++++++++++++++++++
> >  kernel/sched_rt.c     |  4 ++--
> >  kernel/sysctl.c       |  8 ++++++++
> >  4 files changed, 34 insertions(+), 3 deletions(-)
> > 
> > diff --git a/include/linux/sched.h b/include/linux/sched.h
> > index 12317b6..214bf27 100644
> > --- a/include/linux/sched.h
> > +++ b/include/linux/sched.h
> > @@ -2097,11 +2097,15 @@ static inline unsigned int get_sysctl_timer_migration(void)
> >  #endif
> >  extern unsigned int sysctl_sched_rt_period;
> >  extern int sysctl_sched_rt_runtime;
> > -
> >  int sched_rt_handler(struct ctl_table *table, int write,
> >  		void __user *buffer, size_t *lenp,
> >  		loff_t *ppos);
> >  
> > +extern int sched_rr_timeslice;
> > +extern int sched_rr_handler(struct ctl_table *table, int write,
> > +		void __user *buffer, size_t *lenp,
> > +		loff_t *ppos);
> > +
> >  #ifdef CONFIG_SCHED_AUTOGROUP
> >  extern unsigned int sysctl_sched_autogroup_enabled;
> >  
> > diff --git a/kernel/sched.c b/kernel/sched.c
> > index cdf9484..c63c3a4 100644
> > --- a/kernel/sched.c
> > +++ b/kernel/sched.c
> > @@ -120,6 +120,7 @@
> >   * Timeslices get refilled after they expire.
> >   */
> >  #define DEF_TIMESLICE		(100 * HZ / 1000)
> > +int sched_rr_timeslice = DEF_TIMESLICE;
> >  
> >  /*
> >   * single value that denotes runtime == period, ie unlimited time.
> > @@ -9614,6 +9615,24 @@ static int sched_rt_global_constraints(void)
> >  }
> >  #endif /* CONFIG_RT_GROUP_SCHED */
> >  
> > +int sched_rr_handler(struct ctl_table *table, int write,
> > +		void __user *buffer, size_t *lenp,
> > +		loff_t *ppos)
> > +{
> > +	int ret;
> > +	static DEFINE_MUTEX(mutex);
> > +
> > +	mutex_lock(&mutex);
> > +	ret = proc_dointvec(table, write, buffer, lenp, ppos);
> > +	/* make sure that internally we keep jiffies */
> > +	/* also, writing zero resets timeslice to default */
> > +	if (!ret && write) 
> > +		sched_rr_timeslice = sched_rr_timeslice <= 0 ? 
> > +			DEF_TIMESLICE : msecs_to_jiffies(sched_rr_timeslice);
> > +	mutex_unlock(&mutex);
> > +	return ret;
> > +}
> > +
> >  int sched_rt_handler(struct ctl_table *table, int write,
> >  		void __user *buffer, size_t *lenp,
> >  		loff_t *ppos)
> > diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c
> > index c108b9c..799dd09 100644
> > --- a/kernel/sched_rt.c
> > +++ b/kernel/sched_rt.c
> > @@ -1791,7 +1791,7 @@ static void task_tick_rt(struct rq *rq, struct task_struct *p, int queued)
> >  	if (--p->rt.time_slice)
> >  		return;
> >  
> > -	p->rt.time_slice = DEF_TIMESLICE;
> > +	p->rt.time_slice = sched_rr_timeslice;
> >  
> >  	/*
> >  	 * Requeue to the end of queue if we are not the only element
> > @@ -1819,7 +1819,7 @@ static unsigned int get_rr_interval_rt(struct rq *rq, struct task_struct *task)
> >  	 * Time slice is 0 for SCHED_FIFO tasks
> >  	 */
> >  	if (task->policy == SCHED_RR)
> > -		return DEF_TIMESLICE;
> > +		return sched_rr_timeslice;
> >  	else
> >  		return 0;
> >  }
> > diff --git a/kernel/sysctl.c b/kernel/sysctl.c
> > index ea7ec7f..10b1129 100644
> > --- a/kernel/sysctl.c
> > +++ b/kernel/sysctl.c
> > @@ -362,6 +362,14 @@ static struct ctl_table kern_table[] = {
> >  		.mode		= 0644,
> >  		.proc_handler	= sched_rt_handler,
> >  	},
> > +	{
> > +		.procname	= "sched_rr_timeslice_ms",
> > +		.data		= &sched_rr_timeslice,
> > +		.maxlen		= sizeof(int),
> > +		.mode		= 0644,
> > +		.proc_handler	= sched_rr_handler,
> > +	},
> > +
> >  #ifdef CONFIG_SCHED_AUTOGROUP
> >  	{
> >  		.procname	= "sched_autogroup_enabled",
> 
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

      reply	other threads:[~2013-01-23 20:47 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-08 20:27 [PATCH] sched: add a tuning knob to allow changing RR tmeslice Clark Williams
2013-01-23 20:09 ` Steven Rostedt
2013-01-23 20:46   ` Clark Williams [this message]

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=20130123144646.6221097e@redhat.com \
    --to=williams@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=peterz@infradead.org \
    --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.