Subject: Re: rtk0: transmit underrun
To: Toru TAKAMIZU <ttaka@earth.email.ne.jp>
From: David Laight <david@l8s.co.uk>
List: current-users
Date: 03/03/2003 15:48:25
> Mar  2 17:43:27 starmax /netbsd: rtk0: transmit underrun; new threshold: 320 bytes

What sort of card is this?  (ISA, PCI etc)

The above error message stinks of someone trying to implement driver
support for some hardware features that are specifically designed to
improve some benchmark figures [1], and are not particularly applicable
to more general use of the ethernet card.

The theory was that on ISA systems, the time taken to shovel a packet
onto the card (using 'rep outw') is comparable to the transit time on
the network.  So if you start transmitting before all the packet is
on the card you get a latency improvement - provided the transmitting
code doesn't stall.

A similar hack is used on the rx side to generate an interrupt when
only a small part of the frame has been received.  Here you hope that
driver doesn't quite run out of data, if it does then you either
have to loopstop the driver, or wait for another ISR.  Both will
destroy a server and are (possibly) accepateble on a workstation
running a benchmark.

For a reasonable protocol and server the above 'optimisations' are
not really useful.  A small amount of latency is time when the server
will be processing requests from a different client - so it doesn't
matter.  The additional cpu cycles consumed (especially by any
additional interrupts) make much more difference.
Even the extended code paths could matter.

	David

[1] I think it is some specific NetWare tests where all the packets are
512 bytes and the acks are end to end for each packet.

-- 
David Laight: david@l8s.co.uk