All of lore.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 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.