From: linux@arm.linux.org.uk (Russell King - ARM Linux)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC] ARM: Let GIC to route IRQs to any allowed CPUs
Date: Wed, 12 Jan 2011 10:56:59 +0000 [thread overview]
Message-ID: <20110112105658.GA2365@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <AANLkTim3BUvnMsH=oW1cxmzT2wmwpxPFLjrP39TGbuhx@mail.gmail.com>
On Wed, Jan 12, 2011 at 05:04:43PM +0800, TAO HU wrote:
> Hi, Russell King
>
> Thanks.
>
> For "The result will be CPUs fighting over servicing such interrupts."
> What's the consequence? The performance downgrade?
It means you'll have the same interrupt trying to be serviced on two
CPUs at the same time. One will succeed and service it. The other
will waste time just finding out that there's nothing for it to do,
competing with resources and wasting time that it could otherwise have
spent executing userspace or whatever.
> Does it imply a design flaw in GIC or in ARM SMP?
No. The hardware is doing what you're asking it to. Some OSes may want
this behaviour so it would be wrong for the hardware to deny it.
There's quite a bit of history behind interrupt balancing across CPU
cores, and it's not a simple issue to get to grips with.
I believe the x86 kernel uses software to balance interrupts across the
cores using an algorithm in the kernel. This tries to distribute the
interrupts between the cores. When this was tried on ARM, although it
moved interrupts around the cores, it was no better than having all
interrupts routed to one core.
On x86 they now do away with their kernel algorithm, and instead run a
boot-time utility (irqbalance) which does a one-time distribution of
interrupts across the cores. The idea is that it is more important to
keep an interrupt handler running on the same core than it is to
constantly switch it between the cores.
If a handler keeps switching between the cores, you have to migrate cache
lines between the cores, which adds to the cache coherency traffic, and
on x86 results in a reduction in performance.
So, with all that in mind, when I was sorting out the initial SMP merging,
I tried out various algorithms for automatic interrupt distribution, and
never got any of them to work satisfactorily. In light of discussions with
x86 folk, particularly Arjan van de Ven, I decided not to merge any of them
and leave it as a matter for userspace policy to control how interrupts are
distributed to the cores - just like the majority of x86 platforms now do.
AFAIK, there's nothing stopping anyone running 'irqbalance' (the x86
utility) on ARM - it should just be accessing procfs files. See
http://irqbalance.org/ for more information on the program, and on the
issues surrounding IRQ distribution in SMP systems.
prev parent reply other threads:[~2011-01-12 10:56 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-12 8:18 [RFC] ARM: Let GIC to route IRQs to any allowed CPUs TAO HU
2011-01-12 8:51 ` Russell King - ARM Linux
2011-01-12 9:04 ` TAO HU
2011-01-12 9:47 ` Santosh Shilimkar
2011-01-12 10:56 ` Russell King - ARM Linux [this message]
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=20110112105658.GA2365@n2100.arm.linux.org.uk \
--to=linux@arm.linux.org.uk \
--cc=linux-arm-kernel@lists.infradead.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox