Date: Thu, 5 Nov 1998 23:23:59 -0800 (PST) From: Matthew Dillon <dillon@apollo.backplane.com> To: David Greenman <dg@root.com> Cc: Marc Slemko <marcs@znep.com>, cvs-committers@FreeBSD.ORG Subject: Re: sendfile() Message-ID: <199811060723.XAA01903@apollo.backplane.com> References: <Pine.BSF.4.03.9811052158470.11835-100000@alive.znep.com>
next in thread | previous in thread | raw e-mail | index | archive | help
:sendfile() certainly helped wcarchive, which is a good example of this. :Zero copy technology helped IBM push numbers on their quad CPU system :until they actually ran out of bandwidth on the bus with a fair amount of :... Heh. Well, I wrote a little program to test the overhead of sendfile() vs write() in the 100% cached case. The program makes a tcp connection to another program that just sinks the data. Over localhost (with the sink program running on the same host), it's 9x more efficient to use sendfile(). Over a 10BaseT Lan (with the sink program running on the remote host) it's 2x and 2.8x more efficient using sendfile(). But sendfile() does not apparently handle O_NONBLOCK descriptors right. This is very important, I think. Dave? We can't use sendfile() in multi-threaded select() cores without that. Right now it operates as if O_NONBLOCK hadn't been specified. The programs I am using are available at: http://www.backplane.com/FreeBSD/ -Matt (send to localhost, sink program running on localhost. Note user + system time ... sendfile() is 9x more efficient) # time ./tcpsendfile localhost 5400 /usr/lib/libc_pic.a -sendfile -r64 -b4096 0.040u 0.275s 0:02.08 14.9% 5+191k 0+0io 0pf+0w # time ./tcpsendfile localhost 5400 /usr/lib/libc_pic.a -sendfile -r64 -b16384 0.017u 0.279s 0:01.99 14.0% 4+184k 0+0io 0pf+0w # time ./tcpsendfile localhost 5400 /usr/lib/libc_pic.a -sendfile -r64 -b0 0.012u 0.153s 0:01.94 8.2% 6+247k 0+0io 0pf+0w # time ./tcpsendfile localhost 5400 /usr/lib/libc_pic.a -write -r64 -b4096 0.078u 2.746s 0:03.58 78.4% 6+198k 0+0io 0pf+0w # time ./tcpsendfile localhost 5400 /usr/lib/libc_pic.a -write -r64 -b16384 0.029u 2.387s 0:03.26 73.6% 5+209k 0+0io 0pf+0w # time ./tcpsendfile localhost 5400 /usr/lib/libc_pic.a -write -r64 -b65536 0.029u 2.207s 0:04.18 53.1% 5+206k 0+0io 0pf+0w (send to host on 10BaseT lan, sink program running on remote. 2x more efficient in this case.) (Using 16K send/recvpipes via route command) # time ./tcpsendfile lander 5400 /usr/lib/libc_pic.a -r8 -s -b4096 -write 0.029u 0.519s 0:08.94 5.9% 9+170k 0+0io 0pf+0w # time ./tcpsendfile lander 5400 /usr/lib/libc_pic.a -r8 -s -b4096 -sendfile 0.017u 0.256s 0:08.90 2.9% 15+284k 0+0io 0pf+0w (Using 64K send/recvpipes via route command, 2.8x more efficient in this case). # time ./tcpsendfile lander 5400 /usr/lib/libc_pic.a -r8 -s -b4096 -write 0.024u 0.538s 0:09.00 6.1% 10+196k 0+0io 0pf+0w # time ./tcpsendfile lander 5400 /usr/lib/libc_pic.a -r8 -s -b4096 -sendfile 0.026u 0.172s 0:08.93 2.1% 36+276k 0+0io 0pf+0w Matthew Dillon Engineering, HiWay Technologies, Inc. & BEST Internet Communications & God knows what else. <dillon@backplane.com> (Please include original email in any response) To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199811060723.XAA01903>