lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <152629550328.178124.4904326637886063654.stgit@buzz>
Date:   Mon, 14 May 2018 13:58:23 +0300
From:   Konstantin Khlebnikov <khlebnikov@...dex-team.ru>
To:     Peter Zijlstra <peterz@...radead.org>,
        Ingo Molnar <mingo@...hat.com>, linux-kernel@...r.kernel.org
Cc:     Ben Segall <bsegall@...gle.com>
Subject: [PATCH] sched: refill quota for current period when refilling timer
 activates

Period timer deactivates if task group has no activity during past period,
i.e. if were no throttle and runtime from global pool weren't consumed.
When timer activates back global pool contains unpredictable amount of
expired runtime allocated long ago. In some cases this works fine and
task could use it until next refill. But series short execution slices
could drain all that leftovers because each switch expires local poll.
In this case task group will be throttled until quota refill.

This patch refills quota right at the moment of timer's activation.

Signed-off-by: Konstantin Khlebnikov <khlebnikov@...dex-team.ru>
---
 kernel/sched/fair.c |    2 ++
 1 file changed, 2 insertions(+)

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 79f574dba096..b8d73ed17ff6 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -5165,6 +5165,8 @@ void start_cfs_bandwidth(struct cfs_bandwidth *cfs_b)
 
 	if (!cfs_b->period_active) {
 		cfs_b->period_active = 1;
+		/* refill quota for current period after inactivity */
+		__refill_cfs_bandwidth_runtime(cfs_b);
 		hrtimer_forward_now(&cfs_b->period_timer, cfs_b->period);
 		hrtimer_start_expires(&cfs_b->period_timer, HRTIMER_MODE_ABS_PINNED);
 	}

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