Hi all,
Is there anyone who has performed dual-direction tcp performance test (with two connections, one connection each direction) in 100M environment ?
I am working on some modifications with Linux kernel to implement a TCP performance enhancement proxy for long fat pipes, currently the goal is for 100Mbps environment. Recently, I met a problem which took me a lot of time but still haven't been solved.
In my test, I connect two Linux PC with a Linux bridge running netem(a wan emulator,able to set wan parameters such as delay,loss rate ), and running iperf to do performance test.
When I set a delay of several hundred miliseconds, and run iperf to generate one direction traffic(set a large buffer with -w, of course),performance reachs to over 90Mbps in a few seconds. But when I run iperf for dual direction traffic (that means, two connections with the opposite direction),the connection can not reach peak performance, sometimes one achieve about 90M with the other one almost zero, and sometimes one is about 60M and the other is about 30M.
To make test complete, I also tested cases with no delay, when I set a large buffer for iperf, I saw the samiliar issue; but with a small buffer, both connections can achieve about 90M.
I also examined /proc/net/snmp, and there is almost no packet loss, and in the case with delay, the cwnd has grown to a value large enougth for 100Mbps thoughput.
A glue I found is in the case of no delay, when I set a big buffer for iperf, the NIC driver called "netif_stop_queue" many times, while with a small buffer for iperf, there is seldom. I added some debug info in NIC driver to find this.
Is this related to the problem I met? And how I can locate and solve this performance problem?
Thanks a lot in advance.