Re: [PATCH 2 of 4] Introduce i386 fibril scheduling

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Ingo Molnar
Date: Friday, February 2, 2007 - 3:49 am

* Linus Torvalds <torvalds@linux-foundation.org> wrote:


we might be talking past each other.

i never suggested every aio op should create/destroy a kernel thread!

My only suggestion was to have a couple of transparent kernel threads 
(not fibrils) attached to a user context that does asynchronous 
syscalls! Those kernel threads would be 'switched in' if the current 
user-space thread blocks - so instead of having to 'create' any of them 
- the fast path would be to /switch/ them to under the current 
user-space, so that user-space processing can continue under that other 
thread!

That means that in the 'switch kernel context' fastpath it simply needs 
to copy the blocked threads' user-space ptregs (~64 bytes) to its own 
kernel stack, and then it can do a return-from-syscall without 
user-space noticing the switch! Never would we really see the cost of 
kernel thread creation. We would never see that cost in the fully cached 
case (no other thread is needed then), nor would we see it in the 
blocking-IO case, due to pooling. (there are some other details related 
to things like the FPU context, but you get the idea.)

Let me quote Zach's reply to my suggestions:

| It'd certainly be doable to throw together a credible attempt to 
| service "asys" system call submission with full-on kernel threads. 
| That seems like reasonable due diligence to me.  If full-on threads 
| are almost as cheap, great. If fibrils are so much cheaper that they 
| seem to warrant investing in, great.

that's all i wanted to see being considered!

Please ignore my points about scheduling costs - i only talked about 
them at length because the only fundamental difference between kernel 
threads and fibrils is their /scheduling/ properties. /Not/ the 
setup/teardown costs - those are not relevant /precisely/ because they 
can be pooled and because they happen relatively rarely, compared to the 
cached case. The 'switch to the blocked thread's ptregs' operation also 
involves a context-switch under this design. That's why i was talking 
about scheduling so much: the /only/ true difference between fibrils and 
kernel threads is their /scheduling/.

I believe this is the point where your argument fails:


you are comparing apples to oranges - i never said we should 
create/destroy a kernel thread for every async op. That would be insane!

what we need to support asynchronous system-calls is the ability to pick 
up an /already created/ kernel thread from a pool of per-task kernel 
threads and to switch it to under the current user-space and return to 
the user-space stack with that new kernel thread running. (The other, 
blocked kernel thread stays blocked and is returned into the pool of 
'pending' AIO kernel threads.) And this only needs to happen in the 
'cachemiss' case anyway. In the 'cached' case no other kernel thread 
would be involved at all, the current one just falls straight through 
the system-call.

my argument is that the whole notion of cutting this at the kernel stack 
and thread info level and making fibrils in essence a separate 
scheduling entitity is wrong, wrong, wrong. Why not use plain kernel 
threads for this?

