Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 28 Mar 2015 11:23:56 -0700
From:      Adrian Chadd <adrian@freebsd.org>
To:        Slawa Olhovchenkov <slw@zxy.spb.ru>
Cc:        "freebsd-hackers@freebsd.org" <freebsd-hackers@freebsd.org>
Subject:   Re: irq cpu binding
Message-ID:  <CAJ-Vmok=0=C%2BHLvLXEM5pbYp_zP6C498wudAfEA40s4AVpGa_w@mail.gmail.com>
In-Reply-To: <20150328181026.GB23643@zxy.spb.ru>
References:  <20150328112035.GZ23643@zxy.spb.ru> <CAJ-Vmo=sxtLgn1HABbWchu1Hm8kZ4Qy%2BscPeD7ezkkBzr%2BQijA@mail.gmail.com> <20150328154031.GA23643@zxy.spb.ru> <CAJ-VmokpWNy-arZ_=4hNbyAvzBYgDWu4F=vYSDwqPgpjaGHk=w@mail.gmail.com> <20150328181026.GB23643@zxy.spb.ru>

next in thread | previous in thread | raw e-mail | index | archive | help
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   -
# 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.)



-adrian



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-Vmok=0=C%2BHLvLXEM5pbYp_zP6C498wudAfEA40s4AVpGa_w>