* [PATCH v2] credit1: track residual from divisions done during accounting
@ 2013-02-26 15:44 Jan Beulich
0 siblings, 0 replies; only message in thread
From: Jan Beulich @ 2013-02-26 15:44 UTC (permalink / raw)
To: xen-devel
[-- Attachment #1: Type: text/plain, Size: 1646 bytes --]
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@suse.com>
Acked-by: George Dunlap <george.dunlap@eu.citrix.com>
---
v2: Comment ASSERT() and drop credit2 portion upon George's request.
--- 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_v
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;
}
[-- Attachment #2: sched-credit1-residual.patch --]
[-- Type: text/plain, Size: 1705 bytes --]
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@suse.com>
Acked-by: George Dunlap <george.dunlap@eu.citrix.com>
---
v2: Comment ASSERT() and drop credit2 portion upon George's request.
--- 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_v
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;
}
[-- Attachment #3: Type: text/plain, Size: 126 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2013-02-26 15:44 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-02-26 15:44 [PATCH v2] credit1: track residual from divisions done during accounting Jan Beulich
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.