OLPC "iperf hang" notes

Mitch Bradley wmb at firmworks.com
Wed Feb 28 17:00:35 EST 2007

Notes on "iperf hang" problem.

Under Marcelo's supervision, I run iperf in server mode on one XO, iperf 
in client mode on another XO, communicating via the internal Marvell 
wireless on server XO and an external Marvell wireless dongle on the 
client XO.

I used a USB analyzer to observe the USB traffic to the wireless dongle 
on the client.

At the human-observable level, the client iperf quickly hangs and has to 
be killed.

I looked at USB traces from several different iperf runs.  The same 
thing happened every time:

  a) An initial exchange of a few short TCP packet exchange that was 
probably setup.

  b) 29 closely-spaced repetitions of the following exchange:

       1) Client sends a 1500 byte TCP segment to the server (spread 
over 4 USB transactions 512, 512, 512, 6).

       2) Server responds.  The response length on the USB bus is either 
98, 110, or 118 bytes, for a TCP payload size of either 12, 24, or 30 bytes.

  c) The total time for the 29 exchanges was always very close to 200 mS.

  d) After the 29 exchanges, there is no data traffic on the USB bus 
until you kill the iperf client process.  (USB polls, i.e. "Incomplete 
IN transactions", continue, indicating that the USB host controller is 
still functioning.)

  e) The last of the 29 exchanges is well-formed and complete, i.e. the 
server did indeed respond to the client's transmission.

I also used "ifconfig" and "netstat -s" to look for errors detected by 
the network stack.  After each iperf run, the ifconfig "TX dropped" 
number increased by 9, and several error numbers in the netstat -s 
"TcpExt" section increased.  I no longer have the exact data from 
netstat -s, but I recall an increase in some counters related to "SACK", 
as well as at least one other error counter.


More information about the Devel mailing list