public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Davide Libenzi <davidel@xmailserver.org>
To: David Schwartz <davids@webmaster.com>
Cc: linux-kernel@vger.kernel.org
Subject: RE: Why use threads ( was: Alan Cox quote?)
Date: Wed, 20 Jun 2001 19:22:45 -0700 (PDT)	[thread overview]
Message-ID: <XFMail.20010620192245.davidel@xmailserver.org> (raw)
In-Reply-To: <NCBBLIEPOCNJOAEKBEAKMEOLPPAA.davids@webmaster.com>


On 21-Jun-2001 David Schwartz wrote:
> 
>> > Who said anything about 'select'? If you want to learn
>> > how to write
>> > efficient multi-threaded servers, take a course or read a book.
>> > Heck, you
>> > can even ask me questions on marginally appropriate lists or
>> > even by private
>> > email. But don't put words in my mouth.
> 
>> I was just thinking about having a course on how to write mt applications,
>> are You currently keeping such courses ?
> 
>       I've been preparing one for several years, but due to the constantly
> changing state of the art and the other limitations on my time, it just
> keeps getting further behind.
> 
>> Is still this Your address :
>>
>> David Schwartz
>> 16000 NW Modesty Dr
> 
>       That was never my address, though I lived at 16000 NW 1st street a long
> time ago.
> 
>> How do you handle an average of 1600 sessions over a single
>> process without
>> using select()/poll(), I'm just curious ?
> 
>       Well, with 1,600 connections, things are pretty easy. This is so far
below
> the limit of modern machines that efficiency only matters if your server is
> just one of many things the machine does. I would just use two threads in
> poll loops, each working on half the descriptors. Some would have these
> threads actually do the I/O, others would have it queue I/O jobs to another
> pool of I/O threads that do the actual read/write operations.
> 
>       My (WebMaster's) library does even better than this, converting the
'poll'
> threads into 'do the I/O' threads dynamically. That way if the 'poll' only
> hits on one file descriptor, you don't have to do a context switch to
> service the I/O, but you also can get back to 'poll' pretty quickly even if
> the I/O manages to block when it's not supposed to.
> 
>       But 1,600 is easy, so there's no reason to sweat about it.
> 
>       Things get more difficult at 16,000 connections. At this level, I
recommend
> a tiered approach. Separate the file descriptors into the 80% that are 20%
> of the activity and find the 10% that are 90% of the activity. Have separate
> threads poll on each of these groups. The advantage of this is that the more
> expensive poll calls (the ones on the greatest number of file descriptors)
> are called very rarely (because those file descriptors aren't very active.
> Tracking code can move file descriptors dynamically from group to group.
> 
>       No matter what anyone tells you, 'poll' scales *better* than O(n) (in
other
> words, the more connections you have, the less CPU time you need per
> connection to discover which sockets need work), and since your I/O can't
> possibly scale better than O(n), poll is as scalable as it needs to be. If
> you double the number of sockets, you double the cost of 'poll' but you also
> double the amount of information you get per poll call (actually, you more
> than double it, but that's a long story).
> 
>       The problem with 'poll' is efficiency at *low* load. Since I write
mostly
> servers designed to operate at high load, I don't worry too much about
> efficiency at low load. The hard case for 'poll' is large numbers of file
> descriptors at very low load (so you're unlikely to find more than one
> 'active' fd at a time). Fortunately these cases don't need much efficiency.
> The operating systems max out at around 65,536 descriptors anyway, and
> keeping these inactive enough to allow such low discovery rates means a
> server with most of its CPU to spare.
> 
>       Not that I have anything against the more efficient I/O discovery
> techniques under discussion and development. There's nothing wrong with a
> more efficient approach, especially one that's more efficient at every
> combination of loads and socket counts. But as far as ultimate scalability
> goes, socket discovery is not the limiting factor -- far from it.

Just to summarize :

1) You said to handle 16000 sessions with 10 threads

2) I said: "Humm, you've to select() about 1600 fds ..."

3) You said : "Who said anything about 'select'?"


The stuff above looks like select() to me.
I assume You know how select is implemented inside the kernel
( file->f_op->poll() ), so I don't understand Your phrase :

<quite rude>
Who said anything about 'select'? If you want to learn how to write
efficient multi-threaded servers, take a course or read a book.
</quite rude>


About the scale factor of select()/poll() my agreement is only partial.
Have You ecer observed that Your processes tend to become a bit CPU bound when
stocking a lot of fds inside a poll ?





- Davide


  reply	other threads:[~2001-06-21  2:19 UTC|newest]

