Date: Fri, 4 May 2012 08:28:17 -0400 From: John Baldwin <jhb@freebsd.org> To: freebsd-hackers@freebsd.org Cc: Navdeep Parhar <np@freebsd.org> Subject: Re: CPU selection for ithreads on 8.3 Message-ID: <201205040828.18027.jhb@freebsd.org> In-Reply-To: <4FA1A421.6020601@FreeBSD.org> References: <4FA1A421.6020601@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday, May 02, 2012 5:16:17 pm Navdeep Parhar wrote: > There seems to be a regression in 8.3 in the way the kernel selects CPUs > for interrupts. For example, cxgb(4) on 8.3 ends up with all > its ithreads on the same CPU (CPU7 in this case). > > 12 root -68 - 0K 816K WAIT 7 0:55 0.00% intr{irq279: > cxgbc0} > 12 root -68 - 0K 816K WAIT 7 0:52 0.00% intr{irq275: > cxgbc0} > 12 root -68 - 0K 816K WAIT 7 0:47 0.00% intr{irq278: > cxgbc0} > 12 root -68 - 0K 816K WAIT 7 0:43 0.00% intr{irq277: > cxgbc0} > 12 root -68 - 0K 816K WAIT 7 0:43 0.00% intr{irq282: > cxgbc0} > 12 root -68 - 0K 816K WAIT 7 0:41 0.00% intr{irq281: > cxgbc0} > 12 root -68 - 0K 816K WAIT 7 0:32 0.00% intr{irq276: > cxgbc0} > 12 root -68 - 0K 816K WAIT 7 0:31 0.00% intr{irq280: > cxgbc0} > > Back in the day there used to be code in cxgb to bind different > interrupts to different CPUs but it was removed because the kernel > distributed them across CPUs anyway. So what changed? This appears 8.3 > specific. I don't see it on head and I don't have a 9 system readily > available right now. Hmmm, that seems odd. It is true that the round-robin that the OS does only pins the low-level message from the APIC/MSI vector to the CPU. It does not affect the thread. However, ULE prefers to run ithreads on the CPU that processes the interrupt: static int sched_pickcpu(struct thread *td, int flags) { ... /* * Prefer to run interrupt threads on the processors that generate * the interrupt. */ if (td->td_priority <= PRI_MAX_ITHD && THREAD_CAN_SCHED(td, self) && curthread->td_intr_nesting_level && ts->ts_cpu != self) { SCHED_STAT_INC(pickcpu_intrbind); ts->ts_cpu = self; } } -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201205040828.18027.jhb>