From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nate Studer Subject: Re: [Patch] credit: Update other parameters when setting tslice_ms Date: Fri, 15 Nov 2013 07:23:52 -0500 Message-ID: <52861258.3080400@dornerworks.com> References: <1384379389-3661-1-git-send-email-nate.studer@dornerworks.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1384379389-3661-1-git-send-email-nate.studer@dornerworks.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: Dario Faggioli List-Id: xen-devel@lists.xenproject.org CC'ing Dario, so that he has a message to reply to. On 11/13/2013 4:49 PM, Nathan Studer wrote: > From: Nate Studer > > Add a utility function to update the rest of the timeslice > accounting fields when updating the timeslice of the > credit scheduler, so that capped CPUs behave correctly. > > Before this patch changing the timeslice to a value higher > than the default would result in a domain not utilizing > its full capacity and changing the timeslice to a value > lower than the default would result in a domain exceeding > its capacity. > > Signed-off-by: Nate Studer > --- > xen/common/sched_credit.c | 20 +++++++++++++------- > 1 file changed, 13 insertions(+), 7 deletions(-) > mode change 100644 => 100755 xen/common/sched_credit.c > > diff --git a/xen/common/sched_credit.c b/xen/common/sched_credit.c > old mode 100644 > new mode 100755 > index 28dafcf..db5512e > --- a/xen/common/sched_credit.c > +++ b/xen/common/sched_credit.c > @@ -1071,6 +1071,17 @@ csched_dom_cntl( > return 0; > } > > +static inline void > +__csched_set_tslice(struct csched_private *prv, unsigned timeslice) > +{ > + prv->tslice_ms = timeslice; > + prv->ticks_per_tslice = CSCHED_TICKS_PER_TSLICE; > + if ( prv->tslice_ms < prv->ticks_per_tslice ) > + prv->ticks_per_tslice = 1; > + prv->tick_period_us = prv->tslice_ms * 1000 / prv->ticks_per_tslice; > + prv->credits_per_tslice = CSCHED_CREDITS_PER_MSEC * prv->tslice_ms; > +} > + > static int > csched_sys_cntl(const struct scheduler *ops, > struct xen_sysctl_scheduler_op *sc) > @@ -1089,7 +1100,7 @@ csched_sys_cntl(const struct scheduler *ops, > || params->ratelimit_us < XEN_SYSCTL_SCHED_RATELIMIT_MIN)) > || MICROSECS(params->ratelimit_us) > MILLISECS(params->tslice_ms) ) > goto out; > - prv->tslice_ms = params->tslice_ms; > + __csched_set_tslice(prv, params->tslice_ms); > prv->ratelimit_us = params->ratelimit_us; > /* FALLTHRU */ > case XEN_SYSCTL_SCHEDOP_getinfo: > @@ -1899,12 +1910,7 @@ csched_init(struct scheduler *ops) > sched_credit_tslice_ms = CSCHED_DEFAULT_TSLICE_MS; > } > > - prv->tslice_ms = sched_credit_tslice_ms; > - prv->ticks_per_tslice = CSCHED_TICKS_PER_TSLICE; > - if ( prv->tslice_ms < prv->ticks_per_tslice ) > - prv->ticks_per_tslice = 1; > - prv->tick_period_us = prv->tslice_ms * 1000 / prv->ticks_per_tslice; > - prv->credits_per_tslice = CSCHED_CREDITS_PER_MSEC * prv->tslice_ms; > + __csched_set_tslice(prv, sched_credit_tslice_ms); > > if ( MICROSECS(sched_ratelimit_us) > MILLISECS(sched_credit_tslice_ms) ) > { >