Re: Permit init(8) use its own cpuset group.

看板FB_hackers作者時間11年前 (2014/06/06 05:32), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串8/11 (看更多)
On 05.06.2014 23:59, John Baldwin wrote: > On Thursday, June 05, 2014 3:46:15 pm Alexander V. Chernikov wrote: >> On 05.06.2014 18:09, John Baldwin wrote: >>> On Wednesday, June 04, 2014 3:16:59 pm Alexander V. Chernikov wrote: >>>> On 04.06.2014 19:06, John Baldwin wrote: >>>>> On Monday, June 02, 2014 12:48:50 pm Konstantin Belousov wrote: >>>>>> On Mon, Jun 02, 2014 at 06:52:10PM +0400, Alexander V. Chernikov wrote: >>>>>>> Hello list! >>>>>>> >>>>>>> Currently init(8) uses group 1 which is root group. >>>>>>> Modifications of this group affects both kernel and userland threads. >>>>>>> Additionally, such modifications are impossible, for example, in >>> presence >>>>>>> of multi-queue NIC drivers (like igb or ixgbe) which binds their > threads >>>>> to >>>>>>> particular cpus. >>>>>>> >>>>>>> Proposed change ("init_cpuset" loader tunable) permits changing cpu >>>>>>> masks for >>>>>>> userland more easily. Restricting user processes to migrate to/from > CPU >>>>>>> cores >>>>>>> used for network traffic processing is one of the cases. >>>>>>> >>>>>>> Phabricator: https://phabric.freebsd.org/D141 (the same version > attached >>>>>>> inline) >>>>>>> >>>>>>> If there are no objections, I'll commit this next week. >>>>>> Why is the tunable needed ? >>>>> Because some people already depend on doing 'cpuset -l 0 -s 1'. It is >>> also >>>>> documented in our manpages that processes start in cpuset 1 by default > so >>>>> that you can use 'cpuset -l 0 -s 1' to move all processes, etc. >>>>> >>>>> For the stated problem (bound ithreads in drivers), I would actually > like >>> to >>>>> fix ithreads that are bound to a specific CPU to create a different > cpuset >>>>> instead so they don't conflict with set 1. >>>> Yes, this seem to be much better approach. >>>> Please take a look on the new patch (here or in the phabricator). >>>> Comments: >>>> >>>> Use different approach for modifyable root set: >>>> >>>> * Make sets in 0..15 internal >>>> * Define CPUSET_SET1 & CPUSET_ITHREAD in that range >>>> * Add cpuset_lookup_builtin() to retrieve such cpu sets by id >>>> * Create additional root set for ithreads >>>> * Use this set in ithread_create() >>>> * Change intr_setaffinity() to use cpuset_iroot (do we really need > this)? >>>> >>>> We can probably do the same for kprocs, but I'm unsure if we really need > it. >>> >>> I imagined something a bit simpler. Just create a new set in > intr_event_bind >>> and bind the ithread to the new set. No need to have more magic set ids, > etc. >> Well, we also have userland which can modify given changes via `cpuset >> -x', so we need to be able to add some more logic on set >> allocation/keeping. Additionally, we can try to do the same via `cpuset >> -t', so introducing something like cpuset_setIthread() and hooking into >> intr_event_bind() won't probably be enough. At least I can't think out a >> quick and easy way to do this. > > cpuset -x calls intr_event_bind(). If you just do it there you fix both > places. 1:04 [0] ra# procstat -t 12 | grep irq275 12 100121 intr irq275: ix0:qu1 2 127 wait - 1:04 [0] ra# cpuset -g -x 275 irq 275 mask: 2 1:04 [0] ra# cpuset -g -t 100121 tid 100121 mask: 2 1:04 [0] ra# cpuset -l 3 -t 100121 -------------------------^^^------ 1:05 [0] ra# cpuset -g -t 100121 tid 100121 mask: 3 > >>> That also means that an ithread that isn't bound to a specific CPU via > either >>> 'cpuset -x' or BUS_BIND_INTR() will honor 'cpuset -s 1' like other >>> kernel processes. I think that's probably fine and sensible. The issue > is >> Well, it is questionable. Kernel threads are a bit different in terms of >> TLB changes, memory working set and so on. (Personally I'd prefer to >> separate user / kthreads / ithreads to different sets in HEAD but that's >> another story). >> >> Anyway, we probably can (and should) MFC a bit different version which >> tries to change several sets at once if user supplied set 1 as argument. > > No, I don't think we need umpteen special sets. I think we just need to fix > this one specific case of bound ithreads and everything else will work fine. > If someone wants to move kprocs out of set 1, they can already do that with > the existing tools via cpuset -C, etc. > _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"
文章代碼(AID): #1JaE7JKH (FB_hackers)
討論串 (同標題文章)
文章代碼(AID): #1JaE7JKH (FB_hackers)