public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re: debate on 700 threads vs asynchronous code
@ 2003-01-29 21:32 Dan Kegel
  0 siblings, 0 replies; 19+ messages in thread
From: Dan Kegel @ 2003-01-29 21:32 UTC (permalink / raw)
  To: linux-kernel

Lee Chin wrote:
 > Terje Eggestad <terje.eggestad@scali.com> wrote:
 >> Apart from the argument already given on other replies, you should
 >> keep in mind that you probably need to give priority to doing receive.
 >> THat include your clients, but if you don't you run into the risk of
 >> significantly limiting your bandwidth since the send queues around your
 >> system fill up.
 >>
 >> Try doing that with threads.
 >>
 >> Actually I would recommend the approach c)
 >>
 >> c)  Write an asynchronous system with only 2 or three threads where I
 >> manage the connections and keep the state of each connection in a data
 >> structure.
 >
> Today I do method (C)... but many people seem to say that, hey, pthreads does almost
> just that with a constant memory overhead of remembering the stack per blocking
> thread... so there is no time difference, just that pthreads consumes slightly more
> memory.  That is the issue I am trying to get my head around.

The best way to get your head around it is to
benchmark both approaches, and spend some time
refining your implementation of each so you
understand where the bottlenecks are.

> That particular question, no one has answered... in Linux, the scheduler will not go 
> around crazy trying to schedule prcosses that are all waiting on IO.  NOw the only 
> time I see a degrade in threads would be if all are runnable.... in that case a async
> scheme with two threads would let each task run to completion, not thrashing the
> kernel.  Is that correct to say?

There are lots of other issues, too.
Talk is cheap and fun, but only coding will give the real answer.
Go forth and code...

- Dan