[ finally, i think you totally ignored my main argument, state machines.
  The networking stack is a full and very nice state machine. It's
  kicked from user-space, and zillions of small contexts (sockets) are
  living on without any of the originating tasks having to be involved.
  So i'm still holding to the fundamental notion that within the kernel
  this form of AIO is a nice but /secondary/ mechanism. If a subsystem
  is able to pull it off, it can implement asynchronity via a state
  machine - and it will outperform any thread based AIO. Or not. We'll
  see. For something like the VFS i doubt we'll see (and i doubt we
  /want/ to see) a 'native' state-machine implementation.

  this is btw. quite close to the Tux model of doing asynchronous block
  IO and asynchronous VFS events such as asynchronous open(). Tux uses a
  pool of kernel threads to pass blocking work to, while not holding up
  the 'main' thread. But the main Tux speedup comes from having a native
  state machine for all the networking IO. ]

	Ingo
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 0 of 4] Generic AIO by scheduling stacks, Zach Brown, (Tue Jan 30, 1:39 pm)
[PATCH 1 of 4] Introduce per_call_chain(), Zach Brown, (Tue Jan 30, 1:39 pm)
[PATCH 2 of 4] Introduce i386 fibril scheduling, Zach Brown, (Tue Jan 30, 1:39 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Linus Torvalds, (Tue Jan 30, 2:58 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Linus Torvalds, (Tue Jan 30, 3:23 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Zach Brown, (Tue Jan 30, 3:40 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Zach Brown, (Tue Jan 30, 3:53 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Linus Torvalds, (Tue Jan 30, 3:53 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Zach Brown, (Tue Jan 30, 4:45 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Benjamin Herrenschmidt, (Tue Jan 30, 7:04 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Benjamin Herrenschmidt, (Tue Jan 30, 7:07 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Linus Torvalds, (Tue Jan 30, 7:46 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Linus Torvalds, (Tue Jan 30, 8:02 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Benjamin Herrenschmidt, (Tue Jan 30, 10:16 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Nick Piggin, (Tue Jan 30, 10:36 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Nick Piggin, (Tue Jan 30, 10:51 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Linus Torvalds, (Tue Jan 30, 11:06 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Ingo Molnar, (Wed Jan 31, 1:43 am)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Xavier Bestel, (Wed Jan 31, 3:50 am)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Zach Brown, (Wed Jan 31, 10:38 am)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Zach Brown, (Wed Jan 31, 10:47 am)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Benjamin LaHaise, (Wed Jan 31, 10:51 am)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Zach Brown, (Wed Jan 31, 10:59 am)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Zach Brown, (Wed Jan 31, 11:20 am)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Zach Brown, (Wed Jan 31, 12:25 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Zach Brown, (Wed Jan 31, 12:28 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Benjamin LaHaise, (Wed Jan 31, 1:05 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Joel Becker, (Wed Jan 31, 1:13 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Zach Brown, (Wed Jan 31, 1:41 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Ingo Molnar, (Thu Feb 1, 1:36 am)
Re: [PATCH 4 of 4] Introduce aio system call submission an ..., Suparna Bhattacharya, (Thu Feb 1, 4:13 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Ingo Molnar, (Thu Feb 1, 6:02 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Christoph Hellwig, (Thu Feb 1, 6:19 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Ingo Molnar, (Thu Feb 1, 6:52 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Mark Lord, (Thu Feb 1, 10:13 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Ingo Molnar, (Thu Feb 1, 11:02 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Linus Torvalds, (Thu Feb 1, 1:07 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Zach Brown, (Thu Feb 1, 2:52 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Benjamin LaHaise, (Thu Feb 1, 3:23 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Zach Brown, (Thu Feb 1, 3:37 pm)
Re: [PATCH 4 of 4] Introduce aio system call submission an ..., Suparna Bhattacharya, (Thu Feb 1, 8:35 pm)
Re: [PATCH 4 of 4] Introduce aio system call submission an ..., Suparna Bhattacharya, (Fri Feb 2, 12:19 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Ingo Molnar, (Fri Feb 2, 3:49 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Andi Kleen, (Fri Feb 2, 6:22 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Andi Kleen, (Fri Feb 2, 6:23 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Linus Torvalds, (Fri Feb 2, 8:56 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Linus Torvalds, (Fri Feb 2, 1:14 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Davide Libenzi, (Fri Feb 2, 1:58 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Linus Torvalds, (Fri Feb 2, 2:09 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Linus Torvalds, (Fri Feb 2, 2:30 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Ingo Molnar, (Fri Feb 2, 3:21 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Ingo Molnar, (Fri Feb 2, 3:42 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Linus Torvalds, (Fri Feb 2, 3:49 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Linus Torvalds, (Fri Feb 2, 4:01 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Linus Torvalds, (Fri Feb 2, 4:17 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Davide Libenzi, (Fri Feb 2, 4:37 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Ingo Molnar, (Fri Feb 2, 4:55 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Davide Libenzi, (Fri Feb 2, 5:02 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, bert hubert, (Fri Feb 2, 5:23 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Linus Torvalds, (Fri Feb 2, 5:56 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Suparna Bhattacharya, (Sat Feb 3, 12:15 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Ingo Molnar, (Sat Feb 3, 1:23 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Matt Mackall, (Sat Feb 3, 2:25 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Ingo Molnar, (Sat Feb 3, 3:03 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Davide Libenzi, (Sat Feb 3, 10:12 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Davide Libenzi, (Sat Feb 3, 10:13 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Davide Libenzi, (Sun Feb 4, 1:00 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Zach Brown, (Mon Feb 5, 9:44 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Zach Brown, (Mon Feb 5, 10:02 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Zach Brown, (Mon Feb 5, 10:12 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Zach Brown, (Mon Feb 5, 10:44 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Zach Brown, (Mon Feb 5, 10:54 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Davide Libenzi, (Mon Feb 5, 11:24 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Davide Libenzi, (Mon Feb 5, 11:52 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Zach Brown, (Mon Feb 5, 12:20 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Davide Libenzi, (Mon Feb 5, 12:26 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Davide Libenzi, (Mon Feb 5, 12:38 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Zach Brown, (Mon Feb 5, 12:41 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Davide Libenzi, (Mon Feb 5, 1:10 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Zach Brown, (Mon Feb 5, 1:21 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Linus Torvalds, (Mon Feb 5, 1:39 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Linus Torvalds, (Mon Feb 5, 1:42 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Davide Libenzi, (Mon Feb 5, 2:09 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Zach Brown, (Mon Feb 5, 2:21 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Kent Overstreet, (Mon Feb 5, 2:31 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, bert hubert, (Mon Feb 5, 2:36 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, David Miller, (Mon Feb 5, 2:44 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Linus Torvalds, (Mon Feb 5, 2:57 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, bert hubert, (Mon Feb 5, 3:07 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Zach Brown, (Mon Feb 5, 3:15 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Davide Libenzi, (Mon Feb 5, 3:34 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Davide Libenzi, (Mon Feb 5, 5:15 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Scot McKinley, (Mon Feb 5, 5:27 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Davide Libenzi, (Mon Feb 5, 5:32 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, David Miller, (Mon Feb 5, 5:48 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Joel Becker, (Mon Feb 5, 5:48 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Davide Libenzi, (Tue Feb 6, 1:25 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Linus Torvalds, (Tue Feb 6, 1:46 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, David Miller, (Tue Feb 6, 2:16 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Linus Torvalds, (Tue Feb 6, 2:28 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, David Miller, (Tue Feb 6, 2:31 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Eric Dumazet, (Tue Feb 6, 2:46 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Linus Torvalds, (Tue Feb 6, 2:50 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Zach Brown, (Tue Feb 6, 3:28 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Kent Overstreet, (Tue Feb 6, 3:45 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Linus Torvalds, (Tue Feb 6, 4:04 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Davide Libenzi, (Tue Feb 6, 4:23 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Joel Becker, (Tue Feb 6, 4:39 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Davide Libenzi, (Tue Feb 6, 4:56 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Joel Becker, (Tue Feb 6, 5:06 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Davide Libenzi, (Tue Feb 6, 5:23 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Joel Becker, (Tue Feb 6, 5:44 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Davide Libenzi, (Tue Feb 6, 6:15 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Kent Overstreet, (Tue Feb 6, 6:22 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Kent Overstreet, (Tue Feb 6, 6:24 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Joel Becker, (Tue Feb 6, 6:30 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Michael K. Edwards, (Tue Feb 6, 11:16 pm)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Michael K. Edwards, (Wed Feb 7, 2:17 am)
Re: [PATCH 2 of 4] Introduce i386 fibril scheduling, Michael K. Edwards, (Wed Feb 7, 2:37 am)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Linus Torvalds, (Fri Feb 9, 3:33 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Davide Libenzi, (Fri Feb 9, 4:11 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Linus Torvalds, (Fri Feb 9, 4:35 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Eric Dumazet, (Fri Feb 9, 5:04 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Linus Torvalds, (Fri Feb 9, 5:12 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, bert hubert, (Sat Feb 10, 3:47 am)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Davide Libenzi, (Sat Feb 10, 11:19 am)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Davide Libenzi, (Sat Feb 10, 11:45 am)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Linus Torvalds, (Sat Feb 10, 12:01 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Linus Torvalds, (Sat Feb 10, 12:35 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Davide Libenzi, (Sat Feb 10, 1:59 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, David Miller, (Sat Feb 10, 5:56 pm)
Re: [PATCH 0 of 4] Generic AIO by scheduling stacks, Linus Torvalds, (Sat Feb 10, 7:49 pm)