From 3546d2ead1e44e7bbae3615245ba11e98d7baf46 Mon Sep 17 00:00:00 2001 From: Clark Williams Date: Thu, 7 Feb 2013 09:47:04 -0600 Subject: [PATCH] --- yaml --- r: 350143 b: refs/heads/master c: ce0dbbbb30aee6a835511d5be446462388ba9eee h: refs/heads/master i: 350141: f627f7fe7424e04bdda9691fd3886fe8fc05391e 350139: 414d94af5248d57c91136568938b57da76666176 350135: fc0c46953713ba14ac97589cacf06e40d84a32e7 350127: 4f15255b18867c395e958516d614f755e0b68a3b 350111: 5237ada4fe6dea492c3dafa7522ab836b270643c 350079: d406930bb4190f5ee38efa5f5aa031e74c5c6b9c v: v3 --- [refs] | 2 +- trunk/include/linux/sched/sysctl.h | 15 ++++++++++++++- trunk/kernel/sched/core.c | 19 +++++++++++++++++++ trunk/kernel/sched/rt.c | 6 ++++-- trunk/kernel/sysctl.c | 7 +++++++ 5 files changed, 45 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 8a5f792b1f32..aed264bcd05c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: cf4aebc292fac7f34f8345664320e9d4a42ca76c +refs/heads/master: ce0dbbbb30aee6a835511d5be446462388ba9eee diff --git a/trunk/include/linux/sched/sysctl.h b/trunk/include/linux/sched/sysctl.h index bac914e458ca..d2bb0ae979d0 100644 --- a/trunk/include/linux/sched/sysctl.h +++ b/trunk/include/linux/sched/sysctl.h @@ -73,6 +73,13 @@ static inline unsigned int get_sysctl_timer_migration(void) return 1; } #endif + +/* + * control realtime throttling: + * + * /proc/sys/kernel/sched_rt_period_us + * /proc/sys/kernel/sched_rt_runtime_us + */ extern unsigned int sysctl_sched_rt_period; extern int sysctl_sched_rt_runtime; @@ -90,7 +97,13 @@ extern unsigned int sysctl_sched_autogroup_enabled; */ #define RR_TIMESLICE (100 * HZ / 1000) -int sched_rt_handler(struct ctl_table *table, int write, +extern int sched_rr_timeslice; + +extern int sched_rr_handler(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, + loff_t *ppos); + +extern int sched_rt_handler(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos); diff --git a/trunk/kernel/sched/core.c b/trunk/kernel/sched/core.c index 1dff78a9e2ab..4a88f1d51563 100644 --- a/trunk/kernel/sched/core.c +++ b/trunk/kernel/sched/core.c @@ -7509,6 +7509,25 @@ static int sched_rt_global_constraints(void) } #endif /* CONFIG_RT_GROUP_SCHED */ +int sched_rr_handler(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, + loff_t *ppos) +{ + int ret; + static DEFINE_MUTEX(mutex); + + mutex_lock(&mutex); + ret = proc_dointvec(table, write, buffer, lenp, ppos); + /* 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); + } + mutex_unlock(&mutex); + return ret; +} + int sched_rt_handler(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) diff --git a/trunk/kernel/sched/rt.c b/trunk/kernel/sched/rt.c index c25de141c576..fb0f77e402b6 100644 --- a/trunk/kernel/sched/rt.c +++ b/trunk/kernel/sched/rt.c @@ -7,6 +7,8 @@ #include +int sched_rr_timeslice = RR_TIMESLICE; + static int do_sched_rt_period_timer(struct rt_bandwidth *rt_b, int overrun); struct rt_bandwidth def_rt_bandwidth; @@ -2016,7 +2018,7 @@ static void task_tick_rt(struct rq *rq, struct task_struct *p, int queued) if (--p->rt.time_slice) return; - p->rt.time_slice = RR_TIMESLICE; + p->rt.time_slice = sched_rr_timeslice; /* * Requeue to the end of queue if we (and all of our ancestors) are the @@ -2047,7 +2049,7 @@ static unsigned int get_rr_interval_rt(struct rq *rq, struct task_struct *task) * Time slice is 0 for SCHED_FIFO tasks */ if (task->policy == SCHED_RR) - return RR_TIMESLICE; + return sched_rr_timeslice; else return 0; } diff --git a/trunk/kernel/sysctl.c b/trunk/kernel/sysctl.c index 7357e23aaf68..4fc9be955c71 100644 --- a/trunk/kernel/sysctl.c +++ b/trunk/kernel/sysctl.c @@ -404,6 +404,13 @@ static struct ctl_table kern_table[] = { .mode = 0644, .proc_handler = sched_rt_handler, }, + { + .procname = "sched_rr_timeslice_ms", + .data = &sched_rr_timeslice, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = sched_rr_handler, + }, #ifdef CONFIG_SCHED_AUTOGROUP { .procname = "sched_autogroup_enabled",