Hi Eric, On Fri, Jan 09, 2009 at 04:42:44PM +0100, Eric Dumazet wrote: (...)That's a very interesting discovery that you made here. I have made mesurements with this line commented out just to get an idea. The hardest part was to find a CPU-bound machine. Finally I slowed my laptop down to 300 MHz (in fact, 600 with throttle 50%, but let's call that 300). That way, I cannot saturate the PCI-based tg3 and I can observe the effects of various changes on the data rate. - original tcp_splice_read(), with "!timeo" : 24.1 MB/s - modified tcp_splice_read(), without "!timeo" : 32.5 MB/s (+34%) - original with line #1246 commented out : 34.5 MB/s (+43%) So you're right, avoiding calling tcp_read_sock() all the time gives a nice performance boost. Also, I found that tcp_splice_read() behaves like this when breaking out of the loop : lock_sock(); while () { ... __tcp_splice_read(); ... release_sock(); lock_sock(); if (break condition) break; } release_sock(); Which means that when breaking out of the loop on (!timeo) with ret > 0, we do release_sock/lock_sock/release_sock. So I tried a minor modification, consisting in moving the test before release_sock(), and leaving !timeo there with line #1246 commented out. That's a noticeable winner, as the data rate went up to 35.7 MB/s (+48%). Also, in your second mail, you're saying that your change might return more data than requested by the user. I can't find why, could you please explain to me, as I'm still quite ignorant in this area ? Thanks, Willy -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
| Greg Kroah-Hartman | [PATCH 001/196] Chinese: Add the known_regression URI to the HOWTO |
| Tarkan Erimer | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Christoph Lameter | [00/41] Large Blocksize Support V7 (adds memmap support) |
| Linus Torvalds | Linux 2.6.27-rc5 |
git: | |
| David Miller | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| David Miller | [GIT]: Networking |
| Gerrit Renker | [PATCH 15/37] dccp: Set per-connection CCIDs via socket options |
| Nick Piggin | Re: Mainline kernel OLTP performance update |
