Slow ethernet/NE2000 with all 1.3 kernels (1.2 is fine)

Jamie Lokier (jamie@rebellion.co.uk)
Tue, 16 Apr 96 00:47 BST


Dear all,

Where I work, all our PC ethernet cards are NE2000 clones of one sort or
another. I know NE2000's aren't supposed to be the fastest cards
around, but back in the days of 1.2 kernels, `tcpspray' was able to send
about 900k/s to an SGI, and about 850k/s to another, identical Linux
box. There was some variation between cards from different
manufacturers (and versions), with some getting as low as 780k/s (ish).
Naturally, speed varied according to phase of the moon, etc, but it
seemed pretty good to me.

I installed 1.3.small-number (1.3.13, or something like that), and was
disappointed to find that with the 900k/s card, the peak data rate was
now more like 690k/s to the same machines. It has improved marginally
to 700k/s (just now on 1.3.89), but this may be a statistical blip. As
I said, phase of the moon, etc.

To summarise: 1.2.x kernels -> 900k/s TCP data transmission rate
1.3.x kernels -> 700k/s TCP data transmission rate

I would have brought it up sooner, but (a) 1.3 is a development kernel
and the TCP code has been, er, developed a lot, and (b) majordomo kept
dropping me from its lists. I assumed it was TCP that was the problem,
and so everyone would notice and it would all get sorted out. But TCP
has been worked on a lot and I haven't noticed anyone mention this, so
maybe it's the NE2000 driver. Everyone seems to expect the NE2000 to be
slow anyway, so maybe that's why nobody noticed. :-)

NFS read access is also slower by a similar factor, and that uses UDP
though both go through that hairy IP stuff. I haven't noticed any
noticable NFS read speed improvement since nfsiod arrived. Maybe the
servers I'm using aren't very fast anyway (the SGI and other Linux
boxes). NFS read cacheing is _really_ effective for those
nfsroot-mounted Linux boxes around the office though. :-)

If someone tells me what to do, I am quite willing to do various tests
to sort this out. One that springs to mind is to dump raw packets onto
the ethernet as fast as possible, to see if it is the NE2000 driver
transmission time, or either the packet receive time or TCP ack
processing time. But someone will have to give me some hints on writing
raw packets. Another is to try to get the 1.2.13 ne.c working with
1.3.

Cheers,
-- Jamie Lokier