[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] [XEN] Fix credit scheduler cap mechanism not to over park VCPUs
# HG changeset patch # User Emmanuel Ackaouy <ack@xxxxxxxxxxxxx> # Node ID 9a4274724794681f31ab1191700203c879bd9387 # Parent 46fad06ab0b3fee5ab6441912f239a82f04bec74 [XEN] Fix credit scheduler cap mechanism not to over park VCPUs We used to park a capped VCPU when it had ran its fair share, even if the fair share was below its cap. With this change, make sure we only park once a VCPU has overrun its actual cap. We could also try to make the capping mechanism more accurate by parking and unparking at a finer granularity (currently done on 30ms boundaries) but that'll be for a different time. Signed-off-by: Emmanuel Ackaouy <ack@xxxxxxxxxxxxx> --- xen/common/sched_credit.c | 14 +++++++++----- 1 files changed, 9 insertions(+), 5 deletions(-) diff -r 46fad06ab0b3 -r 9a4274724794 xen/common/sched_credit.c --- a/xen/common/sched_credit.c Wed Nov 01 18:48:57 2006 +0000 +++ b/xen/common/sched_credit.c Wed Nov 01 19:44:34 2006 +0000 @@ -721,6 +721,7 @@ csched_acct(void) uint32_t weight_left; uint32_t credit_fair; uint32_t credit_peak; + uint32_t credit_cap; int credit_balance; int credit_xtra; int credit; @@ -751,6 +752,7 @@ csched_acct(void) weight_left = weight_total; credit_balance = 0; credit_xtra = 0; + credit_cap = 0U; list_for_each_safe( iter_sdom, next_sdom, &csched_priv.active_sdom ) { @@ -778,13 +780,15 @@ csched_acct(void) (weight_total - 1) ) / weight_total; } + if ( sdom->cap != 0U ) { - uint32_t credit_cap; - credit_cap = ((sdom->cap * CSCHED_CREDITS_PER_ACCT) + 99) / 100; if ( credit_cap < credit_peak ) credit_peak = credit_cap; + + credit_cap = ( credit_cap + ( sdom->active_vcpu_count - 1 ) + ) / sdom->active_vcpu_count; } credit_fair = ( ( credit_total * sdom->weight) + (weight_total - 1) @@ -840,10 +844,10 @@ csched_acct(void) */ if ( credit < 0 ) { - if ( sdom->cap == 0U ) + if ( sdom->cap != 0U && credit < -credit_cap ) + svc->pri = CSCHED_PRI_TS_PARKED; + else svc->pri = CSCHED_PRI_TS_OVER; - else - svc->pri = CSCHED_PRI_TS_PARKED; if ( credit < -CSCHED_CREDITS_PER_TSLICE ) { _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |