Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Mar 2011 07:25:25 -0500
From:      Mark Tinguely <marktinguely@gmail.com>
To:        Mats Lindberg <mats.w.lindberg@gmail.com>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: FreeBSD 6 vs 8.1
Message-ID:  <4D834F35.5030806@gmail.com>
In-Reply-To: <AANLkTins89qcvAjd4_x=iZVjR3rMnGaEJUwuMpMAFKny@mail.gmail.com>
References:  <AANLkTi=23g1%2BKv%2B4Pmda3-75-r13GaRFu1_Mtofej3RJ@mail.gmail.com>	<4D7DFC6F.80008@gmail.com>	<AANLkTi=Gx=YZ%2BZr0q%2BFZ8mcbQyGhjZPSYm6de4ZVwSwx@mail.gmail.com>	<4D7E0831.4060804@gmail.com> <AANLkTins89qcvAjd4_x=iZVjR3rMnGaEJUwuMpMAFKny@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 3/18/2011 3:35 AM, Mats Lindberg wrote:
> So - after a while I've made some observations.
> My problem is actually connected to arp.
>
> My config is very static so basically I want to turn off arp requests.
> Somewhere in the startup scripts I did
> > sysctl -w net.link.ether.inet.max_age=2147483647 (max accepted value)
> Which on freebsd-6.x worked fine.
> In freebsd-8.1 this makes the kernel arp functionality go bezerk - 
> probably an integer overflow somewhere.
> arp requests were sent countinously from my freebsd-8.1 node to 
> others, flooding the network.
> I tried to lower this value and found that 500000000s works fine 
> 1000000000s does not. 500000000s is OK to me so I won't try to narrow 
> it down more.
>
> The reason I was suspecting swapping problems was that after a while 
> with the flooding going on I got a kernel panic saying 'page fault', 
> which I would guess is a another bug, but, with a sensible setting on 
> the arp timeout the kernel panic does not show itself any longer.
>
> I've googled for my arp-setting problem but not found anything on it. 
> So - maybe I'm the first to see this.
> Should I enter a bug report somewhere?
> I guess this forum is not the place.
>
> /Mats
>

Did your HZ (timer interrupts per second) increase from 100 on FreeBSD-6 
to 1000 on FreeBSD-8.1? This must be a 32 bit computer / OS because that 
variable is multiplied to hz:

             canceled = callout_reset(&la->la_timer,
                 hz * V_arpt_keep, arptimer, la);

and:

#define    callout_reset(c, on_tick, fn, arg)                \
     callout_reset_on((c), (on_tick), (fn), (arg), (c)->c_cpu)

where:

int callout_reset_on(struct callout *, int , void (*ftn)(void *), void 
*, int)

I would guess that you are wrapping with 32 bit arithmetic to a small 
value. Both the hz==100 and hz==1000 will wrap to about the same number 
(a negative number). I did not look at the FreeBSD 6.x callout, but I 
think in the FreeBSD 8 callout, negative on_tick will be immediately 
called on the next tick..

A page fault panic is a kernel access to a non-mapped VA (a bad 
pointer). The panic message would have the VA and instruction address 
information.

--Mark



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4D834F35.5030806>