system scope vs. process scope

David Xu davidxu at freebsd.org
Sat Aug 5 00:06:30 UTC 2006


On Friday 04 August 2006 23:34, John Baldwin wrote:

> Suppose you have a system with 2 processes.  One process is single-threaded
> and is CPU bound.  The other process has 2 threads both of which are also
> CPU bound.  If the threads in the second process are PTHREAD_SCOPE_SYSTEM,
> then each thread will get 33% of the CPU.  If the threads in the second
> process are PTHREAD_SCOPE_PROCESS, then the each process will get 50% of
> the CPU. The second process will then use its own algorithm to split it's
> 50% of the CPU up between it's two threads.  If it divides it evenly, then
> each of its' threads will end up with 25% of the CPU whereas the thread for
> the first process has 50% of the CPU.  The idea for this is that if you
> have a system with several single-threaded processes and one process with
> 1000 threads, you don't want that process to starve out all the other
> processes.
>
I can make my application fork 800 processes and starve out all the other
user.

> In practice things get much hairier, but suffice it to say that libpthread
> manages the scheduling of PTHREAD_SCOPE_PROCESS threads in userland,
> whereas libthr would have to depend on the kernel managing that.  (To some
> extent libpthread needs some help from the kernel to provide this as well.)

The complete solution is FSS (fair sharing schedule) found in Solaris.

David Xu


More information about the freebsd-threads mailing list