From: Andrew Morton <akpm@linux-foundation.org>
To: Jack Steiner <steiner@sgi.com>
Cc: mingo@elte.hu, tglx@linutronix.de, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] x86: Reduce clock calibration time during slave cpu startup
Date: Fri, 26 Aug 2011 16:56:34 -0700 [thread overview]
Message-ID: <20110826165634.398b0d2e.akpm@linux-foundation.org> (raw)
In-Reply-To: <20110727135730.GA17717@sgi.com>
On Wed, 27 Jul 2011 08:57:31 -0500
Jack Steiner <steiner@sgi.com> wrote:
> Reduce the startup time for slave cpus.
>
> This patch adds hooks for an arch-specific function for clock calibration.
> These hooks are used on x86. They assume all cores in a physical socket
> run at the same core speed. If a newly started cpu has the same phys_proc_id
> as a core already active, use the already-calculated value of loops_per_jiffy.
>
> This patch reduces the time required to start slave cpus on a 4096 cpu
> system from:
> 465 sec OLD
> 62 sec NEW
Eight minutes is just stupid.
100ms/cpu is just stupid too. What's the CPU doing? Spinning around
counting ticks? That's parallelizable.
> This reduces boot time on a 4096p system by almost 7 minutes. Nice...
>
>
> Signed-off-by: Jack Steiner <steiner@sgi.com>
>
>
> ---
> Note: patch assumes that all multi-core x86 processor sockets have the same
> clock frequency for all cores. AFAIK, this is true & will continue
> to be true for a long time. Have I overlooked anything???
Well, Andi thinks this may become untrue relatively soon. Then what do
we do?
> /*
> + * Check if another cpu is in the same socket and has already been calibrated.
> + * If found, use the previous value. This assumes all cores in the same physical
> + * socket have the same core frequency.
> + */
> +unsigned long __cpuinit calibrate_delay_is_known(void)
> +{
> + int i, cpu = smp_processor_id();
> +
> + for_each_online_cpu(i)
> + if (cpu_data(i).phys_proc_id == cpu_data(cpu).phys_proc_id)
This will always match when `i' reaches `cpu'. Or is this cpu not
online at this time?
> + return cpu_data(i).loops_per_jiffy;
> + return 0;
> +}
> +
> +/*
> * Activate a secondary processor.
> */
> notrace static void __cpuinit start_secondary(void *unused)
> Index: linux/init/calibrate.c
> ===================================================================
> --- linux.orig/init/calibrate.c 2011-07-26 08:01:15.571979739 -0500
> +++ linux/init/calibrate.c 2011-07-27 08:39:35.691983745 -0500
> @@ -243,6 +243,20 @@ recalibrate:
> return lpj;
> }
>
> +/*
> + * Check if cpu calibration delay is already known. For example,
> + * some processors with multi-core sockets may have all sockets
> + * use the same core frequency. It is not necessary to calibrate
> + * each core.
> + *
> + * Architectures should override this function if a faster calibration
> + * method is available.
> + */
> +unsigned long __attribute__((weak)) __cpuinit calibrate_delay_is_known(void)
__weak
> +{
> + return 0;
> +}
> +
> void __cpuinit calibrate_delay(void)
> {
> unsigned long lpj;
> @@ -257,6 +271,8 @@ void __cpuinit calibrate_delay(void)
> lpj = lpj_fine;
> pr_info("Calibrating delay loop (skipped), "
> "value calculated using timer frequency.. ");
> + } else if ((lpj = calibrate_delay_is_known())) {
> + ;
> } else if ((lpj = calibrate_delay_direct()) != 0) {
> if (!printed)
> pr_info("Calibrating delay using timer "
next prev parent reply other threads:[~2011-08-26 23:56 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-27 13:57 [PATCH] x86: Reduce clock calibration time during slave cpu startup Jack Steiner
2011-07-27 14:05 ` Dave Jones
[not found] ` <20110727141527.GA8453@sgi.com>
[not found] ` <20110727155200.GA25381@redhat.com>
2011-08-01 18:45 ` [PATCH v2] " Jack Steiner
2011-08-05 10:46 ` Ingo Molnar
2011-08-05 13:13 ` Jack Steiner
2011-08-05 13:16 ` Jack Steiner
2011-08-05 21:38 ` Ingo Molnar
2011-08-07 0:36 ` Matthew Garrett
2011-08-08 20:44 ` Jack Steiner
2011-08-09 15:06 ` Ingo Molnar
2011-08-09 15:18 ` Matthew Garrett
2011-08-11 20:14 ` [PATCH v3] " Jack Steiner
2011-08-06 0:21 ` [PATCH v2] " Yinghai Lu
2011-08-06 6:58 ` Ingo Molnar
2011-08-06 10:51 ` Robin Holt
2011-08-06 14:39 ` Jack Steiner
2011-08-26 23:56 ` Andrew Morton [this message]
2011-08-26 23:57 ` [PATCH] " Andrew Morton
2011-08-29 15:04 ` Jack Steiner
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=20110826165634.398b0d2e.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=steiner@sgi.com \
--cc=tglx@linutronix.de \
/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.