Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:GA
xen.4698
57ee6cbc-credit1-return-time-remaining-to-limit...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 57ee6cbc-credit1-return-time-remaining-to-limit-as-next-timeslice.patch of Package xen.4698
# Commit 0053127890ebe9cafbd232752636a15881e4915a # Date 2016-09-30 14:46:36 +0100 # Author Dario Faggioli <dario.faggioli@citrix.com> # Committer George Dunlap <george.dunlap@citrix.com> xen: credit1: return the 'time remaining to the limit' as next timeslice. If vcpu x has run for 200us, and sched_ratelimit_us is 1000us, continue running x _but_ return 1000us-200us as the next time slice. This way, next scheduling point will happen in 800us, i.e., exactly at the point when x crosses the threshold, and can be descheduled (if appropriate). Right now (without this patch), we're always returning sched_ratelimit_us (1000us, in the example above), which means we're (potentially) allowing x to run more than it should have been able to. Note that, however, in order to avoid setting timers to very short intervals, which is part of the purpose of rate limiting, we never use a time slice smaller than a well defined threshold. Such threshold (CSCHED_MIN_TIMER defined in this patch) is, in general independent from rate limiting, but it looks a good idea to set it to the minimum possible ratelimiting value. Signed-off-by: Dario Faggioli <dario.faggioli@citrix.com> Reviewed-by: George Dunlap <george.dunlap@citrix.com> --- a/xen/common/sched_credit.c +++ b/xen/common/sched_credit.c @@ -33,6 +33,8 @@ /* Default timeslice: 30ms */ #define CSCHED_DEFAULT_TSLICE_MS 30 #define CSCHED_CREDITS_PER_MSEC 10 +/* Never set a timer shorter than this value. */ +#define CSCHED_MIN_TIMER XEN_SYSCTL_SCHED_RATELIMIT_MIN /* @@ -1728,7 +1730,15 @@ csched_schedule( snext = scurr; snext->start_time += now; perfc_incr(delay_ms); - tslice = MICROSECS(prv->ratelimit_us); + /* + * Next timeslice must last just until we'll have executed for + * ratelimit_us. However, to avoid setting a really short timer, which + * will most likely be inaccurate and counterproductive, we never go + * below CSCHED_MIN_TIMER. + */ + tslice = MICROSECS(prv->ratelimit_us) - runtime; + if ( unlikely(runtime < CSCHED_MIN_TIMER) ) + tslice = CSCHED_MIN_TIMER; ret.migrated = 0; goto out; }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor