Panic of 8-CURRENT in VMWare
Ben Kelly
bkelly at vadev.org
Mon Jul 28 14:12:07 UTC 2008
On Mar 18, 2008, at 7:07 PM, Ivan Voras wrote:
> Jeff Roberson wrote:
>> On Tue, 18 Mar 2008, Ivan Voras wrote:
>>> Ivan Voras wrote:
>>>> Hi,
>>>> I cannot boot a very recent build (minutes ago) of 8-CURRENT on
>>>> VMWare Server. Panic ("integer divide fault" - is this division
>>>> by zero?) is in sched_rr_interval().
>>>>
>>>> More info here:
>>>> http://ivoras.sharanet.org/stuff/panic/
>>>>
>>>> It might be because I'm trying to run without WITNESS+INVARIANTS.
>>>
>>> No, building a GENERIC kernel doesn't change anything. It's also
>>> not a cvsup glitch - todays sources panic in exactly the same way.
>>>
>>>
>> Can you tell me what the values of:
>> sysctl kern.sched.slice
>> and
>> sysctl kern.clockrate
>> are?
>
> The machine doesn't finish booting the kernel (i.e. init isn't
> executed) and fetching sysctls apparently isn't supported by the
> kernel debugger (though it would be nice if it did work, at least
> for simple variables).
>
> The only old kernel I have is 7.0RC1, and in it I can only access
> kern.clockrate, which is { hz=50, tick=20000, profhz=33, stathz=6 }.
>
> Since you brought up the issue of clocks, I removed the tuning of
> kern.hz (it was present there practically forever) and the panic's
> gone. I use low values for kern.hz in VMWare to (noticably) reduce
> problems with clock drift and context switches, so it would be nice
> to not have the kernel panic with it :)
>
> Apparently lowering kern.hz works upto about 75 - anything lower
> triggers the integer divide fault.
I ran into this problem recently. It appears that sched_slice is set
to zero when realstathz drops below 10 in sched_ule.c:
sched_slice = (realstathz/10); /* ~100ms */
I was able to work around the problem with the following patch. The
image no longer panics, but I have not done any stress or performance
testing. Is there a better solution to this problem?
For reference:
> uname -a
FreeBSD vm7.vadev.org 7.0-STABLE FreeBSD 7.0-STABLE #3 r50:55M: Mon
Jul 28 09:27:04 EDT 2008 root at vm7.vadev.org:/usr/obj/usr/src/sys/
VMWARE i386
> sysctl -a | grep kern.clock
kern.clockrate: { hz = 50, tick = 20000, profhz = 33, stathz = 6 }
The patch is against 7-STABLE from 7/24/2008.
Thanks.
- Ben
Index: src/sys/kern/sched_ule.c
===================================================================
--- src/sys/kern/sched_ule.c (revision 53)
+++ src/sys/kern/sched_ule.c (working copy)
@@ -1325,6 +1325,7 @@
*/
realstathz = hz;
sched_slice = (realstathz/10); /* ~100ms */
+ sched_slice = sched_slice ? sched_slice : 1;
tickincr = 1 << SCHED_TICK_SHIFT;
/* Add thread0's load since it's running. */
@@ -1345,6 +1346,7 @@
realstathz = stathz ? stathz : hz;
sched_slice = (realstathz/10); /* ~100ms */
+ sched_slice = sched_slice ? sched_slice : 1;
/*
* tickincr is shifted out by 10 to avoid rounding errors due to
More information about the freebsd-current
mailing list