From: Gregory Haskins <gregory.haskins.ml@gmail.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@elte.hu>,
Peter Williams <pwil3058@bigpond.net.au>,
linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] sched: avoid large irq-latencies in smp-balancing
Date: Wed, 07 Nov 2007 23:37:49 -0500 [thread overview]
Message-ID: <4732929D.604@gmail.com> (raw)
In-Reply-To: <1194437820.6289.114.camel@twins>
Peter Zijlstra wrote:
> Bah, missed a hunk
>
> ---
> Subject: sched: avoid large irq-latencies in smp-balancing
>
> SMP balancing is done with IRQs disabled and can iterate the full rq. When rqs
> are large this can cause large irq-latencies. Limit the nr of iterations on
> each run.
>
> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
> CC: Peter Williams <pwil3058@bigpond.net.au>
Tested-by: Gregory Haskins <ghaskins@novell.com> (as part of 23.1-rt11)
> ---
> include/linux/sched.h | 1 +
> kernel/sched.c | 15 ++++++++++-----
> kernel/sysctl.c | 8 ++++++++
> 3 files changed, 19 insertions(+), 5 deletions(-)
>
> Index: linux-2.6-2/kernel/sched.c
> ===================================================================
> --- linux-2.6-2.orig/kernel/sched.c
> +++ linux-2.6-2/kernel/sched.c
> @@ -474,6 +474,12 @@ const_debug unsigned int sysctl_sched_fe
> #define sched_feat(x) (sysctl_sched_features & SCHED_FEAT_##x)
>
> /*
> + * Number of tasks to iterate in a single balance run.
> + * Limited because this is done with IRQs disabled.
> + */
> +const_debug unsigned int sysctl_sched_nr_migrate = 32;
> +
> +/*
> * For kernel-internal use: high-speed (but slightly incorrect) per-cpu
> * clock constructed from sched_clock():
> */
> @@ -2237,7 +2243,7 @@ balance_tasks(struct rq *this_rq, int th
> enum cpu_idle_type idle, int *all_pinned,
> int *this_best_prio, struct rq_iterator *iterator)
> {
> - int pulled = 0, pinned = 0, skip_for_load;
> + int loops = 0, pulled = 0, pinned = 0, skip_for_load;
> struct task_struct *p;
> long rem_load_move = max_load_move;
>
> @@ -2251,10 +2257,10 @@ balance_tasks(struct rq *this_rq, int th
> */
> p = iterator->start(iterator->arg);
> next:
> - if (!p)
> + if (!p || loops++ > sysctl_sched_nr_migrate)
> goto out;
> /*
> - * To help distribute high priority tasks accross CPUs we don't
> + * To help distribute high priority tasks across CPUs we don't
> * skip a task if it will be the highest priority task (i.e. smallest
> * prio value) on its new queue regardless of its load weight
> */
> @@ -2271,8 +2277,7 @@ next:
> rem_load_move -= p->se.load.weight;
>
> /*
> - * We only want to steal up to the prescribed number of tasks
> - * and the prescribed amount of weighted load.
> + * We only want to steal up to the prescribed amount of weighted load.
> */
> if (rem_load_move > 0) {
> if (p->prio < *this_best_prio)
> Index: linux-2.6-2/kernel/sysctl.c
> ===================================================================
> --- linux-2.6-2.orig/kernel/sysctl.c
> +++ linux-2.6-2/kernel/sysctl.c
> @@ -298,6 +298,14 @@ static struct ctl_table kern_table[] = {
> .mode = 0644,
> .proc_handler = &proc_dointvec,
> },
> + {
> + .ctl_name = CTL_UNNUMBERED,
> + .procname = "sched_nr_migrate",
> + .data = &sysctl_sched_nr_migrate,
> + .maxlen = sizeof(unsigned int),
> + .mode = 644,
> + .proc_handler = &proc_dointvec,
> + },
> #endif
> {
> .ctl_name = CTL_UNNUMBERED,
> Index: linux-2.6-2/include/linux/sched.h
> ===================================================================
> --- linux-2.6-2.orig/include/linux/sched.h
> +++ linux-2.6-2/include/linux/sched.h
> @@ -1466,6 +1466,7 @@ extern unsigned int sysctl_sched_batch_w
> extern unsigned int sysctl_sched_child_runs_first;
> extern unsigned int sysctl_sched_features;
> extern unsigned int sysctl_sched_migration_cost;
> +extern unsigned int sysctl_sched_nr_migrate;
> #endif
>
> extern unsigned int sysctl_sched_compat_yield;
>
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>
next prev parent reply other threads:[~2007-11-08 4:38 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-11-07 11:29 [PATCH] sched: avoid large irq-latencies in smp-balancing Peter Zijlstra
2007-11-07 12:17 ` Peter Zijlstra
2007-11-07 18:27 ` Andrew Morton
2007-11-07 18:58 ` Peter Zijlstra
2007-11-07 22:10 ` Steven Rostedt
2007-11-08 0:24 ` Eric St-Laurent
2007-11-08 4:37 ` Gregory Haskins [this message]
2007-11-09 13:09 ` Nick Piggin
2007-11-09 12:41 ` DM
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=4732929D.604@gmail.com \
--to=gregory.haskins.ml@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--cc=pwil3058@bigpond.net.au \
/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.