Subject: TSO on wm(4) (Intel Pro/1000): i82546 vs i8254EI vs others?
To: None <tech-net@netbsd.org, port-i386@netbsd.org>
From: Jonathan Stone <jonathan@dsg.stanford.edu>
List: port-i386
Date: 05/20/2005 15:56:33
I've been measuring TCP throughput with ttcp to see how much TSO wins.
I have been using an Intel SE7501WV2 motherboard with a 3.06GHz P4 Xeon.
The motherboard has a builtin dual-port 82546. I have also tried a
plug-in 82546 board and a couple of 82544EI (mid-height PCI-X
single-port boards).  The wm driver reports TSOv4 support for all of
those devices.

Using ttcp to send on a single 82546 port, I can fill the send-side of
the link with about 22% CPU utiliziation. I'd love to hit 4 Gbit/sec
by sending on four different ports, one each to each of four suitable
receviers, each receiver on a separate subnet. (Alternatively, if
there's a tighter bottleneck on this system, I'd like to find it.)


Old news, at least for me, is that the 82546 cannot send at full speed
on both ports whatever I try (even for FreeBSD-4 with the Intel-supplied
em(4) driver). So I tried some 82544EI cards which I found in a spares box.

The 82546 shows a dramatic win from enabling TSO (about 6,000 hardware
interupts/sec and 22% CPU to fill the send side, vs. 50% CPU without
TSO).  But the 82544EI doesn't show nearly as much of a win from TSO.

Without TSO, the 82544EI generates about 24,000 interrupts/sec at 123
Mbyte/sec throughput, consuming about 50% CPU, with IPv4 and TCP
checksum offload enabled.  When I also enable TSO on the 82544EI, I
see about about 17,000 interrupts/sec and from 40% to 45% CPU load --
not much of a delta from the pre-TSO number, and very close to twice
the CPU cost of filling just one 82546 channel.

Are these results expected?  Does anyone (Matt?) know how well TSO is
supposed to work on the various versions of the Intel chip-- the CSA
version, maybe? Also, has anyone tried similar experiments with 
other devices with TSO driver support (currently realtek 8169)?

I note Linux drivers for the bcm570x family load firmware that
supports TSO, but I don't want to go there just yet...