Re: ULE/SCHED_SMP diff for 7.0

From: Jeff Roberson <jroberson_at_chesapeake.net>
Date: Wed, 18 Jul 2007 16:17:42 -0700 (PDT)
On Thu, 19 Jul 2007, Rene Ladan wrote:

> Jeff Roberson schreef:
>>
>> On Wed, 18 Jul 2007, Rene Ladan wrote:
>>
>>> Jeff Roberson schreef:
>>>>
>>>> On Wed, 18 Jul 2007, Rene Ladan wrote:
>>>>
>>>>> Jeff Roberson schreef:
>>>>>> http://people.freebsd.org/~jeff/ule.diff
>>>>>>
>>>>>> This patch is scheduled for inclusion in 7.0.  I would like anyone who
>>>>>> cares to run it to validate that it does not create any stability or
>>>>>> performance regression over the existing ULE.  This patch replaces ULE
>>>>>> with SCHED_SMP, which will now no longer exist as a seperate fork of
>>>>>> ULE.
>>>>> [..]
>>>>>
>>>>> I cvsupped this evening at 19:34 UTC.  The new ULE scheduler works fine
>>>>> in single-user mode (it survives "make kernel"), but when I go to
>>>>> multi-user mode I get a "sched_add: trying to run inhibited thread"
>>>>> panic (2 vmcores lost due to fsck :( )
>>>>
>>>> Can you get me a backtrace?  You can enable KDB and DDB in your kernel
>>>> along with INVARIANTS.  Just type 'tr' and record the function names
>>>>
>>>
>>> I found a file #165060 in /var/lost+found .  kgdb didn't eat it, but
>>> strings
>>> could still extract the attached backtrace.  In case you want to
>>> recompile
>>> the kernel, it is compiled with -O1 -pipe -march=prescott
>>> -fno-strict-aliasing
>>
>> Can you run gdb kernel.debug from your compile directory.  Then type:
>>
>> list *(sched_switch+0x26e)
>>
>> I need to know the line number of that call.
>

Thank you.

This is definitely a KSE/ULE problem.  Can you try 
http://people.freebsd.org/~jeff/sched_ule.c?  I have made some changes 
that may fix this.

Thanks,
Jeff

> Sure:
> root_at_195-241-221-201:/usr/obj/usr/src/sys/RENE#gdb kernel.debug
> (gdb) list *(sched_switch+0x26e)
> 0xc051c7b0 is in sched_switch (/usr/src/sys/kern/sched_ule.c:1761).
> 1756                    /* XXX This is bogus.  What if the thread is locked elsewhere? */
> 1757                    td->td_lock = TDQ_LOCKPTR(tdq);
> 1758                    td->td_sched->ts_cpu = cpuid;
> 1759                    tdq_add(tdq, td, SRQ_YIELDING);
> 1760            }
> 1761            newtd = choosethread();
> 1762            /*
> 1763             * Call the MD code to switch contexts if necessary.
> 1764             */
> 1765            if (td != newtd) {
>
> This on an i386.
>
> Regards,
> Rene
> -- 
> GPG fingerprint = E738 5471 D185 7013 0EE0  4FC8 3C1D 6F83 12E1 84F6
> (subkeys.pgp.net)
>
> "It won't fit on the line."
> 		-- me, 2001
>
>
> _______________________________________________
> freebsd-current_at_freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe_at_freebsd.org"
>
Received on Wed Jul 18 2007 - 21:14:30 UTC

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