lkml.org 
[lkml]   [1999]   [Sep]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: > 15,000 Simultaneous Connections
Date
From


>niels provos here at the scalability project has designed a new version of
>poll() that provides callbacks to device drivers so that poll() doesn't
>have to scan a list, it simply waits for the callbacks. he has ported
>this to a late 2.3 kernel, and is testing it. is anyone interested in
>helping to test? is this something we want to get into the kernel?
>
> - Chuck Lever
>--
>corporate: <chuckl@netscape.com>
>personal: <chucklever@netscape.net> or <cel@monkey.org>
>
>The Linux Scalability project:
> http://www.citi.umich.edu/projects/linux-scalability/

Does all it do is shove an id on the structure that is being selected on?
It seems that the BSDs have done this for a while, I think.

Here is the pipe structure definition. Notice pipe_sigio and pipe_set.
The selinfo struct is beneath this. I just finised reading the select/poll
source last week. For anybody interested, there is also an article in the
Dr Dobbs archive about the BSD implementation of select and poll (just search
the archives for it).

/*
* Per-pipe data structure.
* Two of these are linked together to produce bi-directional pipes.
*/
struct pipe {
struct pipebuf pipe_buffer; /* data storage */
struct pipemapping pipe_map; /* pipe mapping for direct I/O */
struct selinfo pipe_sel; /* for compat with select */
struct timespec pipe_atime; /* time of last access */
struct timespec pipe_mtime; /* time of last modify */
struct timespec pipe_ctime; /* time of status change */
struct sigio *pipe_sigio; /* information for async I/O */
struct pipe *pipe_peer; /* link with other direction */
u_int pipe_state; /* pipe status info */
int pipe_busy; /* busy flag, mostly to handle rundown s
anely */
};

/*
* Used to maintain information about processes that wish to be
* notified when I/O becomes possible.
*/
struct selinfo {
pid_t si_pid; /* process to be notified */
short si_flags; /* see below */
};
#define SI_COLL 0x0001 /* collision occurred */

(A collision is when multiple processes wait on a single io event).

-jason


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:53    [W:0.152 / U:0.520 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site