Howdy!

When performing TCP tests, one has to keep in mind also available bandwidth in other direction due to TCP ACK packets. Or, more precisely, combination of bandwidth and latency, combined with TCP transmit window size.

In case of your dual test the solaris host (the one connected to 1Gbps ethernet switch port) transmits data for the transmit test as fast as possible and in the same time transmits ACK packets for the receive test. As the bottleneck (100 Mbps) is in the ethernet switch, that switch affects performance considerably as it needs to buffer ethernet frames for quite log time. This alone causes slow-downs and the effect depends also on TCP TX window size. If packets get delayed for too long, TX side times out waiting for ACK and does retransmit.

It might happen that ethernet switch drops packets, which you could only see if you'd check traffic on the slow side (LInux) with some sniffer tool (eg. wireshark). Dropped packets have serious effect on throughput both ways. If data packets (downstream) get dropped, then throughput in downstream gets reduced. If ACK packets get dropped, then throughput in the other direction (upstream) gets reduced.

In your test you can observe slow throughput in direction from slow towards fast host in case of bi-directional tests. This indicates that ACK packets (sent by fast side) get either much delayed or even dropped in the ethernet switch. Probably they get dropped or else TCP would have throttled Window size up and you'd still get somehow better performance. You can check for dropped ACKs by running wireshark on the slow side. If you examine ACK packet contents, you'll see sequence numbers of packets being ACKed ... if packets with same sequence number get TXed more than once before ACK has been received, then you see packet loss.

Peace!
 Mkx

-- perl -e 'print $i=pack(c5,(41*2),sqrt(7056),(unpack(c,H)-2),oct(115),10);'
-- echo 16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D4D465452snlb xq | dc

------------------------------------------------------------------------

BOFH excuse #161:

monitor VLF leakage



Daniel Taylor je dne 17/07/10 16:41 napisal-a:
Hello,

I've been building an OpenSolaris based NAS and I've spotted something a bit odd with the bi-directional iperf results and I was hoping someone could explain?

Here's a linux -> linux test, that shows (what are to me) good results on our 100mb LAN.

# iperf -c 192.168.1.185 -d
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 192.168.1.185, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  5] local 192.168.1.52 port 55191 connected with 192.168.1.185 port 5001
[  4] local 192.168.1.52 port 5001 connected with 192.168.1.185 port 59746
[ ID] Interval       Transfer     Bandwidth
[  5]  0.0-10.0 sec    109 MBytes  91.1 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.2 sec    108 MBytes  88.9 Mbits/sec

Now here we have linux -> opensolaris (server running on solaris, but I get same results the other way around as I will show)

# iperf -c 192.168.1.150 -d
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 192.168.1.150, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  5] local 192.168.1.52 port 34412 connected with 192.168.1.150 port 5001
[  4] local 192.168.1.52 port 5001 connected with 192.168.1.150 port 32944
[ ID] Interval       Transfer     Bandwidth
[  5]  0.0-10.0 sec  13.3 MBytes  11.1 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.1 sec    113 MBytes  93.5 Mbits/sec

It's down the 11.1Mbits/sec and I don't know why?

(server on linux, client on solaris)

#iperf -c 192.168.1.52 -d
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size:   125 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to web.trinity, TCP port 5001
TCP window size: 48.0 KByte (default)
------------------------------------------------------------
[  5] local 192.168.1.150 port 58255 connected with 192.168.1.52 port 5001
[  6] local 192.168.1.150 port 5001 connected with 192.168.1.52 port 58691
[ ID] Interval       Transfer     Bandwidth
[  5]  0.0-10.0 sec    113 MBytes  94.5 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  6]  0.0-10.1 sec  12.4 MBytes  10.3 Mbits/sec

Again its slow. Is that up or down speed?

So what's happening? I'm guessing its solaris?

The NIC's in all servers are 1gb, but the linux servers going into 100mb switch ports and the solaris machine goes into a 1000mb port (same switch). Other than that there's no environmental factors I can think off.

On the solaris server its broadcom NIC, managed with the BGE driver.

I'll try putting the solaris server onto a 100mb port tomorrow and replacing its network cable (its only about 2 days old anyway, bought not hand-built).

Until then, does anyone have any ideas?

I should say that the 'normal' tests are perfect. run at ~94mb. It's just the bi-directional test (-d).


Thanks!
- Daniel

------------------------------------------------------------------------

------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
------------------------------------------------------------------------

_______________________________________________
Iperf-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/iperf-users


--

Peace!
 Mkx

-- perl -e 'print $i=pack(c5,(41*2),sqrt(7056),(unpack(c,H)-2),oct(115),10);'
-- echo 16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D4D465452snlb xq | dc

------------------------------------------------------------------------

BOFH excuse #181:

Atilla the Hub

------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Iperf-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/iperf-users

Reply via email to