Date: Mon, 8 Nov 2004 21:37:17 -0500 (EST) From: Daniel Eischen <deischen@freebsd.org> To: Julian Elischer <julian@elischer.org> Cc: Devesh Shah <shah@docomolabs-usa.com> Subject: Re: Loadable Scheduler in Freebsd Message-ID: <Pine.GSO.4.43.0411082130310.11442-100000@sea.ntplx.net> In-Reply-To: <41902883.7080508@elischer.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 8 Nov 2004, Julian Elischer wrote: > > > Devesh Shah wrote: > > > Thanks to all of you who have responded to my initial question. I > > would be interested in looking at such implementation if possible. I > > see there are about 18 other kernel files that call common scheduler > > interface routines defined in ul.c and bsd.c such as sched_nice(), > > sched_sleep(), sched_wakeup() etc. These would have to be > > transitioned to call appropriately when new scheduler is loaded and > > disable the old scheduler. > > We would simply change them to call via pointers.. no big deal. > It might even be a saving in some cases because you could skip > calling if the pointer is NULL instead of always calling and discovering > that the function is only a stub that does nothing.. > > > Also, init (in init_main.c) process is > > handcrafted and given the address of kse in thread structure. These > > kses are defined differently for both schedulers. > > > what revision are you looking at? init_main.c calls schedinti() > that is in the scheduler, which does this.. > > A lot of this was changed just prior to 5.3. The kse structure is > unknown outside of the scheduler. It is only defined within > sched_4bsd or sched_ule.c. so init_main.c has no idea what is in it. > (or even that it exists) There is not even any requirement that teh even > BE any per-thread scheduelr private structure. (struct kse == struct > td_sched > for historical reasons.. I have not yet decided which name will 'survive'). > > You COULD switch schedulers at run time but you'd need to be able to > extract each thread from the old scheduler and inject it into the new > scheduler, while holding all other things the same. > > You would also need to change the allocation code to allocate the kse > (a.k.a td_sched) structure separatly, so that it could be freed and > replaced by one > that is suitable for the new scheduler. This would not be a big task but > the code > to extract the threads and put them into the new scheduler would be > quite interesting. If the schedulers were aware of the "selected" scheduler (or perhaps the previous scheduler), they could do the thread removal and insertions themselves I suppose. -- Dan Eischen
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GSO.4.43.0411082130310.11442-100000>