Re: zero-copy TCP fileserving

David S. Miller (davem@redhat.com)
Fri, 24 Sep 1999 10:02:56 -0700


Date: Fri, 24 Sep 1999 09:45:04 -0700
From: Pete Wyckoff <wyckoff@ca.sandia.gov>

I added small modifications a while back to 2.2.3 to use this, with
a packet engines gigE card. The driver sets a bit in the dev
structure saying it knows how to do tx checksum, then the IP output
path notices and does only the pseudo header. Hardware adds in the
packet body checksum.

The impact on bandwidth was, however, minimal. At least for 500
MHz alpha machines.

Because the csum_partial_copy_from_user done in the TCP transmit path
gets the checksum at zero cost. Just eliminating the checksum is
going to buy little if anything (in fact on some cpus it's going to
cost more to "avoid" the csum part of the copy), the real gain is
avoiding the copy as well.

You'd need to, in tcp sendmsg:

1) Lock down the data buffer
2) Add support to the skb's for iovecs
3) Put the TCP/IP/HW headers in the first iovec
4) Hook up the user data in subsequent iovecs

Then the driver can csum the entire packet, header and all, and the
cpu touches none of the actual data portion.

This is the whole point of "zero-copy" TCP, or did I miss something in
the changes you did?

Later,
David S. Miller
davem@redhat.com

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/