Re: Panic of 8-CURRENT in VMWare

From: Ben Kelly <bkelly_at_vadev.org>
Date: Mon, 28 Jul 2008 09:49:06 -0400
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)
_at__at_ -1325,6 +1325,7 _at__at_
  	 */
  	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. */
_at__at_ -1345,6 +1346,7 _at__at_

  	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
Received on Mon Jul 28 2008 - 12:12:07 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:33 UTC