From: Qais Yousef <qais.yousef@arm.com> To: Pavan Kondeti <pkondeti@codeaurora.org> Cc: Ingo Molnar <mingo@redhat.com>, Peter Zijlstra <peterz@infradead.org>, Steven Rostedt <rostedt@goodmis.org>, Dietmar Eggemann <dietmar.eggemann@arm.com>, Juri Lelli <juri.lelli@redhat.com>, Vincent Guittot <vincent.guittot@linaro.org>, Ben Segall <bsegall@google.com>, Mel Gorman <mgorman@suse.de>, linux-kernel@vger.kernel.org Subject: Re: [PATCH 3/3] sched/rt: fix pushing unfit tasks to a better CPU Date: Tue, 18 Feb 2020 17:47:19 +0000 [thread overview] Message-ID: <20200218174718.ma6cpr2qwnueertn@e107158-lin.cambridge.arm.com> (raw) In-Reply-To: <20200218041620.GD28029@codeaurora.org> On 02/18/20 09:46, Pavan Kondeti wrote: > The original RT task placement i.e without capacity awareness, places the task > on the previous CPU if the task can preempt the running task. I interpreted it > as that "higher prio RT" task should get better treatment even if it results > in stopping the lower prio RT execution and migrating it to another CPU. > > Now coming to your patch (merged), we force find_lowest_rq() if the previous > CPU can't fit the task though this task can right away run there. When the > lowest mask returns an unfit CPU (with your new patch), We have two choices, > either to place it on this unfit CPU (may involve migration) or place it on > the previous CPU to avoid the migration. We are selecting the first approach. > > The task_cpu(p) check in find_lowest_rq() only works when the previous CPU > does not have a RT task. If it is running a lower prio RT task than the > waking task, the lowest_mask may not contain the previous CPU. > > I don't if any workload hurts due to this change in behavior. So not sure > if we have to restore the original behavior. Something like below will do. Is this patch equivalent to yours? If yes, then I got you. If not, then I need to re-read this again.. diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c index ace9acf9d63c..854a0c9a7be6 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c @@ -1476,6 +1476,13 @@ select_task_rq_rt(struct task_struct *p, int cpu, int sd_flag, int flags) if (test || !rt_task_fits_capacity(p, cpu)) { int target = find_lowest_rq(p); + /* + * Bail out if we were forcing a migration to find a better + * fitting CPU but our search failed. + */ + if (!test && !rt_task_fits_capacity(p, target)) + goto out_unlock; + /* * Don't bother moving it if the destination CPU is * not running a lower priority task. @@ -1484,6 +1491,8 @@ select_task_rq_rt(struct task_struct *p, int cpu, int sd_flag, int flags) p->prio < cpu_rq(target)->rt.highest_prio.curr) cpu = target; } + +out_unlock: rcu_read_unlock(); out: > > diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c > index 4043abe..c80d948 100644 > --- a/kernel/sched/rt.c > +++ b/kernel/sched/rt.c > @@ -1475,11 +1475,15 @@ select_task_rq_rt(struct task_struct *p, int cpu, int sd_flag, int flags) > int target = find_lowest_rq(p); > > /* > - * Don't bother moving it if the destination CPU is > - * not running a lower priority task. > + * Don't bother moving it > + * > + * - If the destination CPU is not running a lower priority task > + * - The task can't fit on the destination CPU and it can run > + * right away on it's previous CPU. > */ > - if (target != -1 && > - p->prio < cpu_rq(target)->rt.highest_prio.curr) > + if (target != -1 && target != cpu && > + p->prio < cpu_rq(target)->rt.highest_prio.curr && > + (test || rt_task_fits_capacity(p, target))) > cpu = target; > } > rcu_read_unlock(); > > Thanks, > Pavan > > -- > Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc. > Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
next prev parent reply other threads:[~2020-02-18 17:47 UTC|newest] Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-02-14 16:39 [PATCH 0/3] RT Capacity Awareness Improvements Qais Yousef 2020-02-14 16:39 ` [PATCH 1/3] sched/rt: cpupri_find: implement fallback mechanism for !fit case Qais Yousef 2020-02-17 17:07 ` Valentin Schneider 2020-02-17 23:34 ` Qais Yousef 2020-02-18 10:01 ` Valentin Schneider 2020-02-17 19:09 ` Dietmar Eggemann 2020-02-17 23:45 ` Qais Yousef 2020-02-18 9:53 ` Dietmar Eggemann 2020-02-18 17:28 ` Qais Yousef 2020-02-18 16:46 ` Steven Rostedt 2020-02-18 17:27 ` Qais Yousef 2020-02-18 18:03 ` Steven Rostedt 2020-02-18 18:52 ` Qais Yousef 2020-02-14 16:39 ` [PATCH 2/3] sched/rt: allow pulling unfitting task Qais Yousef 2020-02-17 9:10 ` Pavan Kondeti 2020-02-17 11:20 ` Qais Yousef 2020-02-19 13:43 ` Qais Yousef 2020-02-21 8:07 ` Pavan Kondeti 2020-02-21 11:08 ` Qais Yousef 2020-02-14 16:39 ` [PATCH 3/3] sched/rt: fix pushing unfit tasks to a better CPU Qais Yousef 2020-02-17 9:23 ` Pavan Kondeti 2020-02-17 13:53 ` Qais Yousef 2020-02-18 4:16 ` Pavan Kondeti 2020-02-18 17:47 ` Qais Yousef [this message] 2020-02-19 2:46 ` Pavan Kondeti 2020-02-19 10:46 ` Qais Yousef 2020-02-19 14:02 ` Qais Yousef 2020-02-21 8:15 ` Pavan Kondeti 2020-02-21 11:12 ` Qais Yousef
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=20200218174718.ma6cpr2qwnueertn@e107158-lin.cambridge.arm.com \ --to=qais.yousef@arm.com \ --cc=bsegall@google.com \ --cc=dietmar.eggemann@arm.com \ --cc=juri.lelli@redhat.com \ --cc=linux-kernel@vger.kernel.org \ --cc=mgorman@suse.de \ --cc=mingo@redhat.com \ --cc=peterz@infradead.org \ --cc=pkondeti@codeaurora.org \ --cc=rostedt@goodmis.org \ --cc=vincent.guittot@linaro.org \ --subject='Re: [PATCH 3/3] sched/rt: fix pushing unfit tasks to a better CPU' \ /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
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).