From: Andrew Morton <akpm@linux-foundation.org>
To: Oleg Nesterov <oleg@redhat.com>
Cc: Trond.Myklebust@netapp.com, dhowells@redhat.com,
serue@us.ibm.com, steved@redhat.com, viro@zeniv.linux.org.uk,
Daire.Byrne@framestore.com, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] slow_work_thread() should do the exclusive wait
Date: Wed, 15 Apr 2009 16:27:12 -0700 [thread overview]
Message-ID: <20090415162712.342d4c07.akpm@linux-foundation.org> (raw)
In-Reply-To: <20090413222451.GA2758@redhat.com>
On Tue, 14 Apr 2009 00:24:51 +0200
Oleg Nesterov <oleg@redhat.com> wrote:
> On 04/13, Trond Myklebust wrote:
> >
> > On Mon, 2009-04-13 at 23:48 +0200, Oleg Nesterov wrote:
> > > On 04/13, David Howells wrote:
> > > >
> > > > Trond Myklebust <Trond.Myklebust@netapp.com> wrote:
> > > >
> > > > > Should that really be TASK_INTERRUPTIBLE? I don't see anything obvious
> > > > > in the enclosing for(;;) loop that checks for or handles signals...
> > > >
> > > > If it were TASK_UNINTERRUPTIBLE, it would sit there in the D-state when not
> > > > doing anything. I must admit, I thought I was calling daemonize(), but that
> > > > seems to have got lost somewhere.
> > >
> > > daemonize() is not needed, kthread_create() creates the kernel thread which
> > > ignores all signals. So it doesn't matter which state we use to sleep,
> > > TASK_INTERRUPTIBLE or TASK_UNINTERRUPTIBLE.
> >
> > Yes, but that is precisely why it is cleaner to use
> > TASK_UNINTERRUPTIBLE. It documents the fact that signal handling isn't
> > needed (whether or not the thread is blocking them).
>
> Agreed. But TASK_UNINTERRUPTIBLE can confuse a user which does
> "cat /proc/loadavg" on the idle machine...
>
> Note that, for example, worker_thread() uses TASK_INTERRUPTIBLE too, and I
> think for the same reason.
>
Yup. It's a very common pattern for kernel threads to sleep in state
TASK_INTERRUPTIBLE. It is "well known" (lol) that kernel threads don't
accept signals, and having a kernel thread sleep in state
TASK_UNINTERRUPTIBLE will indeed contribute to load average and we get
distressed emails quite promptly when we do that.
The patch itself is a little worrisome. The wake-all semantics are
very good at covering up little race bugs. And switching to wake-once
is a great way of exposing hitherto-unsuspected races.
<looks for races>
Nothing immediately leaps out, but you know how these things are.
I wonder if slow_work_cull_timeout() should have some sort of barrier,
so the write is suitably visible to the woken thread. Bearing in mind
that the thread might _already_ have been woken by someone else?
off-topic: afacit the code will cull a maximum of one thread per five
seconds. But the rate of thread _creation_ is, afacit, unbound. Are
there scenarios in which we can get a runaway thread count?
next prev parent reply other threads:[~2009-04-15 23:32 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-13 18:17 [PATCH] slow_work_thread() should do the exclusive wait Oleg Nesterov
2009-04-13 19:03 ` Trond Myklebust
2009-04-13 19:14 ` Oleg Nesterov
2009-04-13 21:40 ` David Howells
2009-04-13 21:48 ` Oleg Nesterov
2009-04-13 21:57 ` Trond Myklebust
2009-04-13 22:24 ` Oleg Nesterov
2009-04-15 23:27 ` Andrew Morton [this message]
2009-04-16 9:10 ` David Howells
2009-04-16 14:33 ` Oleg Nesterov
2009-04-22 13:37 ` [PATCH] Document that wake_up(), complete() and co. imply a full memory barrier David Howells
2009-04-22 13:51 ` Ingo Molnar
2009-04-22 14:39 ` Oleg Nesterov
2009-04-22 14:56 ` Ingo Molnar
2009-04-22 15:07 ` Oleg Nesterov
2009-04-22 15:12 ` David Howells
2009-04-22 15:19 ` Ingo Molnar
2009-04-22 16:23 ` David Howells
2009-04-22 17:57 ` Ingo Molnar
2009-04-23 16:32 ` [PATCH] It may not be assumed that wake_up(), finish_wait() and co. imply a " David Howells
2009-04-23 16:55 ` Oleg Nesterov
2009-04-24 11:46 ` David Howells
2009-04-24 15:08 ` Paul E. McKenney
2009-04-24 17:08 ` Oleg Nesterov
2009-04-24 17:43 ` Paul E. McKenney
2009-04-24 17:48 ` David Howells
2009-04-24 18:06 ` Paul E. McKenney
2009-04-28 10:18 ` David Howells
2009-04-28 13:00 ` Paul E. McKenney
2009-04-24 17:28 ` Oleg Nesterov
2009-04-24 17:53 ` David Howells
2009-04-24 18:30 ` Oleg Nesterov
2009-04-23 17:07 ` Linus Torvalds
2009-04-23 20:35 ` David Howells
2009-04-23 21:12 ` Linus Torvalds
2009-04-23 21:24 ` Ingo Molnar
2009-04-23 16:36 ` [PATCH] Document that wake_up(), complete() and co. imply a full " Oleg Nesterov
2009-04-23 20:37 ` David Howells
2009-04-23 16:00 ` [PATCH] slow_work_thread() should do the exclusive wait David Howells
2009-04-23 16:18 ` Oleg Nesterov
2009-04-13 21:35 ` David Howells
-- strict thread matches above, loose matches on Subject: below --
2009-06-11 12:12 David Howells
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090415162712.342d4c07.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=Daire.Byrne@framestore.com \
--cc=Trond.Myklebust@netapp.com \
--cc=dhowells@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=oleg@redhat.com \
--cc=serue@us.ibm.com \
--cc=steved@redhat.com \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.