sched_ule: roundrobin_callout replacement ?

John Baldwin jhb at freebsd.org
Thu Mar 6 14:18:22 UTC 2008


On Thursday 06 March 2008 08:40:10 am Andriy Gapon wrote:
> on 06/03/2008 14:55 John Baldwin said the following:
> > On Monday 18 February 2008 10:25:13 am Andriy Gapon wrote:
> >> I see that sched_4bsd has a NOP callout with a purpose of forcing a
> >> context switch (via softclock), so that something like a preemption
> >> could happen (e.g. for threads in a tight calculation loop).
> >> What serves the similar purpose for sched_ule?
> >> Or, how sched_ule deals with the issue without needing softclock's help?
> >
> > It's gone in newer versions of 4BSD in HEAD actually.  ULE does it by
> > checking in sched_clock() to see if the current thread has used up its
> > quantum.  If so it sets TDF_NEEDRESCHED.
>
> Thank you. But where/when does actual thread switch happens?
> E.g. I have two userland processes that do something like "while(1);",
> what is the event that can switch from one to the other?

TDF_NEEDRESCHED is checked on return to userland from interrupts, traps, and 
system calls.  The clock interrupt that sets TDF_NEEDRESCHED will check for 
it on the way back to userland and invoke ast() (sys/kern/subr_trap.c) which 
will end up forcing a context switch.

-- 
John Baldwin


More information about the freebsd-hackers mailing list