[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] credit1: track residual from divisions done during accounting
commit cf0c29d1a99f17fe9e501e4e09d9d1e3eced6f98 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Thu Feb 28 11:06:42 2013 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Thu Feb 28 11:06:42 2013 +0100 credit1: track residual from divisions done during accounting This should help with under-accounting of vCPU-s running for extremly short periods of time, but becoming runnable again at a high frequency. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx> --- xen/common/sched_credit.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-) diff --git a/xen/common/sched_credit.c b/xen/common/sched_credit.c index df2d076..7fbc005 100644 --- a/xen/common/sched_credit.c +++ b/xen/common/sched_credit.c @@ -19,6 +19,7 @@ #include <xen/sched-if.h> #include <xen/softirq.h> #include <asm/atomic.h> +#include <asm/div64.h> #include <xen/errno.h> #include <xen/keyhandler.h> #include <xen/trace.h> @@ -136,6 +137,7 @@ struct csched_vcpu { struct csched_dom *sdom; struct vcpu *vcpu; atomic_t credit; + unsigned int residual; s_time_t start_time; /* When we were scheduled (used for credit) */ uint16_t flags; int16_t pri; @@ -242,6 +244,7 @@ __runq_remove(struct csched_vcpu *svc) static void burn_credits(struct csched_vcpu *svc, s_time_t now) { s_time_t delta; + uint64_t val; unsigned int credits; /* Assert svc is current */ @@ -250,7 +253,10 @@ static void burn_credits(struct csched_vcpu *svc, s_time_t now) if ( (delta = now - svc->start_time) <= 0 ) return; - credits = (delta*CSCHED_CREDITS_PER_MSEC + MILLISECS(1)/2) / MILLISECS(1); + val = delta * CSCHED_CREDITS_PER_MSEC + svc->residual; + svc->residual = do_div(val, MILLISECS(1)); + credits = val; + ASSERT(credits == val); /* make sure we haven't truncated val */ atomic_sub(credits, &svc->credit); svc->start_time += (credits * MILLISECS(1)) / CSCHED_CREDITS_PER_MSEC; } -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |