Re: e1000 full-duplex TCP performance well below wire speed

From: Bruce Allen
Date: Thu Jan 31 2008 - 03:52:40 EST


Hi Sangtae,

Thanks for joining this discussion -- it's good to a CUBIC author and expert here!

In our application (cluster computing) we use a very tightly coupled high-speed low-latency network. There is no 'wide area traffic'. So it's hard for me to understand why any networking components or software layers should take more than milliseconds to ramp up or back off in speed. Perhaps we should be asking for a TCP congestion avoidance algorithm which is designed for a data center environment where there are very few hops and typical packet delivery times are tens or hundreds of microseconds. It's very different than delivering data thousands of km across a WAN.

If your network latency is low, regardless of type of protocols should give you more than 900Mbps.

Yes, this is also what I had thought.

In the graph that we posted, the two machines are connected by an ethernet crossover cable. The total RTT of the two machines is probably AT MOST a couple of hundred microseconds. Typically it takes 20 or 30 microseconds to get the first packet out the NIC. Travel across the wire is a few nanoseconds. Then getting the packet into the receiving NIC might be another 20 or 30 microseconds. The ACK should fly back in about the same time.

I can guess the RTT of two machines is less than 4ms in your case and I remember the throughputs of all high-speed protocols (including tcp-reno) were more than 900Mbps with 4ms RTT. So, my question which kernel version did you use with your broadcomm NIC and got more than 900Mbps?

We are going to double-check this (we did the broadcom testing about two months ago). Carsten is going to re-run the broadcomm experiments later today and will then post the results.

You can see results from some testing on crossover-cable wired systems with broadcomm NICs, that I did about 2 years ago, here:
http://www.lsc-group.phys.uwm.edu/beowulf/nemo/design/SMC_8508T_Performance.html
You'll notice that total TCP throughput on the crossover cable was about 220 MB/sec. With TCP overhead this is very close to 2Gb/s.

I have two machines connected by a gig switch and I can see what happens in my environment. Could you post what parameters did you use for netperf testing?

Carsten will post these in the next few hours. If you want to simplify further, you can even take away the gig switch and just use a crossover cable.

and also if you set any parameters for your testing, please post them
here so that I can see that happens to me as well.

Carsten will post all the sysctl and ethtool parameters shortly.

Thanks again for chiming in. I am sure that with help from you, Jesse, and Rick, we can figure out what is going on here, and get it fixed.

Cheers,
Bruce
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/