Messages in this thread | | | Date | Fri, 8 Nov 2013 17:31:14 +0100 | From | Frederic Weisbecker <> | Subject | Re: [PATCH] kmod: Run usermodehelpers only on cpus allowed for kthreadd V2 |
| |
On Fri, Nov 08, 2013 at 03:06:59PM +0000, Christoph Lameter wrote: > On Thu, 7 Nov 2013, Frederic Weisbecker wrote: > > > usermodehelper works are created via workqueues, right? And workqueues are an issue as > > well for those who want CPU isolation. > > AFAICT usermodehelper can be called from a variety of contexts.
But it looks like it always end up calling a workqueue. May be I missed something though.
Now we can argue that this workqueue seem to create kernel threads, which in turn create other kernel thread (uhh?) and I don't know if those inherit the kworker affinity. But from a quick look, it seems to me that this is what we want.
BTW the use of kernel_thread is justified in this comment: "/* Keventd can't block, but this (a child) can. */" Do these kernel_threads exist because kworker can't block? Actually the new workqueue subsystem can have blocking worklets now, may be something can be simplified there although I haven't checked the details. But perhaps we can spare one level of kernel threads.
Can't we use kthreads there btw? Or may be we need a task->mm to do the user things.
> > > So this looks like a more general problem than just call_usermodehelper. > > Well the code explicitly sets the the affinity mask to all cpus which > creates a problem for low latency processors. It does not inherit the > affinity from any calling process.
But how is that an argument in favour of changing this to inheriting the affinity from the workqueue thread rather than kthread?
> > > Last time I checked, it seemed to me that this is an unbound workqueue? If so can't we tune > > the affinity of this workqueue? If not perhaps that's something we want to solve and which > > could be useful for all the users who don't want their CPU to be disturbed. > > There are various contexts from which usermodehelper can be called. > Drivers use it etc.
But they all converge to the workqueue, or I'm missing other code paths?
Thanks.
| |