[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1351618408.8467.132.camel@gandalf.local.home>
Date: Tue, 30 Oct 2012 13:33:28 -0400
From: Steven Rostedt <rostedt@...dmis.org>
To: linux-kernel@...r.kernel.org
Cc: Andrew Morton <akpm@...ux-foundation.org>,
Thomas Gleixner <tglx@...utronix.de>,
Peter Zijlstra <peterz@...radead.org>,
Clark Williams <clark.williams@...il.com>,
Frederic Weisbecker <fweisbec@...il.com>,
Li Zefan <lizf@...fujitsu.com>, Ingo Molnar <mingo@...nel.org>,
"Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>,
Mike Galbraith <efault@....de>,
Alessio Igor Bogani <abogani@...nel.org>,
Avi Kivity <avi@...hat.com>,
Chris Metcalf <cmetcalf@...era.com>,
Christoph Lameter <cl@...ux.com>,
Daniel Lezcano <daniel.lezcano@...aro.org>,
Geoff Levand <geoff@...radead.org>,
Gilad Ben Yossef <gilad@...yossef.com>,
Hakan Akkan <hakanakkan@...il.com>,
Kevin Hilman <khilman@...com>,
Max Krasnyansky <maxk@...lcomm.com>,
Stephen Hemminger <shemminger@...tta.com>,
Sven-Thorsten Dietrich <thebigcorporation@...il.com>
Subject: Re: [PATCH 03/32] nohz: Try not to give the timekeeping duty to an
adaptive tickless cpu
On Mon, 2012-10-29 at 16:27 -0400, Steven Rostedt wrote:
> kernel/time/tick-sched.c | 52 ++++++++++++++++++++++++++++++++++++----------
> 1 file changed, 41 insertions(+), 11 deletions(-)
>
> diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
> index d6d16fe..c7a78c6 100644
> --- a/kernel/time/tick-sched.c
> +++ b/kernel/time/tick-sched.c
> @@ -20,6 +20,7 @@
> #include <linux/profile.h>
> #include <linux/sched.h>
> #include <linux/module.h>
> +#include <linux/cpuset.h>
>
> #include <asm/irq_regs.h>
>
> @@ -789,6 +790,45 @@ void tick_check_idle(int cpu)
> tick_check_nohz(cpu);
> }
>
> +#ifdef CONFIG_CPUSETS_NO_HZ
> +
> +/*
> + * Take the timer duty if nobody is taking care of it.
> + * If a CPU already does and and it's in a nohz cpuset,
and and
> + * then take the charge so that it can switch to nohz mode.
> + */
> +static void tick_do_timer_check_handler(int cpu)
> +{
> + int handler = tick_do_timer_cpu;
> +
> + if (unlikely(handler == TICK_DO_TIMER_NONE)) {
> + tick_do_timer_cpu = cpu;
I take it that this is the forced (no one has it, so I'll take it?)
Perhaps we should do a:
WARN_ON(cpuset_cpu_adaptive_nohz(cpu));
> + } else {
> + if (!cpuset_adaptive_nohz() &&
> + cpuset_cpu_adaptive_nohz(handler))
> + tick_do_timer_cpu = cpu;
Shouldn't this be
if (!cpuset_cpu_adaptive_nohz(cpu) && ...
Otherwise, we should have it go to smp_processor_id()?
OK, looking further down, the only caller of it passes
smp_processor_id() to the function. But we still shouldn't assume this.
Either, have the function use smp_processor_id() explicitly, or let it
use any cpu. Otherwise it just confuses people, and is prone to be buggy
if in the future something calls it with a cpu that's not the local cpu.
-- Steve
> + }
> +}
> +
> +#else
> +
> +static void tick_do_timer_check_handler(int cpu)
> +{
> +#ifdef CONFIG_NO_HZ
> + /*
> + * Check if the do_timer duty was dropped. We don't care about
> + * concurrency: This happens only when the cpu in charge went
> + * into a long sleep. If two cpus happen to assign themself to
> + * this duty, then the jiffies update is still serialized by
> + * xtime_lock.
> + */
> + if (unlikely(tick_do_timer_cpu == TICK_DO_TIMER_NONE))
> + tick_do_timer_cpu = cpu;
> +#endif
> +}
> +
> +#endif /* CONFIG_CPUSETS_NO_HZ */
> +
> /*
> * High resolution timer specific code
> */
> @@ -805,17 +845,7 @@ static enum hrtimer_restart tick_sched_timer(struct hrtimer *timer)
> ktime_t now = ktime_get();
> int cpu = smp_processor_id();
>
> -#ifdef CONFIG_NO_HZ
> - /*
> - * Check if the do_timer duty was dropped. We don't care about
> - * concurrency: This happens only when the cpu in charge went
> - * into a long sleep. If two cpus happen to assign themself to
> - * this duty, then the jiffies update is still serialized by
> - * xtime_lock.
> - */
> - if (unlikely(tick_do_timer_cpu == TICK_DO_TIMER_NONE))
> - tick_do_timer_cpu = cpu;
> -#endif
> + tick_do_timer_check_handler(cpu);
>
> /* Check, if the jiffies need an update */
> if (tick_do_timer_cpu == cpu)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists