mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
sched: fix sleeper bonus limit
There is an Amarok song switch time increase (regression) under hefty load. What is happening is that sleeper_bonus is never consumed, and only rarely goes below runtime_limit, so for the most part, Amarok isn't getting any bonus at all. We're keeping sleeper_bonus right at runtime_limit (sched_latency == sched_runtime_limit == 40ms) forever, ie we don't consume if we're lower that that, and don't add if we're above it. One Amarok thread waking (or anybody else) will push us past the threshold, so the next thread waking gets nada, but will reap pain from the previous thread waking until we drop back to runtime_limit. It looks to me like under load, some random task gets a bonus, and everybody else pays, whether deserving or not. This diff fixed the regression for me at any load rate. Signed-off-by: Mike Galbraith <efault@gmx.de> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
This commit is contained in:
parent
b07d68b5ca
commit
5f01d519e6
1 changed files with 1 additions and 1 deletions
|
@ -354,7 +354,7 @@ __update_curr(struct cfs_rq *cfs_rq, struct sched_entity *curr)
|
|||
delta_fair = calc_delta_fair(delta_exec, lw);
|
||||
delta_mine = calc_delta_mine(delta_exec, curr->load.weight, lw);
|
||||
|
||||
if (cfs_rq->sleeper_bonus > sysctl_sched_latency) {
|
||||
if (cfs_rq->sleeper_bonus > sysctl_sched_min_granularity) {
|
||||
delta = min((u64)delta_mine, cfs_rq->sleeper_bonus);
|
||||
delta = min(delta, (unsigned long)(
|
||||
(long)sysctl_sched_runtime_limit - curr->wait_runtime));
|
||||
|
|
Loading…
Reference in a new issue