Thread overview: 149+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-06-19 14:53 accounting for threads Dan Kegel
2001-06-19 14:57 ` J . A . Magallon
2001-06-19 15:44 ` ognen
2001-06-19 15:58   ` Alan Cox quote? (was: Re: accounting for threads) Dan Kegel
2001-06-19 16:02     ` David S. Miller
2001-06-19 16:12       ` Padraig Brady
2001-06-19 19:10       ` bert hubert
2001-06-19 19:18         ` Alan Cox
2001-06-19 19:32           ` bert hubert
2001-06-19 19:43           ` Alexander Viro
2001-06-20 15:22           ` Jes Sorensen
2001-06-20 15:33             ` Alexander Viro
2001-06-20 15:59               ` Threads are processes that share more bert hubert
2001-06-20 16:15                 ` Alexander Viro
2001-06-20 18:48                 ` Martin Devera
2001-06-20 19:19                   ` Unknown PCI Net Device Greg Ingram
2001-06-20 22:53                     ` Andreas Dilger
2001-06-20 22:56                       ` Jeff Garzik
2001-06-20 23:00                       ` Alan Cox
2001-06-20 22:08                 ` Threads are processes that share more Stephen Satchell
2001-06-20 22:14                   ` ognen
2001-06-20 23:10                   ` J . A . Magallon
2001-06-24 23:47                     ` Larry McVoy
2001-06-25  2:23                       ` David S. Miller
2001-06-20 16:39               ` Alan Cox quote? (was: Re: accounting for threads) george anzinger
2001-06-20 18:35                 ` Alexander Viro
2001-06-21  4:11                   ` Rusty Russell
2001-06-21 23:37                     ` Alexander Viro
2001-06-21 23:55                       ` Alexander Viro
2001-06-22 14:53                         ` Richard Gooch
2001-06-20 16:40               ` Jes Sorensen
2001-06-20 20:09               ` Rob Landley
2001-06-20 19:05           ` Victor Yodaiken
2001-06-20 14:35         ` Mike Porter
2001-06-20 11:56           ` Rob Landley
2001-06-19 16:02     ` Ben Pfaff
2001-06-19 16:09     ` Larry McVoy
2001-06-19 16:26       ` Matthew Kirkwood
2001-06-19 16:52         ` Larry McVoy
2001-06-19 18:18           ` Rob Landley
2001-06-19 23:31           ` Timur Tabi
2001-06-20 11:52             ` Rob Landley
2001-06-20 21:20               ` Albert D. Cahalan
2001-06-20 18:12                 ` Rob Landley
2001-06-20 23:28                   ` Dan Podeanu
2001-06-21  0:42                   ` D. Stimits
2001-06-20 20:18                     ` Rob Landley
2001-06-21  1:57                       ` D. Stimits
2001-06-21 14:46                         ` Idea: Patches-from-linus mailing list? (Was Re: Alan Cox quote? (was: Re: accounting for threads)) Rob Landley
2001-06-21 14:02                   ` Alan Cox quote? (was: Re: accounting for threads) Jesse Pollard
2001-06-21 14:18                     ` Rob Landley
2001-06-22 14:46               ` Mikulas Patocka
2001-06-22 13:29                 ` Rob Landley
2001-06-24 21:41                   ` J . A . Magallon
2001-06-24 16:55                     ` Rob Landley
2001-06-24 22:30                       ` J . A . Magallon
2001-06-24 18:21                         ` Rob Landley
2001-06-25 13:48                           ` J . A . Magallon
2001-06-24 22:39                         ` Steven Walter
2001-06-24 23:50                         ` Larry McVoy
2001-06-24 20:24                           ` Rob Landley
2001-06-25  0:05                           ` J . A . Magallon
2001-06-25  0:32                             ` Gerhard Mack
2001-06-25  0:59                               ` Davide Libenzi
2001-06-25  2:18                         ` Galen Hancock
2001-06-20 14:59             ` Matthias Urlichs
2001-06-20 19:14           ` Victor Yodaiken
2001-06-20 21:01           ` RE:Why use threads ( was: Alan Cox quote?) David Schwartz
2001-06-20 21:26             ` Why " Victor Yodaiken
2001-06-20 22:18               ` David Schwartz
2001-06-20 22:41                 ` Davide Libenzi
2001-06-20 22:47                   ` [OT] " Jeff Garzik
2001-06-21  0:21                   ` David Schwartz
2001-06-21  0:56                     ` Davide Libenzi
2001-06-21  1:32                       ` David Schwartz
2001-06-21  2:22                         ` Davide Libenzi [this message]
2001-06-21  2:43                           ` David Schwartz
2001-06-21 16:10                             ` Davide Libenzi
2001-06-21 19:55                               ` Marco Colombo
2001-06-20 22:43                 ` Mike Castle
2001-06-21  1:43                   ` David Schwartz
2001-06-19 17:10       ` Alan Cox quote? (was: Re: accounting for threads) Matti Aarnio
2001-06-19 17:20       ` Mike Castle
2001-06-19 17:37         ` Larry McVoy
2001-06-19 17:45           ` Mike Castle
2001-06-19 18:08             ` Georg Nikodym
2001-06-19 19:38               ` Georg Nikodym
2001-06-19 19:56                 ` Michael Meissner
2001-06-19 17:53           ` Steve Underwood
2001-06-19 19:01             ` Alan Cox
2001-06-20  2:57               ` Michael Rothwell
2001-06-20  3:04                 ` Larry McVoy
2001-06-20  3:38                   ` John R Lenton
2001-06-20 10:21                   ` john slee
2001-06-20 18:08                     ` Larry McVoy
2001-06-20 16:21                   ` Davide Libenzi
2001-06-20  9:14                 ` Alan Cox
2001-06-22  2:36                   ` Michael Rothwell
2001-06-19 17:36       ` Jonathan Lundell
2001-06-19 17:41         ` Larry McVoy
2001-06-19 20:57         ` David S. Miller
2001-06-19 21:11           ` Jonathan Lundell
2001-06-19 21:15             ` David S. Miller
2001-06-19 23:56               ` Jonathan Lundell
2001-06-20  0:19                 ` Mike Castle
2001-06-20  0:28                   ` Larry McVoy
2001-06-20  1:30                     ` Ben Greear
2001-06-20  2:14                       ` Mike Castle
2001-06-20  9:00                     ` Henning P. Schmiedehausen
2001-06-20 11:25                       ` [OT] Threads, inelegance, and Java Aaron Lehmann
2001-06-20 11:25                         ` Rob Landley
2001-06-20 17:36                           ` Martin Dalecki
2001-06-20 19:27                             ` Mike Harrold
2001-06-20 17:46                               ` Rob Landley
2001-06-20 19:53                               ` Martin Dalecki
2001-06-20 17:53                                 ` Rob Landley
2001-06-21  7:45                                   ` Albert D. Cahalan
     [not found]                               ` <mailman.993067219.29993.linux-kernel2news@redhat.com>
2001-06-20 20:16                                 ` Pete Zaitcev
2001-06-20 22:05                                   ` Alan Cox
     [not found]                           ` <20010621000725.A24672@werewolf.able.es>
