Tx TCP rates down > 20% - A report.

Paul Gortmaker (gpg109@rsphy6.anu.edu.au)
Wed, 1 May 1996 12:19:55 +1000 (EST)


Tx speeds are way down in 1.3.97 as compared to v1.2.13 -- in fact there
appears to be a "glass-ceiling" effect, where v1.3.97 can't Tx any
better than sending 820 -> 830kB/s even with decent hardware. However
Rx with v1.3.97 is good, as I can consistently jam >1100kB/s into a
wd8013 and about 1040kB/s into a soft-config Winbond based ne2000 when
Tx'ing from a 1.2.13 kernel.

Back to the glass-ceiling effect. The tests below were performed
with multiple (usually 10 to 20) 64MB TTCP runs, using various cards,
kernels and machines. I have only reported two results per test to keep
this post semi-readable. In each run, the following parameters were used:
ttcp-t: buflen=8192, nbuf=8192, align=16384/0
It is also worth noting that similar Tx rates were obtained by ftp'ing
a large file (cached) to /dev/null which indicates that the TTCP
measurements are not subjet to some huge systematic error.

The machine labels reported in the results below are as follows:

A -- 486-33, SMC Elite16 (i.e. wd8013) @ 16MHz ISA bus
B -- 486-33, ne2000 (Winbond AT/LANTIC clone) in EISA bus (ISA MHz = ?)
C -- 486-66, SMC Elite16 (i.e. wd8013) @ 11MHz ISA bus

Notes:

1) The CPU usage reported for 1.2.13 and 1.3.97 can not be directly
compared, since the way that linux charges CPU time has since changed.

2) The exact same zImage was used for 1.3.97 on each machine, built with
Nagle and MTU discovery disabled (isolated net). Also this same 1.3.97
kernel was used as the receiving kernel in each case to keep things
consistent across all the tests.

3) Systems were all a.out, with 1.2.13 compiled with gcc-2.5.8 and the
1.3.97 built with gcc-2.7.2 (a.out binary).

4) There was no other net traffic during the tests. (isolated link)
There was about 10m of BNC between A and B and 10m between A and C.

5) No errors or abnormalities were evident from "cat /proc/net/dev".
There were no overruns or dropped packets on the Rx machine(s).

6) Back at v1.3.90, with an EtherExpress-16 in machine B, I found Tx via
ftp to machine A also limited to 820kB/s -- I thought nothing of it
at the time, assuming it was a driver limitation. (The EE-16 driver in
v1.2.13 is not sufficiently functional to allow a comparison.)

7) Back around 1.3.4x when I put in the 8390 eth_copy_and_sum() changes,
I did similar tests and if I recall correctly, Tx rates were still
in excess of 1MB/s at that point in time.

Here are the results. In each case, Tx rates that the v1.3.97 kernel
was able to achieve were down 20 to 25% as compared to a v1.2.13 kernel.

Paul.
====================================================================

wd8013 sending (C) with 1.2.13, wd8013 rec'ing (A) with 1.3.97

ttcp-t: 67108864 bytes in 59.03 real seconds = 1110.21 KB/sec +++
ttcp-t: 8192 I/O calls, msec/call = 7.38, calls/sec = 138.78
ttcp-t: 0.0user 16.5sys 0:59real 28% 0i+0d 0maxrss 0+2pf 0+0csw
-------------------
ttcp-t: 67108864 bytes in 59.05 real seconds = 1109.91 KB/sec +++
ttcp-t: 8192 I/O calls, msec/call = 7.38, calls/sec = 138.74
ttcp-t: 0.0user 15.3sys 0:59real 26% 0i+0d 0maxrss 0+2pf 0+0csw

wd8013 sending (C) with 1.3.97, wd8013 rec'ing (A) with 1.3.97

ttcp-t: 67108864 bytes in 79.82 real seconds = 821.05 KB/sec +++
ttcp-t: 8192 I/O calls, msec/call = 9.98, calls/sec = 102.63
ttcp-t: 0.1user 7.9sys 1:19real 10% 0i+0d 0maxrss 0+1pf 0+0csw
-------------------
ttcp-t: 67108864 bytes in 79.84 real seconds = 820.79 KB/sec +++
ttcp-t: 8192 I/O calls, msec/call = 9.98, calls/sec = 102.60
ttcp-t: 0.0user 7.5sys 1:19real 9% 0i+0d 0maxrss 0+1pf 0+0csw

(1110-821)/1110 ~= 26% slower with 1.3.97

====================================================================

ne2k sending (B) with 1.2.13, wd8013 rec'ing (A) with 1.3.97

ttcp-t: 67108864 bytes in 69.41 real seconds = 944.25 KB/sec +++
ttcp-t: 8192 I/O calls, msec/call = 8.68, calls/sec = 118.03
ttcp-t: 0.2user 68.9sys 1:09real 99% 0i+0d 0maxrss 0+2pf 0+0csw
-------------------
ttcp-t: 67108864 bytes in 69.57 real seconds = 942.00 KB/sec +++
ttcp-t: 8192 I/O calls, msec/call = 8.70, calls/sec = 117.75
ttcp-t: 0.1user 69.3sys 1:09real 99% 0i+0d 0maxrss 0+2pf 0+0csw

ne2k sending (B) with 1.3.97, wd8013 rec'ing (A) with 1.3.97

ttcp-t: 67108864 bytes in 93.08 real seconds = 704.09 KB/sec +++
ttcp-t: 8192 I/O calls, msec/call = 11.63, calls/sec = 88.01
ttcp-t: 0.1user 14.5sys 1:33real 15% 0i+0d 0maxrss 0+1pf 0+0csw
-------------------
ttcp-t: 67108864 bytes in 93.35 real seconds = 702.03 KB/sec +++
ttcp-t: 8192 I/O calls, msec/call = 11.67, calls/sec = 87.75
ttcp-t: 0.1user 11.6sys 1:33real 12% 0i+0d 0maxrss 0+1pf 0+0csw

(943-703)/943 ~= 25% slower with 1.3.97

====================================================================

wd8013 sending (A) with 1.2.13, ne2k rec'ing (B) with 1.3.97

ttcp-t: 67108864 bytes in 62.41 real seconds = 1050.09 KB/sec +++
ttcp-t: 8192 I/O calls, msec/call = 7.80, calls/sec = 131.26
ttcp-t: 0.2user 27.0sys 1:02real 43% 0i+0d 0maxrss 0+2pf 0+0csw
-------------------
ttcp-t: 67108864 bytes in 62.66 real seconds = 1045.96 KB/sec +++
ttcp-t: 8192 I/O calls, msec/call = 7.83, calls/sec = 130.74
ttcp-t: 0.1user 24.4sys 1:02real 39% 0i+0d 0maxrss 0+2pf 0+0csw

wd8013 sending (A) with 1.3.97, ne2k rec'ing (B) with 1.3.97

ttcp-t: 67108864 bytes in 79.05 real seconds = 829.04 KB/sec +++
ttcp-t: 8192 I/O calls, msec/call = 9.88, calls/sec = 103.63
ttcp-t: 0.0user 11.8sys 1:19real 15% 0i+0d 0maxrss 0+1pf 0+0csw
-------------------
ttcp-t: 67108864 bytes in 79.00 real seconds = 829.57 KB/sec +++
ttcp-t: 8192 I/O calls, msec/call = 9.88, calls/sec = 103.70
ttcp-t: 0.0user 12.2sys 1:19real 15% 0i+0d 0maxrss 0+1pf 0+0csw

(1048-829)/1048 ~= 21% slower with 1.3.97

====================================================================