^ permalink raw reply	[flat|nested] 19+ messages in thread
* Re: debate on 700 threads vs asynchronous code
@ 2003-01-29 17:26 Lee Chin
  2003-01-30  9:36 ` Terje Eggestad
  0 siblings, 1 reply; 19+ messages in thread
From: Lee Chin @ 2003-01-29 17:26 UTC (permalink / raw)
  To: terje.eggestad, leechin; +Cc: linux-kernel, linux-newbie

Today I do method (C)... but many people seem to say that, hey, pthreads does almost just that with a constant memory overhead of remembering the stack per blocking thread... so there is no time difference, just that pthreads consumes slightly more memory.  That is the issue I am trying to get my head around.

That particular question, no one has answered... in Linux, the scheduler will not go around crazy trying to schedule prcosses that are all waiting on IO.  NOw the only time I see a degrade in threads would be if all are runnable.... in that case a async scheme with two threads would let each task run to completion, not thrashing the kernel.  Is that correct to say?
----- Original Message -----
From: Terje Eggestad <terje.eggestad@scali.com>
Date: 27 Jan 2003 10:48:22 +0100
To: Lee Chin <leechin@mail.com>
Subject: Re: debate on 700 threads vs asynchronous code

> Apart from the argument already given on other replies, you should
> keep in mind that you probably need to give priority to doing receive.
> THat include your clients, but if you don't you run into the risk of
> significantly limiting your bandwidth since the send queues around your
> system fill up. 
> 
> Try doing that with threads. 
> 
> 
> Actually I would recommend the approach c)
> 
> c)  Write an asynchronous system with only 2 or three threads where I
> manage the connections and keep the state of each connection in a data
> structure.  
> 
> 
> On fre, 2003-01-24 at 00:19, Lee Chin wrote:
> > Hi
> > I am discussing with a few people on different approaches to solving a scale problem I am having, and have gotten vastly different views
> > 
> > In a nutshell, as far as this debate is concerned, I can say I am writing a web server.
> > 
> > Now, to cater to 700 clients, I can
> > a) launch 700 threads that each block on I/O to disk and to the client (in reading and writing on the socket)
> > 
> > OR
> > 
> > b) Write an asycnhrounous system with only 2 or three threads where I manage the connections and stack (via setcontext swapcontext etc), which is progromatically a little harder
> > 
> > Which way will yeild me better performance, considerng both approaches are implemented optimally?
> > 
> > Thanks
> > Lee
> -- 
> _________________________________________________________________________
> 
> Terje Eggestad                  mailto:terje.eggestad@scali.no
> Scali Scalable Linux Systems    http://www.scali.com
> 
> Olaf Helsets Vei 6              tel:    +47 22 62 89 61 (OFFICE)
> P.O.Box 150, Oppsal                     +47 975 31 574  (MOBILE)
> N-0619 Oslo                     fax:    +47 22 62 89 51
> NORWAY            
> _________________________________________________________________________
> 

-- 
__________________________________________________________
Sign-up for your own FREE Personalized E-mail at Mail.com
http://www.mail.com/?sr=signup


^ permalink raw reply	[flat|nested] 19+ messages in thread
[parent not found: <Pine.LNX.4.44.0301241840450.11758-100000@coffee.psychology.mcmaster.ca>]
[parent not found: <Pine.LNX.4.44.0301232144470.8203-100000@coffee.psychology.mcmaster.ca>]
[parent not found: <Pine.LNX.4.44.0301232028480.980-100000@coffee.psychology.mcmaster.ca>]
* Re: debate on 700 threads vs asynchronous code
@ 2003-01-24  1:46 Dan Kegel
  0 siblings, 0 replies; 19+ messages in thread
From: Dan Kegel @ 2003-01-24  1:46 UTC (permalink / raw)
  To: Lee Chin, linux-kernel

Lee Chin <leechin@mail.com> wrote:
> Larry McVoy wrote:
>> > Now, to cater to 700 clients, I can
>> > a) launch 700 threads that each block on I/O to disk and to the client (in 
>> > reading and writing on the socket) 
>> > OR
>> > b) Write an asycnhrounous system with only 2 or three threads where I manage the
>> > connections and stack (via setcontext swapcontext etc), which is 
>> > programatically a little harder 
>> > Which way will yeild me better performance, considerng both approaches are
>> > implemented optimally?
>> 
>> If this is a serious question, an async system will by definition do better.
>> You have either 700 stacks screwing up the data cache or 2-3 stacks nicely
>> fitting in the data cache.  Ditto for instruction cache, etc.
 >
> Thanks for the rpely... my question was more so, with setcontext and swapcontext, I
> will still be messing with the data cache right?  
> 
> In otherwords, as long as I have an async system with out setcontext, I know I am
> good... but with it, havent I degraded to a threaded environment?

I suspect Linux's implementation of asynch I/O isn't able to handle sockets yet.
Thus the choice is between nonblocking I/O and blocking I/O.

Nonblocking I/O is totally the way to go if you have full control over your
source code and want the maximal performance in userspace.  The best way
to get good performance with nonblocking I/O in Linux is to use the sys_epoll
system call; it's part of the 2.5 kernel, but a backport to 2.4 is available.

See http://www.kegel.com/c10k.html for an overview of the issue and some links.
- Dan

-- 
Dan Kegel
http://www.kegel.com
http://counter.li.org/cgi-bin/runscript/display-person.cgi?user=78045


^ permalink raw reply	[flat|nested] 19+ messages in thread
* Re: debate on 700 threads vs asynchronous code
@ 2003-01-24  0:07 Lee Chin
  0 siblings, 0 replies; 19+ messages in thread
From: Lee Chin @ 2003-01-24  0:07 UTC (permalink / raw)
  To: lm, leechin; +Cc: linux-kernel, linux-newbie

Hi,
Thanks for the rpely... my question was more so, with setcontext and swapcontext, I will still be messing with the data cache right?  

In otherwords, as long as I have an async system with out setcontext, I know I am good... but with it, havent I degraded to a threaded environment?

Thanks
Lee
----- Original Message -----
From: Larry McVoy <lm@bitmover.com>
Date: Thu, 23 Jan 2003 15:28:34 -0800
To: Lee Chin <leechin@mail.com>
Subject: Re: debate on 700 threads vs asynchronous code

> > b) Write an asycnhrounous system with only 2 or three threads where I manage the connections and stack (via setcontext swapcontext etc), which is progromatically a little harder
> > 
> > Which way will yeild me better performance, considerng both approaches are implemented optimally?
> 
> If this is a serious question, an async system will by definition do better.
> You have either 700 stacks screwing up the data cache or 2-3 stacks nicely
> fitting in the data cache.  Ditto for instruction cache, etc.
> -- 
> ---
> Larry McVoy            	 lm at bitmover.com           http://www.bitmover.com/lm 

-- 
__________________________________________________________
Sign-up for your own FREE Personalized E-mail at Mail.com
http://www.mail.com/?sr=signup

Meet Singles
http://corp.mail.com/lavalife


^ permalink raw reply	[flat|nested] 19+ messages in thread
* debate on 700 threads vs asynchronous code
@ 2003-01-23 23:19 Lee Chin
  2003-01-23 23:28 ` Larry McVoy
                   ` (3 more replies)
  0 siblings, 4 replies; 19+ messages in thread
From: Lee Chin @ 2003-01-23 23:19 UTC (permalink / raw)
  To: linux-kernel, linux-newbie

Hi
I am discussing with a few people on different approaches to solving a scale problem I am having, and have gotten vastly different views

In a nutshell, as far as this debate is concerned, I can say I am writing a web server.

Now, to cater to 700 clients, I can
a) launch 700 threads that each block on I/O to disk and to the client (in reading and writing on the socket)

OR

b) Write an asycnhrounous system with only 2 or three threads where I manage the connections and stack (via setcontext swapcontext etc), which is progromatically a little harder

Which way will yeild me better performance, considerng both approaches are implemented optimally?

Thanks
Lee
-- 
__________________________________________________________
Sign-up for your own FREE Personalized E-mail at Mail.com
http://www.mail.com/?sr=signup

Meet Singles
http://corp.mail.com/lavalife


^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2003-01-30  9:27 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-01-29 21:32 debate on 700 threads vs asynchronous code Dan Kegel
  -- strict thread matches above, loose matches on Subject: below --
2003-01-29 17:26 Lee Chin
2003-01-30  9:36 ` Terje Eggestad
     [not found] <Pine.LNX.4.44.0301241840450.11758-100000@coffee.psychology.mcmaster.ca>
2003-01-25  0:24 ` Dan Kegel
     [not found] <Pine.LNX.4.44.0301232144470.8203-100000@coffee.psychology.mcmaster.ca>
2003-01-24  8:21 ` Dan Kegel
2003-01-24  8:26   ` Mark Mielke
2003-01-24 22:53     ` Corey Minyard
2003-01-24 23:21       ` Matti Aarnio
2003-01-24 23:29         ` Randy.Dunlap
2003-01-25  0:11           ` Dan Kegel
     [not found] <Pine.LNX.4.44.0301232028480.980-100000@coffee.psychology.mcmaster.ca>
2003-01-24  2:04 ` Dan Kegel
2003-01-24  1:46 Dan Kegel
2003-01-24  0:07 Lee Chin
2003-01-23 23:19 Lee Chin
2003-01-23 23:28 ` Larry McVoy
2003-01-23 23:31 ` Ben Greear
2003-01-27  9:48 ` Terje Eggestad
2003-01-27 21:48   ` Bill Davidsen
2003-01-27 22:08 ` Bill Davidsen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox