All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dean Nelson <dcn@sgi.com>
To: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: hch@infradead.org, akpm@osdl.org, containers@lists.osdl.org,
	oleg@tv-sign.ru, linux-kernel@vger.kernel.org, jes@sgi.com,
	tony.luck@intel.com, Dean Nelson <dcn@sgi.com>
Subject: Re: [PATCH] ia64 sn xpc: Convert to use kthread API.
Date: Fri, 27 Apr 2007 15:12:11 -0500	[thread overview]
Message-ID: <20070427201211.GA20297@sgi.com> (raw)
In-Reply-To: <m1hcr1is4l.fsf@ebiederm.dsl.xmission.com>

On Fri, Apr 27, 2007 at 12:34:02PM -0600, Eric W. Biederman wrote:
> Dean Nelson <dcn@sgi.com> writes:
> >
> > Christoph is correct in that XPC has a single thread that exists throughout
> > its lifetime, another set of threads that exist for the time that active
> > contact with other XPCs running on other SGI system partitions exists, and
> > finally there is a pool of threads that exist on an as needed basis once
> > a channel connection has been established between two partitions.
> >
> > In principle I approve of the kthread API and its use as opposed to what
> > XPC currently does (calls kernel_thread(), daemonize(), wait_for_completion(),
> > and complete()). So Christoph's patch that changes the single long-lived
> > thread to use kthread_stop() and kthread_should_stop() is appreciated.
> >
> > But the fact that another thread, started at the xpc_init() time, that does
> > discovery of other SGI system partitions wasn't converted points out a
> > weekness in either my thinking or the kthread API. This discovery thread
> > does its job and then exits. Should XPC be rmmod'd while the discovery
> > thread is still running we would need to do a kthread_stop() against it. 
> > But kthread_stop() isn't set up to deal with a task that has already exited.
> > And if what once was the task structure of this exited task has been
> > reallocated to another new task, we'd end up stopping it should it be
> > operating under the kthread API, or possibly waiting a very long time
> > for it to exit if it is not.
> 
> Patches are currently under development to allow kthreads to exit
> before kthread_stop is called.  The big thing is that once we allow
> kernel threads that exited by themselves to be reaped by kthread_stop
> we have some significant work to do.
> 
> > I'm also a little uneasy that kthread_stop() has an "only one thread can
> > stop another thread at a time" design. It's a potential bottleneck on
> > very large systems where threads are blocked and unable to respond to a
> > kthread_should_stop() for some period of time.
> 
> There are already patches out there to fix this issue.
> 
> > XPC is in need of threads that can block indefinitely, which is why XPC
> > is in the business of maintaining a pool of threads. Currently there is
> > no such capability (that I know of) that is provided by linux. Workqueues
> > can't block indefinitely.
> 
> I'm not certain I understand this requirement.  Do you mean block indefinitely
> unless requested to stop?

These threads can block waiting for a hardware DMA engine, which has a 28
second timeout setpoint.

> > And for performance reasons these threads need to be able to be created
> > quickly. These threads are involved in delivering messages to XPC's users
> > (like XPNET) and we had latency issues that led us to use kernel_thread()
> > directly instead of the kthread API. Additionally, XPC may need to have
> > hundreds of these threads active at any given time.
> 
> Ugh.  Can you tell me a little more about the latency issues?

After placing a message in a local message queue, one SGI system partition
will interrupt another to retrieve the message. We need to minimize the
time from entering XPC's interrupt handler to the time that the message
can be DMA transferred and delivered to the consumer (like XPNET) to
whom it was sent.

> Is having a non-halting kthread_create enough to fix this?
> So you don't have to context switch several times to get the
> thread running?
> 
> Or do you need more severe latency reductions?
> 
> The more severe fix would require some significant changes to copy_process
> and every architecture would need to be touched to fix up copy_thread.
> It is possible, it is a lot of work, and the reward is far from obvious.

I think a non-halting kthread_create() should be sufficient. It is in
effect what XPC has now in calling kernel_thread() directly.

Taking it one step further, if you added the notion of a thread pool,
where upon exit, a thread isn't destroyed but rather is queued ready to
handle the next kthread_create_quick() request.

> > I think it would be great if the kthread API (or underlying implementation)
> > could be changed to handle these issues. I'd love for XPC to not have to
> > maintain this sort of thing itself.
> 
> Currently daemonize is a serious maintenance problem.
> 
> Using daemonize and kernel_thread to create kernel threads is a blocker
> in implementing the pid namespace because of their use of pid_t.
> 
> So I am motivated to get this fixed.

This would also address the problems we see with huge pid spaces for
kernel threads on our largest machines.  In the example from last week,
we had 10 threads each on 4096 cpus.  If we reworked work_queues to use
the kthread_create_nonblocking() thread pool, we could probably collapse
the need for having all of those per-task, per-cpu work queues.

Dean

  reply	other threads:[~2007-04-27 20:12 UTC|newest]

Thread overview: 237+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-19  6:52 Remaining straight forward kthread API conversions Eric W. Biederman
2007-04-19  6:55 ` [PATCH] i386 balance_irq: Convert to the kthread api Eric W. Biederman
2007-04-19  6:55 ` [PATCH] i386 voyager: Convert the monitor thread to use the kthread API Eric W. Biederman
2007-04-22 19:30   ` Christoph Hellwig
2007-04-19  6:55 ` [PATCH] mtd_blkdevs: Convert " Eric W. Biederman
2007-04-19 16:47   ` Christoph Hellwig
2007-04-19 19:13     ` Eric W. Biederman
2007-04-19 22:26       ` Andrew Morton
2007-04-22 12:24   ` Christoph Hellwig
2007-04-22 13:23     ` David Woodhouse
2007-04-22 19:26       ` Christoph Hellwig
2007-04-22 19:40     ` Christoph Hellwig
2007-04-19  6:55 ` [PATCH] cpci_hotplug: " Eric W. Biederman
2007-04-22 12:05   ` Christoph Hellwig
2007-04-23 16:19     ` Scott Murray
2007-04-27 22:07     ` Scott Murray
2007-05-04 11:12       ` Christoph Hellwig
2007-05-07 18:18         ` Scott Murray
2007-05-09 23:24           ` Andrew Morton
2007-05-10  0:00             ` Kristen Carlson Accardi
2007-05-10 18:29             ` Scott Murray
2007-05-10 19:30               ` Andrew Morton
2007-04-19  6:55 ` [PATCH] ibmphp: Convert to use the kthreads API Eric W. Biederman
2007-04-22 12:09   ` Christoph Hellwig
2007-04-19  6:55 ` [PATCH] cpqphp: Convert to use the kthread API Eric W. Biederman
2007-04-22 12:12   ` Christoph Hellwig
2007-04-19  6:55 ` [PATCH] pnpbios: Conert " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] sas_scsi_host: Convert " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] sparc64/power.c: " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] s390/net/lcs: Convert to " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] s390 qeth: Convert to use " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] s390/scsi/zfcp_erp: " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] arm ecard: Conver " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] ia64 sn xpc: Convert to use " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] powerpc pseries eeh: Convert to " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] powerpc pseries rtasd: " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] macintosh/therm_pm72.c: " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] macintosh/therm_windtunnel.c: " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] macintosh/adb: Convert to the " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] macintosh/mediabay: Convert to " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] bluetooth bnep: " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] bluetooth cmtp: Convert to use " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] bluetooth hidp: Convert to " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] bluetooth rfcomm: " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] fs/afs: " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] net/rxrpc: " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] ipv4/ipvs: " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] saa7134-tvaudio: " Eric W. Biederman
2007-04-20 12:48   ` Cedric Le Goater
2007-04-20 13:05     ` Christoph Hellwig
2007-04-19  6:55 ` [PATCH] nfs lockd reclaimer: " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] nfsv4 delegation: " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] nfsd/nfs4state: Remove unnecessary daemonize call Eric W. Biederman
2007-04-19  6:55 ` [PATCH] nfs4state reclaimer: Remove unnecessary allow_signal Eric W. Biederman
2007-04-19  6:55 ` [PATCH] smbfs: " Eric W. Biederman
2007-04-19  6:55 ` [PATCH] dvb_en_50221: Convert to kthread API Eric W. Biederman
2007-04-19  6:56 ` [PATCH] md: Remove broken SIGKILL support Eric W. Biederman
2007-04-19  6:56 ` [PATCH] synchro_test: Convert to the kthread API Eric W. Biederman
2007-04-19  6:56 ` Eric W. Biederman
2007-04-19  7:58 ` [PATCH] i386 balance_irq: Convert to the kthread api Eric W. Biederman
2007-04-19  7:58 ` [PATCH] i386 voyager: Convert the monitor thread to use the kthread API Eric W. Biederman
2007-04-19  7:58 ` [PATCH] mtd_blkdevs: Convert " Eric W. Biederman
2007-04-19  7:58 ` [PATCH] cpci_hotplug: " Eric W. Biederman
2007-04-19  7:58 ` [PATCH] ibmphp: Convert to use the kthreads API Eric W. Biederman
2007-04-19  7:58 ` [PATCH] cpqphp: Convert to use the kthread API Eric W. Biederman
2007-04-20  1:54   ` Andrew Morton
2007-04-19  7:58 ` [PATCH] pnpbios: Conert " Eric W. Biederman
2007-04-19  7:58 ` [PATCH] sas_scsi_host: Convert " Eric W. Biederman
2007-04-20  0:37   ` Andrew Morton
2007-04-22 19:38     ` Christoph Hellwig
2007-04-22 21:37       ` James Bottomley
2007-04-22 21:48         ` Eric W. Biederman
2007-04-19  7:58 ` [PATCH] sparc64/power.c: " Eric W. Biederman
2007-04-20  0:30   ` Andrew Morton
2007-04-19  7:58 ` [PATCH] s390/net/lcs: Convert to " Eric W. Biederman
2007-04-19  8:19   ` Frank Pavlic
2007-04-19  7:58 ` [PATCH] s390 qeth: Convert to use " Eric W. Biederman
2007-04-19  7:58 ` [PATCH] s390/scsi/zfcp_erp: " Eric W. Biederman
2007-04-22 20:17   ` Christoph Hellwig
2007-04-30 10:41     ` Swen Schillig
2007-04-19  7:58 ` [PATCH] arm ecard: Conver " Eric W. Biederman
2007-04-22 20:18   ` Christoph Hellwig
2007-04-19  7:58 ` [PATCH] ia64 sn xpc: Convert to use " Eric W. Biederman
2007-04-19 23:51   ` Andrew Morton
2007-04-20  6:23     ` Jes Sorensen
2007-04-20 14:21       ` Robin Holt
2007-04-21 19:53         ` Eric W. Biederman
2007-04-22 20:36   ` Christoph Hellwig
2007-04-23 17:11     ` Jes Sorensen
2007-04-23 17:11       ` Jes Sorensen
2007-04-23 17:36       ` Eric W. Biederman
2007-04-23 17:36         ` Eric W. Biederman
2007-04-23 19:03       ` Russ Anderson
2007-04-23 19:03         ` Russ Anderson
2007-04-27 17:41     ` Dean Nelson
2007-04-27 18:34       ` Eric W. Biederman
2007-04-27 20:12         ` Dean Nelson [this message]
2007-04-27 20:33           ` Eric W. Biederman
2007-04-30 15:22             ` Dean Nelson
2007-05-02 15:16               ` Dean Nelson
2007-05-02 15:44                 ` Eric W. Biederman
2007-05-17 13:44                   ` Dean Nelson
2007-04-26 20:00   ` Dean Nelson
2007-04-19  7:58 ` [PATCH] powerpc pseries eeh: Convert to " Eric W. Biederman
2007-04-19 23:47   ` Andrew Morton
2007-04-22 12:31   ` Christoph Hellwig
2007-04-22 12:31     ` Christoph Hellwig
2007-04-23 20:50     ` Linas Vepstas
2007-04-24  1:38       ` Benjamin Herrenschmidt
2007-04-24  1:38         ` Benjamin Herrenschmidt
2007-04-24  2:08         ` Eric W. Biederman
2007-04-24  2:08           ` Eric W. Biederman
2007-04-24  2:42           ` Benjamin Herrenschmidt
2007-04-24  2:42             ` Benjamin Herrenschmidt
2007-04-24  3:20             ` Eric W. Biederman
2007-04-24  3:20               ` Eric W. Biederman
2007-04-24  4:34               ` Paul Mackerras
2007-04-24  4:34                 ` Paul Mackerras
2007-04-24  4:34                 ` Paul Mackerras
2007-04-24  4:51                 ` Eric W. Biederman
2007-04-24  4:51                   ` Eric W. Biederman
2007-04-24  5:00               ` Benjamin Herrenschmidt
2007-04-24  5:00                 ` Benjamin Herrenschmidt
2007-04-24  5:43                 ` Eric W. Biederman
2007-04-24  5:43                   ` Eric W. Biederman
2007-04-24  5:58                   ` Benjamin Herrenschmidt
2007-04-24  5:58                     ` Benjamin Herrenschmidt
2007-04-24  6:17                   ` SOME STUFF ABOUT REISER4 lkml777
2007-04-24  6:17                     ` lkml777
2007-04-24 17:26                     ` Eric M. Hopper
2007-04-24  7:46                 ` [PATCH] powerpc pseries eeh: Convert to kthread API Cornelia Huck
2007-04-24  7:46                   ` Cornelia Huck
2007-04-24 17:24         ` Linas Vepstas
2007-04-24 17:24           ` Linas Vepstas
2007-04-24  5:55     ` Paul Mackerras
2007-04-24  5:55       ` Paul Mackerras
2007-04-24  8:37       ` Christoph Hellwig
2007-04-24  8:37         ` Christoph Hellwig
2007-04-24 17:35     ` Linas Vepstas
2007-04-19  7:58 ` [PATCH] powerpc pseries rtasd: " Eric W. Biederman
2007-04-22 12:34   ` Christoph Hellwig
2007-04-19  7:58 ` [PATCH] macintosh/therm_pm72.c: " Eric W. Biederman
2007-04-22 19:16   ` Christoph Hellwig
2007-04-22 22:46     ` Paul Mackerras
2007-04-19  7:58 ` [PATCH] macintosh/therm_windtunnel.c: " Eric W. Biederman
2007-04-19 23:37   ` Andrew Morton
2007-04-20  8:53     ` Benjamin Herrenschmidt
2007-04-19  7:58 ` [PATCH] macintosh/adb: Convert to the " Eric W. Biederman
2007-04-19  7:58 ` [PATCH] macintosh/mediabay: Convert to " Eric W. Biederman
2007-04-19 23:30   ` Andrew Morton
2007-04-20  8:51     ` Benjamin Herrenschmidt
2007-04-19  7:58 ` [PATCH] bluetooth bnep: " Eric W. Biederman
2007-04-19 23:24   ` Andrew Morton
2007-04-20 10:20     ` [Devel] " Cedric Le Goater
2007-04-20 12:37       ` Cedric Le Goater
2007-04-21 16:11         ` Satyam Sharma
2007-04-22 19:44     ` Christoph Hellwig
2007-04-23  3:12       ` [PATCH] kthread: Spontaneous exit support Eric W. Biederman
2007-04-23 11:25         ` Christoph Hellwig
2007-04-23 16:58           ` Oleg Nesterov
2007-04-23 17:45             ` Eric W. Biederman
2007-04-23 18:09               ` Christoph Hellwig
2007-04-23 18:20               ` Oleg Nesterov
2007-04-24 13:08           ` Jan Engelhardt
2007-04-24 13:34             ` Christoph Hellwig
2007-04-19  7:58 ` [PATCH] bluetooth cmtp: Convert to use kthread API Eric W. Biederman
2007-04-19  7:58 ` [PATCH] bluetooth hidp: Convert to " Eric W. Biederman
2007-04-19 23:20   ` Andrew Morton
2007-04-19  7:58 ` [PATCH] bluetooth rfcomm: " Eric W. Biederman
2007-04-19 23:12   ` Andrew Morton
2007-04-20 15:20     ` [Devel] " Cedric Le Goater
2007-04-22 20:14     ` Christoph Hellwig
2007-04-19  7:58 ` [PATCH] fs/afs: " Eric W. Biederman
2007-04-19  9:32   ` David Howells
2007-04-19  7:58 ` [PATCH] net/rxrpc: " Eric W. Biederman
2007-04-19  9:32   ` David Howells
2007-04-19 13:05     ` Eric W. Biederman
2007-04-19 14:18       ` Getting the new RxRPC patches upstream David Howells
2007-04-19 15:50         ` Eric W. Biederman
2007-04-19 16:18           ` David Howells
2007-04-19 19:14             ` Eric W. Biederman
2007-04-19 20:14         ` David Miller
2007-04-20  1:15           ` Herbert Xu
2007-04-20  8:02           ` David Howells
2007-04-20  8:58             ` David Miller
2007-04-20 10:41               ` David Howells
2007-04-20 18:38                 ` Andrew Morton
2007-04-20 21:28                   ` Oleg Nesterov
2007-04-23  8:32                     ` David Howells
2007-04-23 17:11                       ` Oleg Nesterov
2007-04-24 13:37                         ` David Howells
2007-04-24 14:22                           ` Oleg Nesterov
2007-04-24 15:51                             ` David Howells
2007-04-24 16:40                               ` Oleg Nesterov
2007-04-24 16:58                                 ` David Howells
2007-04-24 17:33                                   ` Oleg Nesterov
2007-04-24 18:22                                     ` David Howells
2007-04-24 19:34                                       ` Oleg Nesterov
2007-04-25  8:10                                         ` David Howells
2007-04-25 10:41                                           ` Oleg Nesterov
2007-04-25 10:45                                             ` David Howells
2007-04-25 13:48               ` David Howells
2007-04-19 23:05     ` [PATCH] net/rxrpc: Convert to kthread API Andrew Morton
2007-04-20  7:47       ` David Howells
2007-04-19  7:58 ` [PATCH] ipv4/ipvs: " Eric W. Biederman
2007-04-19  9:04   ` Simon Horman
2007-04-19 22:59     ` Andrew Morton
2007-04-22 19:50       ` Christoph Hellwig
2007-04-19  7:58 ` [PATCH] saa7134-tvaudio: " Eric W. Biederman
2007-04-19 22:52   ` Andrew Morton
2007-04-19  7:58 ` [PATCH] nfs lockd reclaimer: " Eric W. Biederman
2007-04-19 16:21   ` Trond Myklebust
2007-04-19 19:20     ` Eric W. Biederman
2007-04-19 21:19       ` Trond Myklebust
2007-04-19 21:25         ` Dave Hansen
2007-04-21 19:04           ` Eric W. Biederman
2007-04-19 21:40         ` Andrew Morton
2007-04-19 22:04           ` Trond Myklebust
2007-04-21 19:47             ` Eric W. Biederman
2007-04-19  7:59 ` [PATCH] nfsv4 delegation: " Eric W. Biederman
2007-04-19 16:22   ` Trond Myklebust
2007-04-19  7:59 ` [PATCH] nfsd/nfs4state: Remove unnecessary daemonize call Eric W. Biederman
2007-04-19  7:59 ` [PATCH] nfs4state reclaimer: Remove unnecessary allow_signal Eric W. Biederman
2007-04-19 16:26   ` Trond Myklebust
2007-04-19  7:59 ` [PATCH] smbfs: " Eric W. Biederman
2007-04-19 22:47   ` Andrew Morton
2007-04-19  7:59 ` [PATCH] dvb_en_50221: Convert to kthread API Eric W. Biederman
2007-04-19 22:34   ` Andrew Morton
2007-04-20  6:37     ` Christoph Hellwig
2007-04-20  6:48       ` Andrew Morton
2007-04-20  9:37         ` Cedric Le Goater
2007-04-19  7:59 ` [PATCH] md: Remove broken SIGKILL support Eric W. Biederman
2007-05-01  0:47   ` Neil Brown
2007-05-01  6:13     ` Eric W. Biederman
2007-04-19  7:59 ` [PATCH] synchro_test: Convert to the kthread API Eric W. Biederman
2007-04-19  7:59 ` Eric W. Biederman
2007-04-22 12:15 ` Remaining straight forward kthread API conversions Christoph Hellwig

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=20070427201211.GA20297@sgi.com \
    --to=dcn@sgi.com \
    --cc=akpm@osdl.org \
    --cc=containers@lists.osdl.org \
    --cc=ebiederm@xmission.com \
    --cc=hch@infradead.org \
    --cc=jes@sgi.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=oleg@tv-sign.ru \
    --cc=tony.luck@intel.com \
    /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.