[K12OSN] Re: LTSP Lab Slow to Boot (Todd O'Bryan)

robert pogson robert.pogson at gmail.com
Wed Sep 17 17:17:43 UTC 2008


I had this problem two years ago. I had to tune the forcedeth drivers with
module options. It was crazy. The driver would not be able to clear the
interrupt flag and just pause. I finally adjusted the parameters to polling
instead of interrupt service. Fortunately this only affected NFS and it was
not terribly busy.

see
http://users.sosdg.org/~qiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10

"

* Known bugs:*
 84 <http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L84>
* * We suspect that on some hardware no TX done interrupts are
generated.*
 85 <http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L85>
* * This means recovery from netif_stop_queue only happens if the hw
timer*
 86 <http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L86>
* * interrupt fires (100 times/second, configurable with
NVREG_POLL_DEFAULT)*
 87 <http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L87>
* * and the timer is active in the IRQMask, or if a rx packet arrives
by chance.*
 88 <http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L88>
* * If your hardware reliably generates tx done interrupts, then you
can remove*
 89 <http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L89>
* * DEV_NEED_TIMERIRQ from the driver_data flags.*
 90 <http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L90>
* * DEV_NEED_TIMERIRQ will not harm you on sane hardware, only
generating a few*
 91 <http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L91>
* * superfluous timer interrupts from the nic.*

"

>
> "
>
> */**
> 485 <http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L485> * * Maximum number of loops until we assume that a bit in the irq mask*
> 486 <http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L486> * * is stuck. Overridable with module param.*
> 487 <http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L487> * */*
> 488 <http://users.sosdg.org/%7Eqiyong/lxr/source/drivers/net/forcedeth.c?v=2.6.10#L488> static int max_interrupt_work <http://users.sosdg.org/%7Eqiyong/lxr/ident?v=2.6.10;i=max_interrupt_work> = 5;
>
>

>
> "


"

 MODULE_PARM_DESC
<http://users.sosdg.org/%7Eqiyong/lxr/ident?v=2.6.10;i=MODULE_PARM_DESC>(max_interrupt_work
<http://users.sosdg.org/%7Eqiyong/lxr/ident?v=2.6.10;i=max_interrupt_work>,
*"forcedeth maximum events handled per interrupt"*);


"

Other versions have more options like:
http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c
"

 module_param <http://www.gelato.unsw.edu.au/lxr/ident?i=module_param>(max_interrupt_work
<http://www.gelato.unsw.edu.au/lxr/ident?i=max_interrupt_work>, int,
0);
3406 <http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3406>
MODULE_PARM_DESC
<http://www.gelato.unsw.edu.au/lxr/ident?i=MODULE_PARM_DESC>(max_interrupt_work
<http://www.gelato.unsw.edu.au/lxr/ident?i=max_interrupt_work>,
*"forcedeth maximum events handled per interrupt"*);
3407 <http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3407>
module_param <http://www.gelato.unsw.edu.au/lxr/ident?i=module_param>(optimization_mode
<http://www.gelato.unsw.edu.au/lxr/ident?i=optimization_mode>, int,
0);
3408 <http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3408>
MODULE_PARM_DESC
<http://www.gelato.unsw.edu.au/lxr/ident?i=MODULE_PARM_DESC>(optimization_mode
<http://www.gelato.unsw.edu.au/lxr/ident?i=optimization_mode>, *"In
throughput mode (0), every tx & rx packet will generate an interrupt.
In CPU mode (1), interrupts are controlled by a timer."*);
3409 <http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3409>
module_param <http://www.gelato.unsw.edu.au/lxr/ident?i=module_param>(poll_interval
<http://www.gelato.unsw.edu.au/lxr/ident?i=poll_interval>, int, 0);
3410 <http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3410>
MODULE_PARM_DESC
<http://www.gelato.unsw.edu.au/lxr/ident?i=MODULE_PARM_DESC>(poll_interval
<http://www.gelato.unsw.edu.au/lxr/ident?i=poll_interval>, *"Interval
determines how frequent timer interrupt is generated by
[(time_in_micro_secs * 100) / (2^10)]. Min is 0 and Max is 65535."*);
3411 <http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3411>
module_param <http://www.gelato.unsw.edu.au/lxr/ident?i=module_param>(disable_msi
<http://www.gelato.unsw.edu.au/lxr/ident?i=disable_msi>, int, 0);
3412 <http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3412>
MODULE_PARM_DESC
<http://www.gelato.unsw.edu.au/lxr/ident?i=MODULE_PARM_DESC>(disable_msi
<http://www.gelato.unsw.edu.au/lxr/ident?i=disable_msi>, *"Disable MSI
interrupts by setting to 1."*);
3413 <http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3413>
module_param <http://www.gelato.unsw.edu.au/lxr/ident?i=module_param>(disable_msix
<http://www.gelato.unsw.edu.au/lxr/ident?i=disable_msix>, int, 0);
3414 <http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3414>
MODULE_PARM_DESC
<http://www.gelato.unsw.edu.au/lxr/ident?i=MODULE_PARM_DESC>(disable_msix
<http://www.gelato.unsw.edu.au/lxr/ident?i=disable_msix>, *"Disable
MSIX interrupts by setting to 1."*);
3415 <http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3415>
3416 <http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3416>
MODULE_AUTHOR <http://www.gelato.unsw.edu.au/lxr/ident?i=MODULE_AUTHOR>(*"Manfred
Spraul <manfred at colorfullife.com>"*);
3417 <http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3417>
MODULE_DESCRIPTION
<http://www.gelato.unsw.edu.au/lxr/ident?i=MODULE_DESCRIPTION>(*"Reverse
Engineered nForce ethernet driver"*);
3418 <http://www.gelato.unsw.edu.au/lxr/source/drivers/net/forcedeth.c#L3418>
MODULE_LICENSE <http://www.gelato.unsw.edu.au/lxr/ident?i=MODULE_LICENSE>(*"GPL"*);

"

I have long forgotten the settings I used, but this may help you find where
to look. My recollection is that I polled with
optimization_mode=1
poll_interval=10000

Your guess is as good as mine what the units were. I just know I could
transfer 112 MB/s with it.

Thank Goodness we have open source... ;-)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/k12osn/attachments/20080917/13fe15fe/attachment.htm>


More information about the K12OSN mailing list