Date: Wed, 9 Oct 2002 19:35:01 -0700 From: Luigi Rizzo <rizzo@icir.org> To: Jeff Roberson <jeff@FreeBSD.ORG> Cc: arch@FreeBSD.ORG Subject: Re: Scheduler patch, ready for commit. Message-ID: <20021009193501.A55534@carp.icir.org> In-Reply-To: <20021009211321.M23516-100000@mail.chesapeake.net>; from jeff@FreeBSD.ORG on Wed, Oct 09, 2002 at 09:17:18PM -0400 References: <20021009211321.M23516-100000@mail.chesapeake.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Oct 09, 2002 at 09:17:18PM -0400, Jeff Roberson wrote:
> I haven't heard any objections to the goals of this patch. I have cleaned
> it up and readied it for commit. This step is important so that I can
well, you said you posted it just to get feedback, and now in 24 hours
you declare it "ready for commit". A bit rushing, aren't you!
I totally agree on the goals of the change (to abstract the scheduler
from the base system, generalise it, etc.), but it seems to me that
the specific details still need some cleanup before committing.
And, well, maybe leave a little bit more time to people to provide feedback!
So to come to the specific points:
* there is one important API function which in my opinion is
missing: -stable has a function, curpriority_cmp, which compares
the priority of a currently running "thing" (process/thread)
with that of a newly awaken one, and decises who has more right
to get the CPU.
In -current this is done inline (by comparing priorities),
but this is very specific of the scheduler used there -- e.g.
it doesn't work for the scheduler used in -stable (where we have
3 different classes for rtprio, normal and idlepri processes),
and it does not work in general in cases where you could have
different metrics to decide who is going to proceed.
* Another API which should be made generic is forward_roundrobin().
I believe the purpose of a "generic" version of this function
is to dispatch a generic timeout to the appropriate CPU(s). In
the FreeBSD's scheduler this timeout happens to be the roundrobin
timeout, hence the name, but other schedulers (e.g. the one we
wrote) have different timeout routines, and the dispatching
requirements vary (e.g. could need to go to a single CPU as
opposed to all cpus).
On the same grounds, sched_rr_interval() is not generic,
but specific for the freebsd scheduler. Not all schedulers
have the concept of a roundrobin interval.
* The other thing that i would really like to see is to
call the scheduler functions through function pointers, so
life is a lot easier when we will decide to enable kldloading of
schedulers (or having multiple alternative ones).
The way to implement it is trivial, see how we did in
http://info.iet.unipi.it/~luigi/ps_sched.20020719a.diff.
Oh, another thing: struct proc (or struct thread, whatever it is
in -current)) contains some scheduler-specific information, such
as the priority fields. Other schedulers might need different data
structures to work on. Given that this structure is something we
should not change lightly or frequently, it would be a good idea
to provide one (1) field (e.g. a void *) to be used by the scheduler
to reach a "scheduler extension" block from it. The way we provided
this extensibility in our scheduler framework (in -stable) was to
use some padding bytes in struct proc to store an integer which is
an index in an array of extended process descriptors, but that was
just a hack motivated by the need of not changing "struct proc".
Finally, thanks for working on this stuff!
cheers
luigi
----------------------------------+-----------------------------------------
Luigi RIZZO, luigi@iet.unipi.it . ICSI (on leave from Univ. di Pisa)
http://www.iet.unipi.it/~luigi/ . 1947 Center St, Berkeley CA 94704
Phone: (510) 666 2988
----------------------------------+-----------------------------------------
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021009193501.A55534>
