mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen: credit1: don't rate limit context switches in case of yields
Rate limiting has been primarily introduced to avoid too heavy context switch rate due to interrupts, and, in general, asynchronous events. If a vcpu "voluntarily" yields, we really should let it give up the cpu for a while. In fact, it may be that it is yielding because it's about to start spinning, and there's few point in forcing a vcpu to spin for (potentially) the entire rate-limiting period. Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com> Reviewed-by: George Dunlap <george.dunlap@citrix.com>
This commit is contained in:
1 parent
0053127890
commit
9fdd2f3c9c
1 file changed
+10
-3
@@ -1802,9 +1802,16 @@ csched_schedule(
|
||||
* cpu and steal it.
|
||||
*/
|
||||
|
||||
/* If we have schedule rate limiting enabled, check to see
|
||||
* how long we've run for. */
|
||||
if ( !tasklet_work_scheduled
|
||||
/*
|
||||
* If we have schedule rate limiting enabled, check to see
|
||||
* how long we've run for.
|
||||
*
|
||||
* If scurr is yielding, however, we don't let rate limiting kick in.
|
||||
* In fact, it may be the case that scurr is about to spin, and there's
|
||||
* no point forcing it to do so until rate limiting expires.
|
||||
*/
|
||||
if ( !test_bit(CSCHED_FLAG_VCPU_YIELD, &scurr->flags)
|
||||
&& !tasklet_work_scheduled
|
||||
&& prv->ratelimit_us
|
||||
&& vcpu_runnable(current)
|
||||
&& !is_idle_vcpu(current)
|
||||
|
||||