From: Andi Kleen <andi@firstfloor.org>
To: Shaohua Li <shaohua.li@intel.com>
Cc: lkml <linux-kernel@vger.kernel.org>, Ingo Molnar <mingo@elte.hu>,
"hpa@zytor.com" <hpa@zytor.com>, Andi Kleen <andi@firstfloor.org>,
"Chen, Tim C" <tim.c.chen@intel.com>
Subject: Re: [patch]x86: spread tlb flush vector between nodes
Date: Wed, 13 Oct 2010 10:16:29 +0200 [thread overview]
Message-ID: <20101013081629.GA1621@basil.fritz.box> (raw)
In-Reply-To: <1286955698.13317.5.camel@sli10-conroe.sh.intel.com>
On Wed, Oct 13, 2010 at 03:41:38PM +0800, Shaohua Li wrote:
Hi Shaohua,
> Currently flush tlb vector allocation is based on below equation:
> sender = smp_processor_id() % 8
> This isn't optimal, CPUs from different node can have the same vector, this
> causes a lot of lock contention. Instead, we can assign the same vectors to
> CPUs from the same node, while different node has different vectors. This has
> below advantages:
> a. if there is lock contention, the lock contention is between CPUs from one
> node. This should be much cheaper than the contention between nodes.
> b. completely avoid lock contention between nodes. This especially benefits
> kswapd, which is the biggest user of tlb flush, since kswapd sets its affinity
> to specific node.
The original scheme with 8 vectors was designed when Linux didn't have
per CPU interrupt numbers yet, and interrupts vectors were a scarce resource.
Now that we have per CPU interrupts and there is no immediate danger
of running out I think it's better to use more than 8 vectors for the TLB
flushes.
Perhaps could use 32 vectors or so and give each node on a 8S
system 4 slots and on a 4 node system 8 slots?
> In my test, this could reduce > 20% CPU overhead in extreme case.
Nice result.
> +
> +static int tlb_cpuhp_notify(struct notifier_block *n,
> + unsigned long action, void *hcpu)
> +{
> + switch (action & 0xf) {
> + case CPU_ONLINE:
> + case CPU_DEAD:
> + calculate_tlb_offset();
> + }
> + return NOTIFY_OK;
I don't think we really need the complexity of a notifier here.
In most x86 setups possible is very similar to online.
So I would suggest simply to compute a static mapping at boot
and simplify the code.
In theory there is a slight danger of node<->CPU numbers
changing with consecutive hot plug actions, but right now
this should not happen anyways and it would be unlikely
later.
-Andi
next prev parent reply other threads:[~2010-10-13 8:16 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-13 7:41 [patch]x86: spread tlb flush vector between nodes Shaohua Li
2010-10-13 8:16 ` Andi Kleen [this message]
2010-10-13 8:39 ` Shaohua Li
2010-10-13 11:19 ` Ingo Molnar
2010-10-19 5:39 ` Shaohua Li
2010-10-19 6:21 ` H. Peter Anvin
2010-10-19 8:44 ` Ingo Molnar
2010-10-19 8:55 ` Shaohua Li
2010-10-19 10:37 ` Ingo Molnar
2010-10-19 13:28 ` Shaohua Li
2010-10-19 13:34 ` Andi Kleen
2010-10-20 1:13 ` Shaohua Li
2010-10-20 2:39 ` H. Peter Anvin
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=20101013081629.GA1621@basil.fritz.box \
--to=andi@firstfloor.org \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=shaohua.li@intel.com \
--cc=tim.c.chen@intel.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: 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.