mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
[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@xensource.com>
This commit is contained in:
1 parent
8f84664335
commit
c62ecba43f
1 file changed
+9
-5
@@ -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 )
|
||||
svc->pri = CSCHED_PRI_TS_OVER;
|
||||
else
|
||||
if ( sdom->cap != 0U && credit < -credit_cap )
|
||||
svc->pri = CSCHED_PRI_TS_PARKED;
|
||||
else
|
||||
svc->pri = CSCHED_PRI_TS_OVER;
|
||||
|
||||
if ( credit < -CSCHED_CREDITS_PER_TSLICE )
|
||||
{
|
||||
|
||||