Fwd: FreeBSD 6 vs 8.1

Mats Lindberg mats.w.lindberg at gmail.com
Fri Mar 18 15:17:48 UTC 2011

---------- Forwarded message ----------
From: Mats Lindberg <mats.w.lindberg at gmail.com>
Date: 2011/3/18
Subject: Re: FreeBSD 6 vs 8.1
To: Mark Tinguely <marktinguely at gmail.com>

2011/3/18 Mark Tinguely <marktinguely at gmail.com>

> 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..

Yes I could imagine this is it.

> 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

Both systems are i386 32bit

On FreeBSD-6 I have: (GENERIC) kernel
kern.clockrate: { hz = 1000, tick = 1000, profhz = 666, stathz = 133 }
On FreeBSD-8 I have:(Excluded some drivers from GENERIC kernel)
kern.clockrate: { hz = 1000, tick = 1000, profhz = 2000, stathz = 133 }
kern.hz: 1000

So same HZ -- seems the callout is implemented differently 6.x->8.1

For the kernel panic I get
fault virtual address:             0x8
instruction pointer:               0x20:0xc0679ed7
current process:                  0, (em0 taskq)

I don't know anything about these numbers, or if you even did want to know.
To me I get the feeling that this is connected to my arp problem, seems to
be something in the em driver that is not handled at this high load.

I'm quite happy now - my system has been up and running for the whole day -
so I'll leave it at this - thanks


More information about the freebsd-hackers mailing list