irq cpu binding
Slawa Olhovchenkov
slw at zxy.spb.ru
Sat Mar 28 18:31:50 UTC 2015
On Sat, Mar 28, 2015 at 11:23:56AM -0700, Adrian Chadd wrote:
> Ah, I think that's because the taskqueues in the driver for deferred
> handling aren't also being pinned.
>
> I've talked to John about this - the problem is that all the
> taskqueues for all the drivers run under one kernel process. Find out
> their threadids and pin them too.
>
> Eg:
>
> # procstat -ta | grep em0
> 0 100024 kernel em0 que -1 8 sleep -
> 0 100025 kernel em0 txq -1 8 sleep -
# procstat -ta | grep ix0
0 100065 kernel ix0 que 6 8 run -
0 100067 kernel ix0 que 7 8 run -
0 100069 kernel ix0 que 8 8 run -
0 100071 kernel ix0 linkq 7 8 sleep -
12 100064 intr irq270: ix0:que 6 8 run -
12 100066 intr irq271: ix0:que 7 8 run -
12 100068 intr irq272: ix0:que 8 8 run -
12 100070 intr irq273: ix0:link 0 8 wait -
As you see -- I am already pined all.
# cpuset -g -x 270
irq 270 mask: 6
# cpuset -g -t 100065
tid 100065 mask: 6
# cpuset -g -t 100064
tid 100064 mask: 6
> # vmstat -ia | grep em
> irq256: em0 68465 1
> # cpuset -g -x 256
> irq 256 mask: 0, 1
> # cpuset -g -t 100024
> tid 100024 mask: 0, 1
> # cpuset -g -t 100025
> tid 100025 mask: 0, 1
>
> So you'd have to manually do that - there's no generic interface at
> the moment to be able to ask a device driver to re-mask its taskqueue
> thread(s) for a given queue and rewire its interrupt(s) for that
> queue.
>
> (That would be a nice smallish project to prototype, btw.)
More information about the freebsd-hackers
mailing list