sched/rt: Show the 'sched_rr_timeslice' SCHED_RR timeslice tuning knob in milliseconds
authorShile Zhang <shile.zhang@nokia.com>
Sat, 28 Jan 2017 14:00:49 +0000 (22:00 +0800)
committerIngo Molnar <mingo@kernel.org>
Wed, 1 Feb 2017 10:01:30 +0000 (11:01 +0100)
We added the 'sched_rr_timeslice_ms' SCHED_RR tuning knob in this commit:

  ce0dbbbb30ae ("sched/rt: Add a tuning knob to allow changing SCHED_RR timeslice")

... which name suggests to users that it's in milliseconds, while in reality
it's being set in milliseconds but the result is shown in jiffies.

This is obviously confusing when HZ is not 1000, it makes it appear like the
value set failed, such as HZ=100:

  root# echo 100 > /proc/sys/kernel/sched_rr_timeslice_ms
  root# cat /proc/sys/kernel/sched_rr_timeslice_ms
  10

Fix this to be milliseconds all around.

Signed-off-by: Shile Zhang <shile.zhang@nokia.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/1485612049-20923-1-git-send-email-shile.zhang@nokia.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
include/linux/sched/sysctl.h
kernel/sched/core.c
kernel/sched/rt.c
kernel/sysctl.c

index 441145351301bc8b57454cc292cc810caf7b6413..49308e142aaeb1cd118336e13d6ebdc30fed75f2 100644 (file)
@@ -59,6 +59,7 @@ extern unsigned int sysctl_sched_cfs_bandwidth_slice;
 extern unsigned int sysctl_sched_autogroup_enabled;
 #endif
 
+extern int sysctl_sched_rr_timeslice;
 extern int sched_rr_timeslice;
 
 extern int sched_rr_handler(struct ctl_table *table, int write,
index d01f9d047397cea54b673b59617058ddaecdc3cb..10e18faaa632f8c44aa04faf5c932b144f8090c1 100644 (file)
@@ -8471,8 +8471,9 @@ int sched_rr_handler(struct ctl_table *table, int write,
        /* make sure that internally we keep jiffies */
        /* also, writing zero resets timeslice to default */
        if (!ret && write) {
-               sched_rr_timeslice = sched_rr_timeslice <= 0 ?
-                       RR_TIMESLICE : msecs_to_jiffies(sched_rr_timeslice);
+               sched_rr_timeslice =
+                       sysctl_sched_rr_timeslice <= 0 ? RR_TIMESLICE :
+                       msecs_to_jiffies(sysctl_sched_rr_timeslice);
        }
        mutex_unlock(&mutex);
        return ret;
index 704f2b89abf1978b18ec8667afb2a0868c8c8408..4101f9d1aa4065a0f29bd6a66bd298f9495aadd8 100644 (file)
@@ -9,6 +9,7 @@
 #include <linux/irq_work.h>
 
 int sched_rr_timeslice = RR_TIMESLICE;
+int sysctl_sched_rr_timeslice = (MSEC_PER_SEC / HZ) * RR_TIMESLICE;
 
 static int do_sched_rt_period_timer(struct rt_bandwidth *rt_b, int overrun);
 
index 1aea594a54dbdac604ca950fdaf93508e5b6e6a7..bb260ceb3718477fe1cce3c5690c42be4c30087e 100644 (file)
@@ -416,7 +416,7 @@ static struct ctl_table kern_table[] = {
        },
        {
                .procname       = "sched_rr_timeslice_ms",
-               .data           = &sched_rr_timeslice,
+               .data           = &sysctl_sched_rr_timeslice,
                .maxlen         = sizeof(int),
                .mode           = 0644,
                .proc_handler   = sched_rr_handler,