cpuset and affinity implementation
Daniel Eischen
deischen at freebsd.org
Tue Feb 26 15:39:07 UTC 2008
On Mon, 25 Feb 2008, Jeff Roberson wrote:
> Binding a processor set to the process simply sets the per-thread binding of
> each thread in the process. There is otherwise no specific process binding.
> We could keep a pointer to the last specifically bound set in the process if
> we wanted, but what would it be used for other than querying the id of the
> process? What if each thread was seperately specifically bound to a
> different set? What set should be used on fork? The set of the process or
> the thread that called fork? What about when creating a new thread?
The set used on fork should be the set of the calling thread,
same concept as signal masks I would think. Same thing when
creating a new thread. I guess I'd check how Linux and Solaris
do it, see if they are consistent.
I can see how you might _not_ want to inherit bindings in a
created thread. For a process with real-time threads, the
application might start with superuser privileges, create some
threads with real-time priority and set their bindings, then
setuid() to remove superuser privileges. Is a privilege check
made in a newly created thread when applying inherited bindings?
> See above discussion. I'm not sure what you mean by 'default' cpuset here.
I imagine the 'default' cpuset as the system's default cpuset,
in lieu of any administratively created cpusets and bindings
for the process (inherited or explicit).
--
DE
More information about the freebsd-arch
mailing list