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:
Dario Faggioli authored and George Dunlap committed 2016-09-30 14:46:36 +01:00
1 parent 0053127890
commit 9fdd2f3c9c
1 file changed
+10 -3
+10 -3
View File
@@ -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)
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.