lkml.org 
[lkml]   [1996]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: Proposal: merged system calls
Date
From
From: Ingo Molnar <mingo@kaliban.csoma.elte.hu>
Subject: Proposal: merged system calls
Date: Sun, 19 May 1996 23:03:32 -0400 (EDT)


>
>[Some Line Deleted]
>
> 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)

As you mentioned, I think it is mmap which to be used to do this kind
of job.

How about:

mem_buffer = mmap(0, length, PROT_READ, MAP_FILE, fd, 0);
while (length)
size_t chunk_size = length > 500 ? 500 : length;
send(5, buffer, chunk_size, 0);
length -= chunk_size; buffer += chunk_size;
}
munmap(mem_buffer, saved_length);

It is simple enough, isn't it?

# Is this work on Linux? My OLD man page says:
# " This is a BSD man page. Linux 0.99.11 can't map files,
# and can't do other things documented here."

>(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
>
> [Some Lines Deleted]
>
>-- mingo

It may useful if you time three method, read-send, mmap, merged-syscall.
merged-syscall may be the fastest, but it may not be such fast enough to
make people add new syscall and use it (to kernel and libc).

koyama


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