From: ebiederm@xmission.com (Eric W. Biederman)
To: Jack Steiner <steiner@sgi.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>, Dean Nelson <dcn@sgi.com>,
Ingo Molnar <mingo@elte.hu>, Alan Mayer <ajm@sgi.com>,
jeremy@goop.org, rusty@rustcorp.com.au,
suresh.b.siddha@intel.com, torvalds@linux-foundation.org,
linux-kernel@vger.kernel.org,
Thomas Gleixner <tglx@linutronix.de>,
Yinghai Lu <Yinghai.lu@amd.com>
Subject: Re: [RFC 0/4] dynamically allocate arch specific system vectors
Date: Thu, 18 Sep 2008 17:28:49 -0700 [thread overview]
Message-ID: <m1zlm5rnb2.fsf@frodo.ebiederm.org> (raw)
In-Reply-To: <20080918191052.GA22864@sgi.com> (Jack Steiner's message of "Thu, 18 Sep 2008 14:10:52 -0500")
Jack Steiner <steiner@sgi.com> writes:
> On Wed, Sep 17, 2008 at 03:15:07PM -0700, Eric W. Biederman wrote:
>> Jack Steiner <steiner@sgi.com> writes:
>>
>> > On Wed, Sep 17, 2008 at 12:15:42PM -0700, H. Peter Anvin wrote:
>> >> Dean Nelson wrote:
>> >> >
>> >> > sgi-gru driver
>> >> >
>> >> >The GRU is not an actual external device that is connected to an IOAPIC.
>> >> >The gru is a hardware mechanism that is embedded in the node controller
>> >> >(UV hub) that directly connects to the cpu socket. Any cpu (with
>> >> >permission)
>> >> >can do direct loads and stores to the gru. Some of these stores will
> result
>> >> >in an interrupt being sent back to the cpu that did the store.
>> >> >
>> >> >The interrupt vector used for this interrupt is not in an IOAPIC. Instead
>> >> >it must be loaded into the GRU at boot or driver initialization time.
>> >> >
>> >>
>> >> Could you clarify there: is this one vector number per CPU, or are you
>> >> issuing a specific vector number and just varying the CPU number?
>> >
>> > It is one vector for each cpu.
>> >
>> > It is more efficient for software if the vector # is the same for all cpus
>> Why? Especially in terms of irq counting that would seem to lead to cache
>> line conflicts.
>
> Functionally, it does not matter. However, if the IRQ is not a per-cpu IRQ, a
> very large number of IRQs (and vectors) may be needed. The GRU requires 32
> interrupt
> lines on each blade. A large system can currently support up to 512 blades.
Every vendor of high end hardware is saying they intend to provide
1 or 2 queues per cpu and 1 irq per queue. So the GRU is not special in
that regard. Also a very large number of IRQs is not a problem as
soon as we start dynamically allocating them, which is currently
in progress.
Once we start dynamically allocating irq_desc structures we can put
them in node-local memory and guarantee there is no data shared between
cpus.
> After looking thru the MSI code, we are starting to believe that we should
> separate
> the GRU requirements from the XPC requirements. It looks like XPC can easily use
> the MSI infrastructure. XPC needs a small number of IRQs, and interrupts are
> typically
> targeted to a single cpu. They can also be retargeted using the standard
> methods.
Alright.
I would be completely happy if there were interrupts who's affinity we can
not change, and are always targeted at a single cpu.
> The GRU, OTOH, is more like a timer interrupt or like a co-processor interrupt.
> GRU interrupts can occur on any cpu using the GRU. When interrupts do occur, all
> that
> needs to happen is to call an interrupt handler. I'm thinking of something like
> the following:
>
> - permanently reserve 2 system vectors in include/asm-x86/irq_vectors.h
> - in uv_system_init(), call alloc_intr_gate() to route the
> interrupts to a function in the file containing uv_system_init().
> - initialize the GRU chipset with the vector, etc, ...
> - if an interrupt occurs and the GRU driver is NOT loaded, print
> an error message (rate limited or one time)
>
> - provide a special UV hook for the GRU driver to register/deregister a
> special callback function for GRU interrupts
That would work. So far the GRU doesn't sound that special.
For a lot of this I would much rather solve the general case on this
giving us a solution that works for all high end interrupts rather than
one specific solution just for the GRU. Especially since it looks like
we have most of the infrastructure already present to solve the general
case and we have to develop and review the specific case from scratch.
Eric
next prev parent reply other threads:[~2008-09-19 0:35 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-08 15:37 [Fwd: [PATCH] x86_64: (NEW) Dynamically allocate arch specific system vectors] Alan Mayer
2008-08-11 16:59 ` [PATCH] x86_64: (NEW) Dynamically allocate arch specific system vectors Ingo Molnar
2008-08-11 17:14 ` Alan Mayer
2008-08-11 19:39 ` Eric W. Biederman
2008-08-11 19:51 ` Ingo Molnar
2008-08-11 19:55 ` Jeremy Fitzhardinge
2008-08-11 20:10 ` Eric W. Biederman
2008-08-11 20:02 ` Alan Mayer
2008-09-11 15:23 ` [RFC 0/4] dynamically " Dean Nelson
2008-09-11 15:25 ` [RFC 1/4] switch vector_irq[] from irq number to irq_desc pointer Dean Nelson
2008-09-11 15:27 ` [RFC 2/4] introduce dynamically allocated system vectors Dean Nelson
2008-09-14 15:39 ` Ingo Molnar
2008-09-14 15:46 ` Ingo Molnar
2008-09-11 15:28 ` [RFC 3/4] switch static system vector allocation to use vector_irq[] Dean Nelson
2008-09-11 15:29 ` [RFC 4/4] switch non-standard SYSCALL_VECTOR " Dean Nelson
2008-09-14 15:40 ` Ingo Molnar
2008-09-14 15:42 ` Ingo Molnar
2008-09-11 20:04 ` [RFC 0/4] dynamically allocate arch specific system vectors H. Peter Anvin
2008-09-12 11:46 ` Dean Nelson
2008-09-14 15:35 ` Ingo Molnar
2008-09-14 15:48 ` Ingo Molnar
2008-09-15 21:50 ` Dean Nelson
2008-09-16 8:24 ` Ingo Molnar
2008-09-16 20:46 ` Dean Nelson
2008-09-17 17:30 ` Dimitri Sivanich
2008-09-17 18:59 ` Eric W. Biederman
2008-09-18 13:37 ` Dean Nelson
2008-09-18 19:18 ` H. Peter Anvin
2008-09-17 19:15 ` H. Peter Anvin
2008-09-17 20:21 ` Jack Steiner
2008-09-17 22:15 ` Eric W. Biederman
2008-09-18 1:09 ` H. Peter Anvin
2008-09-18 19:10 ` Jack Steiner
2008-09-19 0:28 ` Eric W. Biederman [this message]
2008-09-19 8:48 ` Ingo Molnar
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=m1zlm5rnb2.fsf@frodo.ebiederm.org \
--to=ebiederm@xmission.com \
--cc=Yinghai.lu@amd.com \
--cc=ajm@sgi.com \
--cc=dcn@sgi.com \
--cc=hpa@zytor.com \
--cc=jeremy@goop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=rusty@rustcorp.com.au \
--cc=steiner@sgi.com \
--cc=suresh.b.siddha@intel.com \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.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