2001-06-20 19:15                             ` Rob Landley
2001-06-21  9:40                               ` Jonathan Morton
     [not found]                             ` <mailman.993083762.1429.linux-kernel2news@redhat.com>
2001-06-21  3:13                               ` Pete Zaitcev
2001-06-21 13:59                                 ` Rob Landley
2001-06-21 16:48                           ` Adam Sampson
2001-06-20 15:12                         ` Ben Greear
2001-06-20 15:44                           ` Russell Leighton
2001-06-20 16:32                             ` Davide Libenzi
2001-06-20 16:54                               ` Russell Leighton
2001-06-20 17:03                               ` Tony Hoyle
2001-06-20 15:10                                 ` Rob Landley
2001-06-20 20:23                                   ` Tony Hoyle
2001-06-21  8:12                                     ` Henning P. Schmiedehausen
2001-06-20 20:40                                   ` Richard B. Johnson
2001-06-20 20:48                                     ` Tony Hoyle
2001-06-20 21:00                                     ` Daniel Phillips
2001-06-20 21:06                                       ` Richard B. Johnson
2001-06-20 18:14                               ` Henning P. Schmiedehausen
2001-06-20 16:53                           ` Larry McVoy
2001-06-20 12:36                             ` Rob Landley
2001-06-20 21:14                           ` Aaron Lehmann
2001-06-20 18:09                         ` Henning P. Schmiedehausen
2001-06-20 19:05                         ` William T Wilson
2001-06-20  0:04           ` Alan Cox quote? (was: Re: accounting for threads) Chris Ricker
2001-06-20  0:59             ` Robert Love
2001-06-19 18:01       ` Alan Cox quote? Kai Henningsen
2001-06-19 18:49         ` Larry McVoy
2001-06-19 21:12           ` Richard Gooch
2001-06-19 22:50             ` Henning P. Schmiedehausen
2001-06-19 20:12         ` Henning P. Schmiedehausen

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=XFMail.20010620192245.davidel@xmailserver.org \
    --to=davidel@xmailserver.org \
    --cc=davids@webmaster.com \
    --cc=linux-kernel@vger.kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox