By applying this patch, the credit scheduler subtracts accurately credit
consumed and sets correctly priority.
CSCHED_CREDITS_PER_TICK is changed from 100 to 10000, because vcpu's
credit is subtracted in csched_schedule().
Best regards,
Naoki Nishiguchi
diff -r a00eb6595d3c xen/common/sched_credit.c
--- a/xen/common/sched_credit.c Sat Nov 29 09:07:52 2008 +0000
+++ b/xen/common/sched_credit.c Fri Dec 05 17:57:07 2008 +0900
@@ -42,7 +42,7 @@
#define CSCHED_MSECS_PER_TICK 10
#define CSCHED_MSECS_PER_TSLICE \
(CSCHED_MSECS_PER_TICK * CSCHED_TICKS_PER_TSLICE)
-#define CSCHED_CREDITS_PER_TICK 100
+#define CSCHED_CREDITS_PER_TICK 10000
#define CSCHED_CREDITS_PER_TSLICE \
(CSCHED_CREDITS_PER_TICK * CSCHED_TICKS_PER_TSLICE)
#define CSCHED_CREDITS_PER_ACCT \
@@ -201,6 +201,7 @@ struct csched_vcpu {
atomic_t credit;
uint16_t flags;
int16_t pri;
+ s_time_t start_time;
#ifdef CSCHED_STATS
struct {
int credit_last;
@@ -543,11 +544,6 @@ csched_vcpu_acct(unsigned int cpu)
*/
if ( svc->pri == CSCHED_PRI_TS_BOOST )
svc->pri = CSCHED_PRI_TS_UNDER;
-
- /*
- * Update credits
- */
- atomic_sub(CSCHED_CREDITS_PER_TICK, &svc->credit);
/*
* Put this VCPU and domain back on the active list if it was
@@ -1171,9 +1167,23 @@ csched_schedule(s_time_t now)
struct csched_vcpu * const scurr = CSCHED_VCPU(current);
struct csched_vcpu *snext;
struct task_slice ret;
+ s_time_t passed = now - scurr->start_time;
+ int consumed;
CSCHED_STAT_CRANK(schedule);
CSCHED_VCPU_CHECK(current);
+
+ /*
+ * Update credit
+ */
+ consumed = ( passed +
+ (MILLISECS(CSCHED_MSECS_PER_TSLICE) /
+ CSCHED_CREDITS_PER_TSLICE - 1)
+ ) /
+ ( MILLISECS(CSCHED_MSECS_PER_TSLICE) /
+ CSCHED_CREDITS_PER_TSLICE );
+ if ( consumed > 0 && !is_idle_vcpu(current) )
+ atomic_sub(consumed, &scurr->credit);
/*
* Select next runnable local VCPU (ie top of local runq)
@@ -1217,6 +1227,8 @@ csched_schedule(s_time_t now)
*/
ret.time = MILLISECS(CSCHED_MSECS_PER_TSLICE);
ret.task = snext->vcpu;
+
+ snext->start_time = now;
CSCHED_VCPU_CHECK(ret.task);
return ret;
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|