Is “zero-copy networking” implemented by default on Linux

kernelnetworking

I saw this article:

http://lwn.net/2001/0419/kernel.php3

Zero-copy networking will be in 2.4.4. This patch, by David Miller,
Alexey Kuznetsov, and others, has been in development and testing for
some time, and was incorporated into the "ac" kernel series back in
2.4.2ac4. In a way, it is a surprising change to see in a stable kernel series, since it makes fundamental changes deep in the
networking code. From all reports, however, it is solid, and, in
certain situations, it should produce significant performance
benefits.

Can someone tell me if zero-copy networking exists by default in Linux, or whether this patch was just to allow people who wanted to do zero-copy networking to be able to implement it?

In other words, in the current Ubuntu does it perform zero-copy networking all the time or would I have to use certain system calls to utilise the above patch?

Best Answer

In Linux' kernel git repo:

git log --oneline -- drivers/net | head -n5000 | egrep -i 'zero[[:space:]]*copy'

tells us:

  • 7d9e6dd macvtap: do not zerocopy if iov needs more pages than MAX_SKB_FRAGS
  • 05464d2 tuntap: do not zerocopy if iov needs more pages than MAX_SKB_FRAGS
  • bd31fdd macvtap: correctly linearize skb when zerocopy is used
  • d09ec76 tuntap: correctly linearize skb when zerocopy is used
  • 19a6afb tuntap: set SOCK_ZEROCOPY flag during open
  • 149d36f tun: report orphan frags errors to zero copy callback

which (I believe) answers your question clearly and positive. ;)

Related Question