Date: Tue, 27 May 1997 16:47:22 -0400 (EDT) From: Christopher Sedore <cmsedore@mailbox.syr.edu> To: "Ron G. Minnich" <rminnich@Sarnoff.COM> Cc: FreeBSD-Hackers@freebsd.org Subject: Re: async socket stuff Message-ID: <Pine.SOL.3.95.970527163325.11761A-100000@rodan.syr.edu> In-Reply-To: <Pine.SUN.3.91.970527141129.23490O-100000@terra>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 27 May 1997, Ron G. Minnich wrote: > > It sure could, but you end up with many more system calls, and it is not > > async. The real advantage to a call like TransmitFile() is that you can > > send an entire file (or a range of a file) with a single system call, and > > you can do it async. This means that you can more efficiently implement > ^^^^^^^^^^^^^^^^^^^^^^^^^^ > > things like FTP servers, Web servers, pop servers, etc. > > And the measurements which show this are to be found ... where? I'm not > convinced. You've got to pay the cost for this somewhere. > "complexity is conserved" -- D. Jensen Well, you can do some math which might demonstrate it: To transfer a 10MB file now, you might implement something like: open(...) while (!eof) { read(file,buf,64k) write(sock,buf,64k) } close(file) with a transmitfile-like facility, you would: open(...) transmitfile(file,sock,...) close(file) Now, in the case of a 10MB file, you've essentially saved 20MB worth of memory bandwidth/time for transfer (since the data has to be copied into user space on read, and back again on write), plus 160*2=320-1=319 system calls avoided. I do acknowledge that you could of course do: open(...) mmap(...) write(...) munmap(...) close(...) but this has another set of efficiency concerns with setting up the map. I think you still end up with a user to kernel copy you might otherwise avoid (corrections welcome). You also have restrictions on how much space you can map into a process (a problem I currently experience with an NT app which hangs around 1.5GB of reserved address space with a 2GB OS limit). What's the cost? another few hundred bytes of kernel code. Worth it to me, esp since it would probably be duplicated many times over in user code. -Chris
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.SOL.3.95.970527163325.11761A-100000>