I am trying to set up a host-to-host link (no switch) between two
ubuntu machines. I would like to use NIC bonding so that the link is
made of two (or more) wired ethernet channels. My NICs support 100 Mb/
s. In one direction (host a to host b), I can get about 190 Mb/s
measured with iperf. In the other, however, I am only getting about 95
Mb/s.

My setup is as follows. Host A has a Broadcom BCM4401-B0 and a US
Robotics USR997902. Host B has an Intel Pro 100 VE and a Realtek
RTL-8139. Each machine also has a third NIC installed that I am not
using. The Broadcom is wired directly to the Realtek, and the USR to
the Intel. To configure the bonding, I first run mii-tool to make sure
my links are ok. Then on each host I run

modprobe bonding miimon=100
ifconfig bond0
ifenslave bond0 ethX ethY

where is the address of the other host and ethX and ethY are
the appropriate devices. These instructions come from an example in
Documentation/networking/bonding.txt.

To measure the performance, I use iperf. I have tried both TCP and
UDP. In both cases, the throughput is at 190 Mb/s when host a is the
client and host b is the server, but when the opposite is true, the
throughput is 95 Mb/s.

A quick check of ifconfig shows that the USR on host a has only
received 93 packets after running several performance tests, while the
Broadcom has received about 300,000. However, their TX levels are both
at about 350,000. So it seems the Intel->USR channel works only in one
direction under the bonding.

Any ideas? What other kind of output would help debug this problem?

Thanks,
S.