From: Gregory Haskins <ghaskins@novell.com> To: mingo@elte.hu Cc: srostedt@redhat.com, peterz@infradead.org, linux-kernel@vger.kernel.org, linux-rt-users@vger.kernel.org, npiggin@suse.de, gregory.haskins@gmail.com Subject: [PATCH v2 2/6] sched: pull only one task during NEWIDLE balancing to limit critical section Date: Tue, 26 Aug 2008 13:34:54 -0400 [thread overview] Message-ID: <20080826173454.16413.10021.stgit@dev.haskins.net> (raw) In-Reply-To: <20080826173131.16413.17862.stgit@dev.haskins.net> git-id c4acb2c0669c5c5c9b28e9d02a34b5c67edf7092 attempted to limit newidle critical section length by stopping after at least one task was moved. Further investigation has shown that there are other paths nested further inside the algorithm which still remain that allow long latencies to occur with newidle balancing. This patch applies the same technique inside balance_tasks() to limit the duration of this optional balancing operation. Signed-off-by: Gregory Haskins <ghaskins@novell.com> CC: Nick Piggin <npiggin@suse.de> --- kernel/sched.c | 18 +++++++++++++++++- 1 files changed, 17 insertions(+), 1 deletions(-) diff --git a/kernel/sched.c b/kernel/sched.c index 6a43c89..df6b447 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -2962,6 +2962,16 @@ next: pulled++; rem_load_move -= p->se.load.weight; +#ifdef CONFIG_PREEMPT + /* + * NEWIDLE balancing is a source of latency, so preemptible kernels + * will stop after the first task is pulled to minimize the critical + * section. + */ + if (idle == CPU_NEWLY_IDLE) + goto out; +#endif + /* * We only want to steal up to the prescribed amount of weighted load. */ @@ -3008,9 +3018,15 @@ static int move_tasks(struct rq *this_rq, int this_cpu, struct rq *busiest, sd, idle, all_pinned, &this_best_prio); class = class->next; +#ifdef CONFIG_PREEMPT + /* + * NEWIDLE balancing is a source of latency, so preemptible + * kernels will stop after the first task is pulled to minimize + * the critical section. + */ if (idle == CPU_NEWLY_IDLE && this_rq->nr_running) break; - +#endif } while (class && max_load_move > total_load_moved); return total_load_moved > 0;
WARNING: multiple messages have this Message-ID (diff)
From: Gregory Haskins <ghaskins@novell.com> To: mingo@elte.hu Cc: srostedt@redhat.com, peterz@infradead.org, linux-kernel@vger.kernel.org, linux-rt-users@vger.kernel.org, npiggin@suse.de, gregory.haskins@gmail.com Subject: [PATCH v2 2/6] sched: pull only one task during NEWIDLE balancing to limit critical section Date: Tue, 26 Aug 2008 13:34:54 -0400 [thread overview] Message-ID: <20080826173454.16413.10021.stgit@dev.haskins.net> (raw) In-Reply-To: <20080826173131.16413.17862.stgit@dev.haskins.net> git-id c4acb2c0669c5c5c9b28e9d02a34b5c67edf7092 attempted to limit newidle critical section length by stopping after at least one task was moved. Further investigation has shown that there are other paths nested further inside the algorithm which still remain that allow long latencies to occur with newidle balancing. This patch applies the same technique inside balance_tasks() to limit the duration of this optional balancing operation. Signed-off-by: Gregory Haskins <ghaskins@novell.com> CC: Nick Piggin <npiggin@suse.de> --- kernel/sched.c | 18 +++++++++++++++++- 1 files changed, 17 insertions(+), 1 deletions(-) diff --git a/kernel/sched.c b/kernel/sched.c index 6a43c89..df6b447 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -2962,6 +2962,16 @@ next: pulled++; rem_load_move -= p->se.load.weight; +#ifdef CONFIG_PREEMPT + /* + * NEWIDLE balancing is a source of latency, so preemptible kernels + * will stop after the first task is pulled to minimize the critical + * section. + */ + if (idle == CPU_NEWLY_IDLE) + goto out; +#endif + /* * We only want to steal up to the prescribed amount of weighted load. */ @@ -3008,9 +3018,15 @@ static int move_tasks(struct rq *this_rq, int this_cpu, struct rq *busiest, sd, idle, all_pinned, &this_best_prio); class = class->next; +#ifdef CONFIG_PREEMPT + /* + * NEWIDLE balancing is a source of latency, so preemptible + * kernels will stop after the first task is pulled to minimize + * the critical section. + */ if (idle == CPU_NEWLY_IDLE && this_rq->nr_running) break;
next prev parent reply other threads:[~2008-08-26 17:37 UTC|newest] Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top 2008-08-25 20:15 [PATCH 0/5] sched: misc rt fixes for tip/sched/devel Gregory Haskins 2008-08-25 20:15 ` [PATCH 1/5] sched: only try to push a task on wakeup if it is migratable Gregory Haskins 2008-08-25 20:15 ` [PATCH 2/5] sched: pull only one task during NEWIDLE balancing to limit critical section Gregory Haskins 2008-08-26 6:21 ` Nick Piggin 2008-08-26 11:36 ` Gregory Haskins 2008-08-27 6:41 ` Nick Piggin 2008-08-27 11:50 ` Gregory Haskins 2008-08-27 11:57 ` Nick Piggin 2008-08-25 20:15 ` [PATCH 3/5] sched: make double-lock-balance fair Gregory Haskins 2008-08-25 20:15 ` Gregory Haskins 2008-08-26 6:14 ` Nick Piggin 2008-08-26 12:23 ` Gregory Haskins 2008-08-27 6:36 ` Nick Piggin 2008-08-27 11:41 ` Gregory Haskins 2008-08-27 11:53 ` Nick Piggin 2008-08-27 12:10 ` Gregory Haskins 2008-08-25 20:15 ` [PATCH 4/5] sched: add sched_class->needs_post_schedule() member Gregory Haskins 2008-08-25 20:15 ` [PATCH 5/5] sched: create "pushable_tasks" list to limit pushing to one attempt Gregory Haskins 2008-08-26 17:34 ` [PATCH v2 0/6] Series short description Gregory Haskins 2008-08-26 17:34 ` [PATCH v2 1/6] sched: only try to push a task on wakeup if it is migratable Gregory Haskins 2008-08-26 17:34 ` Gregory Haskins [this message] 2008-08-26 17:34 ` [PATCH v2 2/6] sched: pull only one task during NEWIDLE balancing to limit critical section Gregory Haskins 2008-08-26 17:35 ` [PATCH v2 3/6] sched: make double-lock-balance fair Gregory Haskins 2008-08-27 8:21 ` Peter Zijlstra 2008-08-27 8:25 ` Peter Zijlstra 2008-08-27 10:26 ` Nick Piggin 2008-08-27 10:41 ` Peter Zijlstra 2008-08-27 10:56 ` Nick Piggin 2008-08-27 10:57 ` Nick Piggin 2008-08-27 12:03 ` Gregory Haskins 2008-08-27 11:07 ` Peter Zijlstra 2008-08-27 11:17 ` Russell King 2008-08-27 12:00 ` Gregory Haskins 2008-08-29 12:49 ` Ralf Baechle 2008-08-27 12:13 ` Gregory Haskins 2008-08-27 12:02 ` Gregory Haskins 2008-08-26 17:35 ` [PATCH v2 4/6] sched: add sched_class->needs_post_schedule() member Gregory Haskins 2008-08-26 17:35 ` [PATCH v2 5/6] plist: fix PLIST_NODE_INIT to work with debug enabled Gregory Haskins 2008-08-26 17:35 ` [PATCH v2 6/6] sched: create "pushable_tasks" list to limit pushing to one attempt Gregory Haskins 2008-08-29 13:24 ` Gregory Haskins 2008-08-26 18:16 ` [PATCH v2 0/6] sched: misc rt fixes for tip/sched/devel (was: Series short description) Gregory Haskins 2008-08-27 8:33 ` [PATCH v2 0/6] Series short description Peter Zijlstra 2008-09-04 12:54 ` [TIP/SCHED/DEVEL PATCH v3 0/6] sched: misc rt fixes Gregory Haskins 2008-09-04 12:55 ` [TIP/SCHED/DEVEL PATCH v3 1/6] sched: only try to push a task on wakeup if it is migratable Gregory Haskins 2008-09-04 12:55 ` [TIP/SCHED/DEVEL PATCH v3 2/6] sched: pull only one task during NEWIDLE balancing to limit critical section Gregory Haskins 2008-09-04 12:55 ` Gregory Haskins 2008-09-04 12:55 ` [TIP/SCHED/DEVEL PATCH v3 3/6] sched: make double-lock-balance fair Gregory Haskins 2008-09-04 12:55 ` [TIP/SCHED/DEVEL PATCH v3 4/6] sched: add sched_class->needs_post_schedule() member Gregory Haskins 2008-09-04 20:36 ` Steven Rostedt 2008-09-04 20:36 ` Gregory Haskins 2008-09-04 12:55 ` [TIP/SCHED/DEVEL PATCH v3 5/6] plist: fix PLIST_NODE_INIT to work with debug enabled Gregory Haskins 2008-09-04 12:55 ` [TIP/SCHED/DEVEL PATCH v3 6/6] sched: create "pushable_tasks" list to limit pushing to one attempt Gregory Haskins 2008-09-04 21:16 ` Steven Rostedt 2008-09-04 21:26 ` Gregory Haskins
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=20080826173454.16413.10021.stgit@dev.haskins.net \ --to=ghaskins@novell.com \ --cc=gregory.haskins@gmail.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-rt-users@vger.kernel.org \ --cc=mingo@elte.hu \ --cc=npiggin@suse.de \ --cc=peterz@infradead.org \ --cc=srostedt@redhat.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: linkBe 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.