From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Petr Vorel <pvorel@suse.cz>
Cc: stable@vger.kernel.org, Cyril Hrubis <chrubis@suse.cz>,
Sasha Levin <sashal@kernel.org>, Ingo Molnar <mingo@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Mel Gorman <mgorman@suse.de>
Subject: Re: [PATCH 4.19 v2 1/3] sched/rt: Fix sysctl_sched_rr_timeslice intial value
Date: Fri, 23 Feb 2024 17:25:23 +0100 [thread overview]
Message-ID: <2024022318-define-geometry-06c9@gregkh> (raw)
In-Reply-To: <20240222170540.1375962-1-pvorel@suse.cz>
On Thu, Feb 22, 2024 at 06:05:38PM +0100, Petr Vorel wrote:
> From: Cyril Hrubis <chrubis@suse.cz>
>
> [ Upstream commit c7fcb99877f9f542c918509b2801065adcaf46fa ]
>
> There is a 10% rounding error in the intial value of the
> sysctl_sched_rr_timeslice with CONFIG_HZ_300=y.
>
> This was found with LTP test sched_rr_get_interval01:
>
> sched_rr_get_interval01.c:57: TPASS: sched_rr_get_interval() passed
> sched_rr_get_interval01.c:64: TPASS: Time quantum 0s 99999990ns
> sched_rr_get_interval01.c:72: TFAIL: /proc/sys/kernel/sched_rr_timeslice_ms != 100 got 90
> sched_rr_get_interval01.c:57: TPASS: sched_rr_get_interval() passed
> sched_rr_get_interval01.c:64: TPASS: Time quantum 0s 99999990ns
> sched_rr_get_interval01.c:72: TFAIL: /proc/sys/kernel/sched_rr_timeslice_ms != 100 got 90
>
> What this test does is to compare the return value from the
> sched_rr_get_interval() and the sched_rr_timeslice_ms sysctl file and
> fails if they do not match.
>
> The problem it found is the intial sysctl file value which was computed as:
>
> static int sysctl_sched_rr_timeslice = (MSEC_PER_SEC / HZ) * RR_TIMESLICE;
>
> which works fine as long as MSEC_PER_SEC is multiple of HZ, however it
> introduces 10% rounding error for CONFIG_HZ_300:
>
> (MSEC_PER_SEC / HZ) * (100 * HZ / 1000)
>
> (1000 / 300) * (100 * 300 / 1000)
>
> 3 * 30 = 90
>
> This can be easily fixed by reversing the order of the multiplication
> and division. After this fix we get:
>
> (MSEC_PER_SEC * (100 * HZ / 1000)) / HZ
>
> (1000 * (100 * 300 / 1000)) / 300
>
> (1000 * 30) / 300 = 100
>
> Fixes: 975e155ed873 ("sched/rt: Show the 'sched_rr_timeslice' SCHED_RR timeslice tuning knob in milliseconds")
> Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
> Reviewed-by: Petr Vorel <pvorel@suse.cz>
> Acked-by: Mel Gorman <mgorman@suse.de>
> Tested-by: Petr Vorel <pvorel@suse.cz>
> Link: https://lore.kernel.org/r/20230802151906.25258-2-chrubis@suse.cz
> [ pvorel: rebased for 4.19 ]
> Signed-off-by: Petr Vorel <pvorel@suse.cz>
> ---
> kernel/sched/rt.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
> index 394c66442cff..ce4594215728 100644
> --- a/kernel/sched/rt.c
> +++ b/kernel/sched/rt.c
> @@ -8,7 +8,7 @@
> #include "pelt.h"
>
> int sched_rr_timeslice = RR_TIMESLICE;
> -int sysctl_sched_rr_timeslice = (MSEC_PER_SEC / HZ) * RR_TIMESLICE;
> +int sysctl_sched_rr_timeslice = (MSEC_PER_SEC * RR_TIMESLICE) / HZ;
>
> static int do_sched_rt_period_timer(struct rt_bandwidth *rt_b, int overrun);
>
> --
> 2.35.3
>
>
All now queued up, thanks!
greg k-h
prev parent reply other threads:[~2024-02-23 16:25 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-22 17:05 [PATCH 4.19 v2 1/3] sched/rt: Fix sysctl_sched_rr_timeslice intial value Petr Vorel
2024-02-22 17:05 ` [PATCH 4.19 v2 2/3] sched/rt: sysctl_sched_rr_timeslice show default timeslice after reset Petr Vorel
2024-02-22 17:05 ` [PATCH 4.19 v2 3/3] sched/rt: Disallow writing invalid values to sched_rt_period_us Petr Vorel
2024-02-23 16:25 ` Greg Kroah-Hartman [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2024022318-define-geometry-06c9@gregkh \
--to=gregkh@linuxfoundation.org \
--cc=chrubis@suse.cz \
--cc=mgorman@suse.de \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=pvorel@suse.cz \
--cc=sashal@kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.