Driver patch to look at...

Randy Stewart randall at lakerest.net
Mon Feb 4 17:22:54 UTC 2013


All:

I have been working with TCP in gigabit networks (igb driver actually) and have
found a very nasty problem with the way the driver is doing its put back when
it fills the out-bound transmit queue.

Basically it has taken a packet from the head of the ring buffer, and then 
realizes it can't fit it into the transmit queue. So it just re-enqueue's it
into the ring buffer. Whats wrong with that? Well most of the time there
are anywhere from 10-50 packets (maybe more) in that ring buffer when you are
operating at full speed (or trying to). This means you will see 10 duplicate
ACKs, do a fast retransmit and cut your cwnd in half.. not very nice actually.

The patch I have attached makes it so that

1) There are ways to swap back.
2) Use the peek in the ring buffer and only
   dequeue the packet if we put it into the transmit ring
3) If something goes wrong and the transmit frees the packet we dequeue it.
4) If the transmit changed it (defrag etc) then swap out the new mbuf that
   has taken its place.

I have fixed the four intel drivers that had this systemic issue, but there
are still more to fix.

Comments/review .. rotten egg's etc.. would be most welcome before
I commit this..

Jack are you out there?

Thanks

R

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: driver_patch.txt
URL: <http://lists.freebsd.org/pipermail/freebsd-net/attachments/20130204/159fdf6f/attachment.txt>
-------------- next part --------------

-----
Randall Stewart
randall at lakerest.net






More information about the freebsd-net mailing list