2003-03-28 14:12:14

by jlnance

[permalink] [raw]
Subject: sendfile or r+w for sending file to multiple machines

Hello All,
I have an application that needs to be able to send large files to
multiple machines (less than 10). The files get sent to the machines at
the same time so we are thinking about writing the code so that it does
1 read (or perhaps a mmap) on the file, and then does multiple writes,
onece to each machines socket.
We are also considering using multicast but this seems unnecessarily
complex. I dont want to reimplement TCP.
We could also write this using sendfile, and I dont know if that
is a good idea or not (hence this post). I think I would have to start
multiple threads to get sendfile to work. This makes things more
complex which is a minus, but how about performance. Do you think
this would work better than read+write? The files are larger than
system memory so our goal is to avoid reading the multiple times.
With sendfile we can not really control how the files get read, but
it seems likely that the different threads would inherently synchronize
themselves. Any thoughts?

Thanks,

Jim


2003-03-28 14:51:44

by Chris Friesen

[permalink] [raw]
Subject: Re: sendfile or r+w for sending file to multiple machines

[email protected] wrote:
> Hello All,
> I have an application that needs to be able to send large files to
> multiple machines (less than 10). The files get sent to the machines at
> the same time so we are thinking about writing the code so that it does
> 1 read (or perhaps a mmap) on the file, and then does multiple writes,
> onece to each machines socket.
> We are also considering using multicast but this seems unnecessarily
> complex. I dont want to reimplement TCP.

Given that your stated goal is to minimize disk reads, to me at least reading
once and sending via TCP on multiple sockets seems to make sense, and is the
only option that actually gives you direct control over the reads.

If it was an advantage for the receivers to have the file as soon as possible,
you might be able to do slightly better by sending the whole file once as UDP to
all listeners and then filling in the blanks later. This way, some of the
listeners would get the file on the first pass and not have to wait for the
lowest common denominator. You probably wouldn't gain much though.

Chris



--
Chris Friesen | MailStop: 043/33/F10
Nortel Networks | work: (613) 765-0557
3500 Carling Avenue | fax: (613) 765-2986
Nepean, ON K2H 8E9 Canada | email: [email protected]