[vortex] eth0: Too much work in interrupt, ...

Bogdan Costescu Bogdan.Costescu@IWR.Uni-Heidelberg.De
Thu, 31 Aug 2000 15:28:15 +0200 (CEST)


On Thu, 31 Aug 2000, Hamid Reza Shahriari wrote:

> How can I measure the network load? I'm benchmarking a web-cache server
> and my load is 250 req/sec (the mean size of replies is 13K).

250 * 13K = 3250 Kb/s (that's bytes, not bits) which is significant
(bearing in mind that this is only the mean reply size to which requests
and TCP specific packets are added).
You can also watch how number of packets/interrupts increases by using
ifconfig and 'cat /proc/interrupts' for example.

> I used 3c59x-bc-1.0.c, It didn't crash for 7 hours, but it prints 
> many kernel messages such as:
> 
> eth0: Too much work in interrupt, status e401.
> eth0: Too much work in interrupt, status e401.
> eth0: Too much work in interrupt, status e401.
> eth0: Too much work in interrupt, status e401.
> eth0: Tx Ring full, refusing to send buffer.
> eth0: Too much work in interrupt, status e401.
> eth0: Tx Ring full, refusing to send buffer.
> eth0: Too much work in interrupt, status e401.
> ...

Do you also get "transmit timed out" messages, or "Too much work in
interrupt" and "Tx Ring full" are the only ones ?

> Then I used 3c59x.c v0.99Qk from Scld.com, Sever could reply in more
> throughput than 3c59x-bc and error messages are rare:

I assume that the lower throughput of 3c59x-bc-1.0 is due to the
interrupt disabling in boomerang_interrupt when "Too much work in
interrupt" condition occurs.
You can try to increase some parameters in the driver:

- max_interrupt_work - default 20, but you can increase it to 32 or more;
you can do this by either modifying the driver source or passing something
like "max_interrupt_work=32" as module option. This might make the "Too
much work in interrupt" condition to be met less frequently. However,
increasing this parameter will allow more operations to be done per
interrupt, which means that the interrupt will take longer to complete;
this might affect other interrupt-driven functions, like disk access, so
don't increase it to 10000 from the first try.

- TX_RING_SIZE - default 16, but you can increase it to 32 or more (but
keep it a power of 2 for efficiency); you can do this only by modifying
the driver source. This might make "Tx Ring full" condition to be met less
frequently. In your particular case, there should be no ill effect of
increasing this parameter.

Please try them one at a time, in this order.

Sincerely,

Bogdan Costescu

IWR - Interdisziplinaeres Zentrum fuer Wissenschaftliches Rechnen
Universitaet Heidelberg, INF 368, D-69120 Heidelberg, GERMANY
Telephone: +49 6221 54 8869, Telefax: +49 6221 54 8868
E-mail: Bogdan.Costescu@IWR.Uni-Heidelberg.De