Hi, Here's an implementation of tcp network splice receive support. It's originally based on the patch set that Intel posted some time ago, but has been (close to) 100% reworked. Now, I'm not a networking guru by any stretch of the imagination, so I'd like some input on the direction of the main patch. Is the approach feasible? Glaring errors? Missing bits? If you want to test it, I'd suggest downloading the latest splice tools snapshot here: http://brick.kernel.dk/snaps/splice-git-latest.tar.gz Examples: - Sending a small test message over the network: user@host1:~/splice $ ./splice-fromnet 9999 | cat user@host2:~ $ echo hello | netcat host1 9999 should write "hello" on host1. Yeah, complex stuff. - Sending a file over the network: user@host1:~/splice $ ./splice-fromnet 9999 | ./splice out outfile user@host2:~ $ cat somefile | netcat host1 9999 should send somefile over the network, storing it in outfile. Seems to work reasonably well for me, sometimes I do see small ranges inside the output file that are not correct, but I haven't been able to reproduce today. I think it has to do with page reuse, hence the NET_COPY_SPLICE ifdef that you can enable to just plain copy the data instead of referencing it. Patches are against the #splice branch of the block repo, "official" url of that is: git://git.kernel.dk/data/git/linux-2.6-block.git/ and it's based on Linus main tree (at 2.6.22-rc4 right now). Let me know if I should supply netdev branch patches instead. -- Jens Axboe