From: Peter Zijlstra <peterz@infradead.org>
To: mingo@kernel.org, juri.lelli@redhat.com
Cc: linux-kernel@vger.kernel.org, dietmar.eggemann@arm.com,
luca.abeni@santannapisa.it, bristot@redhat.com,
balsini@android.com, dvyukov@google.com, tglx@linutronix.de,
vpillai@digitalocean.com, rostedt@goodmis.org,
peterz@infradead.org
Subject: [RFC][PATCH 13/13] sched/fair: Add trivial fair server
Date: Fri, 26 Jul 2019 16:54:22 +0200 [thread overview]
Message-ID: <20190726161358.113257053@infradead.org> (raw)
In-Reply-To: 20190726145409.947503076@infradead.org
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
kernel/sched/core.c | 6 +++++-
kernel/sched/deadline.c | 2 ++
kernel/sched/fair.c | 29 +++++++++++++++++++++++++++++
kernel/sched/sched.h | 6 +++++-
4 files changed, 41 insertions(+), 2 deletions(-)
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -6501,6 +6504,7 @@ void __init sched_init(void)
#endif /* CONFIG_SMP */
hrtick_rq_init(rq);
atomic_set(&rq->nr_iowait, 0);
+ fair_server_init(rq);
}
set_load_weight(&init_task, false);
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -5239,6 +5239,9 @@ enqueue_task_fair(struct rq *rq, struct
*/
util_est_enqueue(&rq->cfs, p);
+ if (!rq->cfs.h_nr_running)
+ dl_server_start(&rq->fair_server);
+
/*
* If in_iowait is set, the code below may not trigger any cpufreq
* utilization updates, so do it here explicitly with the IOWAIT flag
@@ -5374,6 +5377,9 @@ static void dequeue_task_fair(struct rq
if (!se)
sub_nr_running(rq, 1);
+ if (!rq->cfs.h_nr_running)
+ dl_server_stop(&rq->fair_server);
+
util_est_dequeue(&rq->cfs, p, task_sleep);
hrtick_update(rq);
}
@@ -6903,6 +6909,29 @@ done: __maybe_unused;
return NULL;
}
+static bool fair_server_has_tasks(struct sched_dl_entity *dl_se)
+{
+ return !!dl_se->rq->cfs.nr_running;
+}
+
+static struct task_struct *fair_server_pick(struct sched_dl_entity *dl_se)
+{
+ return pick_next_task_fair(dl_se->rq, NULL, NULL);
+}
+
+void fair_server_init(struct rq *rq)
+{
+ struct sched_dl_entity *dl_se = &rq->fair_server;
+
+ init_dl_entity(dl_se);
+
+ dl_se->dl_runtime = TICK_NSEC;
+ dl_se->dl_deadline = 20 * TICK_NSEC;
+ dl_se->dl_period = 20 * TICK_NSEC;
+
+ dl_server_init(dl_se, rq, fair_server_has_tasks, fair_server_pick);
+}
+
/*
* Account for a descheduled task:
*/
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -345,6 +345,8 @@ extern void dl_server_init(struct sched_
dl_server_has_tasks_f has_tasks,
dl_server_pick_f pick);
+extern void fair_server_init(struct rq *);
+
#ifdef CONFIG_CGROUP_SCHED
#include <linux/cgroup.h>
@@ -905,6 +907,8 @@ struct rq {
struct rt_rq rt;
struct dl_rq dl;
+ struct sched_dl_entity fair_server;
+
#ifdef CONFIG_FAIR_GROUP_SCHED
/* list of leaf cfs_rq on this CPU: */
struct list_head leaf_cfs_rq_list;
@@ -968,7 +972,7 @@ struct rq {
/* This is used to determine avg_idle's max value */
u64 max_idle_balance_cost;
-#endif
+#endif /* CONFIG_SMP */
#ifdef CONFIG_IRQ_TIME_ACCOUNTING
u64 prev_irq_time;
next prev parent reply other threads:[~2019-07-26 16:20 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-26 14:54 [RFC][PATCH 00/13] SCHED_DEADLINE server infrastructure Peter Zijlstra
2019-07-26 14:54 ` [RFC][PATCH 01/13] sched/deadline: Impose global limits on sched_attr::sched_period Peter Zijlstra
2019-07-29 8:57 ` Juri Lelli
2019-07-29 11:45 ` Daniel Bristot de Oliveira
2019-08-02 17:21 ` Alessio Balsini
2019-08-05 11:53 ` Peter Zijlstra
2019-08-22 12:29 ` Alessio Balsini
2019-08-22 16:51 ` Peter Zijlstra
2019-08-31 14:41 ` Alessio Balsini
2019-09-02 9:16 ` Peter Zijlstra
2019-09-02 12:31 ` Peter Zijlstra
2019-09-04 10:16 ` Steven Rostedt
2019-09-04 11:30 ` Peter Zijlstra
2019-09-04 13:24 ` Joel Fernandes
2019-09-04 14:11 ` Will Deacon
2019-09-04 14:35 ` Joel Fernandes
2019-09-04 15:52 ` Peter Zijlstra
2019-10-23 17:17 ` [PATCH 4.4 4.9 4.14] loop: Add LOOP_SET_DIRECT_IO to compat ioctl Alessio Balsini
2019-10-23 17:22 ` Alessio Balsini
2019-10-25 0:17 ` Sasha Levin
2020-05-20 18:38 ` [RFC][PATCH 01/13] sched/deadline: Impose global limits on sched_attr::sched_period Juri Lelli
2020-05-21 13:45 ` Daniel Bristot de Oliveira
2020-06-16 12:21 ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2019-07-26 14:54 ` [RFC][PATCH 02/13] stop_machine: Fix stop_cpus_in_progress ordering Peter Zijlstra
2019-07-30 13:16 ` Phil Auld
2019-07-30 13:22 ` Steven Rostedt
2019-07-26 14:54 ` [RFC][PATCH 03/13] sched: Fix kerneldoc comment for ia64_set_curr_task Peter Zijlstra
2019-07-26 14:54 ` [RFC][PATCH 04/13] sched/{rt,deadline}: Fix set_next_task vs pick_next_task Peter Zijlstra
2019-07-29 9:25 ` Juri Lelli
2019-07-29 11:15 ` Peter Zijlstra
2019-07-29 11:27 ` Juri Lelli
2019-07-29 13:04 ` Peter Zijlstra
2019-07-29 13:17 ` Juri Lelli
2019-07-29 14:40 ` Peter Zijlstra
2019-07-26 14:54 ` [RFC][PATCH 05/13] sched: Add task_struct pointer to sched_class::set_curr_task Peter Zijlstra
2019-07-26 14:54 ` [RFC][PATCH 06/13] sched/fair: Export newidle_balance() Peter Zijlstra
2019-07-26 14:54 ` [RFC][PATCH 07/13] sched: Allow put_prev_task() to drop rq->lock Peter Zijlstra
2019-07-26 14:54 ` [RFC][PATCH 08/13] sched: Rework pick_next_task() slow-path Peter Zijlstra
2019-07-26 14:54 ` [RFC][PATCH 09/13] sched: Unify runtime accounting across classes Peter Zijlstra
2019-07-26 14:54 ` [RFC][PATCH 10/13] sched/deadline: Collect sched_dl_entity initialization Peter Zijlstra
2019-07-26 14:54 ` [RFC][PATCH 11/13] sched/deadline: Move bandwidth accounting into {en,de}queue_dl_entity Peter Zijlstra
2019-07-26 14:54 ` [RFC][PATCH 12/13] sched/deadline: Introduce deadline servers Peter Zijlstra
2019-08-07 16:31 ` Dietmar Eggemann
2019-08-08 6:52 ` Juri Lelli
2019-08-08 7:52 ` Dietmar Eggemann
2019-08-08 7:56 ` Peter Zijlstra
2019-08-08 8:11 ` Dietmar Eggemann
2019-08-08 8:46 ` Juri Lelli
2019-08-08 8:57 ` Dietmar Eggemann
2019-08-08 9:27 ` Juri Lelli
2019-08-08 9:45 ` Juri Lelli
2019-08-30 11:24 ` Peter Zijlstra
2019-09-06 9:36 ` Juri Lelli
2019-08-08 10:31 ` Peter Zijlstra
2019-08-09 7:13 ` Juri Lelli
2019-08-08 6:59 ` Juri Lelli
2019-08-09 9:17 ` Dietmar Eggemann
2019-08-09 12:16 ` Juri Lelli
2019-07-26 14:54 ` Peter Zijlstra [this message]
2019-07-26 20:01 ` [RFC][PATCH 00/13] SCHED_DEADLINE server infrastructure luca abeni
2019-09-03 14:27 ` Alessio Balsini
2019-09-04 10:50 ` Juri Lelli
2019-09-04 11:32 ` Peter Zijlstra
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=20190726161358.113257053@infradead.org \
--to=peterz@infradead.org \
--cc=balsini@android.com \
--cc=bristot@redhat.com \
--cc=dietmar.eggemann@arm.com \
--cc=dvyukov@google.com \
--cc=juri.lelli@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luca.abeni@santannapisa.it \
--cc=mingo@kernel.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
--cc=vpillai@digitalocean.com \
/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.