Why TCP performance degrade with bidirectional traffic?

0

I've made a simple experiment on TCP transportation performance. The experiment is as follows:

There are two machines, A and B, each installed with Ubuntu 12.04 Server. I've installed "iperf" on either machine, and use it to test the transportation rate. A and B are connected through a 100Mbps link. The experiment is like this:

  1. I use iperf to send from A to B using TCP mode. The result is that on both side the rate output by iperf is 100Mbps, and is very stable.

  2. I use another iperf process to send from B to A, using the same settings. The result is that on both side the rate output is a little lower, 99Mbps, stably. But this is understandable.

  3. I use one more iperf process to again send from A to B, with the presence of the previous two traffic flows. Now the wired thing happens. The rate of the three traffic flows are all 50Mbps, on both sides. The rates are all very stable.

I understand the reason that flow 1 and flow 3 share the one-direction link and both have a bandwidth of 50Mbps. But what is the reason that the backward flow, flow 2, is also affected and is also 50Mbps? Shouldn't the bidirectional link be regarded as two different links that have no interference with each other?

DsRoyster

Posted 2014-01-24T04:53:30.817

Reputation: 1

Answers

0

I would posit that -

  1. The acknowledgement traffic needs to be taken into account, ie confirmation that the packets sent OK.
  2. The ethernet could be limited by number of packets per second - You should be able to test this hypothesis by using Jumbo frames and seeing if your performance goes up.

davidgo

Posted 2014-01-24T04:53:30.817

Reputation: 49 152

I consider the problem of acknowledgement. But what I think that if the two flows from A->B converges to stable, than the flow from B->A should not be affected, as there shouldn't be many packet losses from A->B to acknowledge the packets from B->A. – DsRoyster – 2014-01-24T05:06:42.580

What is a Jumbo? I've googled it and didn't see something relative. – DsRoyster – 2014-01-24T05:11:01.293

Jumbo frames are packets which are bigger then 1500 bytes. 1500 bytes is the standard for Ethernet, but, particularly at gigabit speeds the overhead of each packet is so significant that increasing the size of each packet to 9000 bytes makes a big improvement. See http://en.wikipedia.org/wiki/Jumbo_frame

– davidgo – 2014-01-24T05:23:41.300

Also see http://www.codinghorror.com/blog/2009/03/the-promise-and-peril-of-jumbo-frames.html for some graphs and performance measurements - albeight for gigabit connections.

– davidgo – 2014-01-24T05:27:39.067

1I see. But what I'm testing on is actually two Linux systems. Is it possible to change frame on Linux? – DsRoyster – 2014-01-24T05:29:43.823

1Stable doesn't mean packets aren't being dropped. Since A-B is nearly saturated, you can easily be dropping ACK packets for B-A flow. This will slow down B-A. If you install Wireshark os a similar program, you will be able to capture packets and see where retransmissions are taking place. – Ron Trunk – 2014-01-24T12:48:33.810

Yes, you sometimes can - depending on the network hardware (you may require gigabit NICs). To take advantage of larger frames you need to specify a higher MTU (either in the network setup script or as a parameter to ifconfig) – davidgo – 2014-01-24T18:19:59.150