On Thu, Mar 5, 2009 at 1:48 PM, Steve Lawrence <stephen.lawre...@sun.com> wrote: > On Thu, Mar 05, 2009 at 01:22:25PM -0500, Jeff Victor wrote: >> On Thu, Mar 5, 2009 at 11:00 AM, Gael <gael.marti...@gmail.com> wrote: >> > On Wed, Mar 4, 2009 at 9:06 AM, Jeff Victor <jeff.j.vic...@gmail.com> >> > wrote: >> >> >> >> Some questions: >> >> 1. Do you use "set pool=" anymore, now that the dedicated-cpu feature >> >> exists? >> > >> It is now clear to me that this feature would need to support >> disabling interrupts when a zone uses "set pool=". Currently, all pool >> attributes are configured using the pool tools (poolcfg, pooladm) and >> I don't see any reason to not continue. When I write this up, it will >> fulfill that need. > > Ae you proposing that we add support for pset-interrupt disposition config > to the pools framework? Such as a property on a pool-pset > "boolean pset.interrupts = false"??
The short answer is "yes." BobN and I came to the same conclusion just a few hours ago... :-) CPUs already have cpu.status which can be on-line, no-intr (LWPs but no interrupt handlers), or off-line (no LWPs but still able to handle interrupts). A pset.interrupts field would allow Solaris to set cpu.status on CPUs as they enter the pset. Zones could then use that so we can increase their isolation. When a CPU re-enters the default pset, it becomes able to handle interrupts again. When needed, intrd will give it one (or more). > I think the right solution for "pool=" is this or similar. It could also > be a string value, such as: > > "none" no interrupts handled on cpus in the pool-pset. > "zone" Device interrupts for bound zones are serviced. > "any" Any device interrupts can be dispatched to the pset. I don't see how we could do "zone" in all situations - there isn't a 1:1 mapping between zone and device (except for exclusive-IP). Imagine zoneA and zoneB on a pset (psetAB) with pset.interrupts=zone. Further, zoneA and zoneC share e1000g0, but zoneB doesn't. Finally, zoneC has its own pset. Where does the interrupt handler for e1000g0 go - psetAB or psetC? Or are you suggesting that interrupts from one device can be intercepted and diverted to a CPU associated with a specific pset, based on which process the interrupt is/should be associated with? Or am I misunderstanding the description of "zone"? > Zonecfg could make use of these pool-pset properties to implement the > desired behavior for "dedicated-cpu". Exactly. > The default value should be "any". zonecfg should set "zone" for all > dedicated-cpu zones. zoneadm could warn if "pool=" is set, the zone has > dedicated devices, zone the pset for that pool has not been configured to > be "zone". The only devices we can be sure are dedicated for the boot-session of a zone are NICs. So this whole "segregate the interrupts per zone/pset combo" will be limited at best. It would be nice if we could generalize it like you say, but I don't think it's workable yet. > legacy psets (psrset) could be extended to support this property via some new > flags. > > Ther other part of this is how to reconsile zonecfg and/or pools settings > for interrupts, with device-cpu mappings that are specified via dladm. > Currently, dladm allows the specification of a list of cpu ids. Another > way to approach this would be to point dladm directly at the desired pool. Which "currently" are you on? :-) I'm on NV94 and I don't see anything like that in dladm(1M) I'm beginning to think this is really a two-phase project: * Phase 1: make it easier to disable interrupts on a zone's pset (one configured with the pool property or dedicated-cpu resource) * Phase 2: optimize this by enabling a zone's pset to handle interrupts from a device which is exclusively bound to this zone. I think that most people that need any of this only need Phase 1. Philosophically, shifting interrupt handlers into the default pset is consistent with the original zones principles: hardware is part of the platform, not part of a zone. So I'm not even convinced that we should be allowing zones' psets to selectively "attract" interrupt handlers. Great conversation! --JeffV >> >> 2. Is it sufficient to simply disable interrupts on a zone's pset? >> > >> > In our case, we do pset only when licensing requires it (aka >> > oracle,datastage,sybase,borland apps) or when the applications behave >> > poorly >> > and we keep hearing that by lack of budget/resources, the issue cannot be >> > addressed and without direct impact on the business itself, nothing will >> > change. >> >> Gael, I realized that my question was vague. When you use a pool, >> you're using a pset. Do you mean that you only use pools and psets >> when licensing requires it? >> >> Also, I couldn't tell how the comment responded to the question. >> >> > What about creating an IO pset, and then disabling the interrupt on >> > everything else while using it as a FSS pool or psets pools ? Very similar >> > to ldom I would think... >> >> Yes, that occurred to me, too. You can do that now, either with a pset >> that's being used by a zone or with the default pset. But I'm not >> convinced there's enough reason to separate an I/O pset from the >> default pset. There's great potential for wasted CPU cycles. >> >> >> --JeffV > - Show quoted text - >> _______________________________________________ >> zones-discuss mailing list >> zones-discuss@opensolaris.org > -- --JeffV _______________________________________________ zones-discuss mailing list zones-discuss@opensolaris.org