Date: Tue, 19 Oct 2004 22:00:38 -0400 From: Stephan Uphoff <ups@tree.com> To: Julian Elischer <julian@elischer.org> Cc: FreeBSD Current <freebsd-current@freebsd.org> Subject: Re: wakeup/sleep handoff. Message-ID: <1098237638.15834.105.camel@palm.tree.com> In-Reply-To: <41759681.1060700@elischer.org> References: <41759681.1060700@elischer.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 2004-10-19 at 18:34, Julian Elischer wrote: > Is there a need to be able to somehow implement a 'wakeup_one()' that > as part of its semantic is that the woken thread will run immediatly, > (as in preemprion), > and the old thread will sleep? With preemption, the old thread is left > in the run queue, > and after the other thread has completed, it will > run again and probably go away and sleep for some reason.. (or at least > go do some work that isn't > necessarily required..) > > Something like handover(wakeupchan, sleepchan, msleep_args...). > sort of an atomic wakeup/msleep. > > This would be used in places where work used to be done by the same > thread, but is now done > by a server thread.. > > An example would be kicking off a geom thread, when in the past we would > have gone all > the way down to the hardware ourself. we want to get as close to acting > like we are still > going all the way done as we can (performance wise). We may get some > efficiency by > letting the sleep system, and scheduler know what we are trying to do. > Possibly with some > priority inherritance implications.. (if we have a high priority, we > probably want to ensure that the > worker thread is run with at least that priority.) Why not just give the geom thread a high priority? This, full preemption and changing a few functions to guaranty that the highest priority thread will always run should do what you want. ( And maybe always raising the priority of threads working in the kernel) Actually this is relatively high on my to do list and I should have some patches to try out in a week or two. Stephan
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1098237638.15834.105.camel>