bge interfaces: poor transmit performance?

David Siebörger drs at
Wed Jun 6 08:50:17 UTC 2007

I'm experiencing a problem with BCM5721 bge interfaces, which seem to be 
able to receive at almost 1Gbps but can only transmit at =< 560Mbps.

I first noticed the problem on a firewall which routes between a number 
of subnets, all connected as VLAN interfaces on bge0.  In its case, 
transmitted traffic and received traffic should be roughly equal (minus 
those packets which the firewall drops) but I've seen that throughput 
hits a limit at 560Mbps (measured from the interface stats using slurm).

To investigate further, I've connected two of the same machines with a 
flylead and run some iperf tests:

Test: iperf -c172.30.3.x -w256k -t30 -P8

	Client		Server		Result
1.	6.2-STABLE	7.0-CURRENT	499 Mbits/sec
2.	7.0-CURRENT	6.2-STABLE	526 Mbits/sec
3.	6.2-STABLE	Linux		500 Mbits/sec
4.	Linux		6.2-STABLE	941 Mbits/sec
5.	Linux		Linux		941 Mbits/sec

Test: iperf -c172.30.3.x -w256k -t30 -P4 -d

	Client		Server		Result
6.	6.2-STABLE	7.0-CURRENT	381 & 388 Mbits/sec
7.	7.0-CURRENT	6.2-STABLE	369 & 405 Mbits/sec
8.	6.2-STABLE	Linux		423 & 537 Mbits/sec
9.	Linux		6.2-STABLE	421 & 554 Mbits/sec
10.	Linux		Linux		833 & 830 Mbits/sec

(Hardware: Dell PE860, onboard BCM5721 NICs, 2.4 GHz Xeon 3060 CPU.
FreeBSD tuning: net.inet.ip.fw.enable=0, kern.ipc.maxsockbuf=8192000, 
net.inet.tcp.sendspace=262144, net.inet.tcp.recvspace=262144, WITNESS 
and INVARIANTS disabled on -CURRENT.
Linux: Knoppix 5.1.1 with kernel 2.6.19, using tg3 driver.)

The most interesting result I see there is the difference between tests 
3 and 4: just changing the direction of traffic flow makes a major 
difference to performance.

Possible causes that (I think) have been eliminated:

 * IRQ sharing.  'vmstat -i | grep bge' on all machines looks similar to 
	irq16: bge0                       374558          5
	irq17: bge1                       324860          4

 * Hardware architecture.  If Linux can make it perform well, there's no 
fundamental PCI bus bandwidth limitation or anything like that.

 * Network errors.  'netstat -i' has always shown Ierrs and Oerrs = 0.

 * SMP.  I've tried building SMP and non-SMP kernels and got almost 
idenitical results.

 * HZ.  I've tried kernels with the default HZ=1000 and with HZ=2500.

Does anyone have any ideas as to what could be causing the problem, or 
any other tests I could try that might shed light on the problem?

David Siebörger
drs at

More information about the freebsd-net mailing list