Proposal: merged system calls

Ingo Molnar (mingo@kaliban.csoma.elte.hu)
Sun, 19 May 1996 23:03:32 -0400 (EDT)


these are 2.1 thoughts (but i cant wait :)

[ yes master, going back betatesting soon :) ]

one argument against kernel features is the overhead of the kernel-user
space transitions. what about making it possible to call several syscalls
at once ...

an example:

a HTTP server reads data from a file and sends it to another machine
through a socket. These two system calls could be merged:

the old method:

read( 4, buffer, 100 );
send( 5, buffer, 100, 0 );

the proposed method:

read_send( 4, 5, 100, 0 );

(note that there is no user space buffer in the second call)

Thus the overhead of one empty system call, and the copying of the buffer
between user and kernel space could be avoided. Windows NT solves this
particular problem with kernel bloat: system calls that do exactly this
are already in the API ... you all know the result: it creeps even in 16
Megs of RAM.

does this "merging" stuff make sense?

If it makes sense, then at least these problems have to be solved:

- should signal handling happen between "merged" system calls

- how should the "merging" call happen, to ensure simplicity, speed and
security. (i'm not demagogue, i just see no easy way to do this :)

- how does the kernel know that another system call is following soon,
without reentering user space, and that the resulting
buffers/parameters shouldnt be copied to user space.

- how should error handling happen.

- isnt it mmap that should be used to implement zero-copy

-- mingo