Ethernet driver general problem ....

3 messages, 3 authors, 2005-06-09 · open the first message on its own page

Ethernet driver general problem ....

From: Matti Aarnio <hidden>
Date: 2005-06-09 20:53:48

I encountered today a case, where default RX_RING_SIZE
was too small for the traffic going thru.  (3c59x driver,
and NAT-router application.)

One related problem is, that the RING_SIZE is hard #define
parameter in most driver sources without ability to adjust
it during runtime.  (e.g.  "modprobe zzzz rx_ring_size=512")
Possibly even an  ifconfig:able  parameter, which works
also for statically compiled kernels.  (But needs new
ifconfig machinery...)


The case at hand was solved by editing kernel sources, and
compiling a new kernel, but now I am looking for a more
generic approach.


Clearly pre-allocing 500 buffers of 1.6 kB in size does
eat a bit much of kernel memory which usual workstation
does not get benefit from, but server or router would get
benefits.

Having the rx_ring_size  ifconfig  tunable would help with 
adjusting interface for reception, but adding ifconfig
parameters is ... not trivial.

Alternate might be  sysctl  tunability -- even as a global
'dev.eth.rx_ring_size' (or  'net.dev.eth.rx_ring_size')
which supplies (default) ring size for initialization of
the interface where such rings exist at all...


Possibly there should also be tx_ring_size, which need not
be same size as the rx_ring_size.

Unadjusted default value for both could be 16.


All in all, this needs near uniquitous changes in driver
init codes accross lots of network drivers.


Comments ?  Suggestions ?

  /Matti Aarnio

Re: Ethernet driver general problem ....

From: Andy Fleming <hidden>
Date: 2005-06-09 21:04:48

Look into ethtool.  ethtool allows you to configure the ring sizes,  
among other things.

On Jun 9, 2005, at 15:53, Matti Aarnio wrote:
I encountered today a case, where default RX_RING_SIZE
was too small for the traffic going thru.  (3c59x driver,
and NAT-router application.)

One related problem is, that the RING_SIZE is hard #define
parameter in most driver sources without ability to adjust
it during runtime.  (e.g.  "modprobe zzzz rx_ring_size=512")
Possibly even an  ifconfig:able  parameter, which works
also for statically compiled kernels.  (But needs new
ifconfig machinery...)


The case at hand was solved by editing kernel sources, and
compiling a new kernel, but now I am looking for a more
generic approach.


Clearly pre-allocing 500 buffers of 1.6 kB in size does
eat a bit much of kernel memory which usual workstation
does not get benefit from, but server or router would get
benefits.

Having the rx_ring_size  ifconfig  tunable would help with
adjusting interface for reception, but adding ifconfig
parameters is ... not trivial.

Alternate might be  sysctl  tunability -- even as a global
'dev.eth.rx_ring_size' (or  'net.dev.eth.rx_ring_size')
which supplies (default) ring size for initialization of
the interface where such rings exist at all...


Possibly there should also be tx_ring_size, which need not
be same size as the rx_ring_size.

Unadjusted default value for both could be 16.


All in all, this needs near uniquitous changes in driver
init codes accross lots of network drivers.


Comments ?  Suggestions ?

  /Matti Aarnio

Re: Ethernet driver general problem ....

From: Francois Romieu <romieu@fr.zoreil.com>
Date: 2005-06-09 21:12:26

Matti Aarnio [off-list ref] :
[...]
Comments ?  Suggestions ?
See the use of ethtool_ops.set_ringparam() below drivers/net.

--
Ueimor
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help