Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 19 Oct 2004 15:34:41 -0700
From:      Julian Elischer <julian@elischer.org>
To:        FreeBSD Current <freebsd-current@freebsd.org>
Subject:   wakeup/sleep handoff.
Message-ID:  <41759681.1060700@elischer.org>

next in thread | raw e-mail | index | archive | help
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.)





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?41759681.1060700>