Threads and userland profliing...
Daniel Eischen
eischen at vigrid.com
Tue May 11 14:59:39 PDT 2004
On Tue, 11 May 2004, John Baldwin wrote:
> Currently in the pstats structure we have a uprof substructure that holds
> various values used for userland processing. Does anyone know what parts of
> that structure are supposed to be per-process and which are supposed to be
> per-thread? pr_addr and pr_ticks seem to be definite per-thread items, but
> the other values I'm not sure of.
>
> Specifically, is the userland table that pr_base, pr_size, pr_off, and
> pr_scale refer to per-thread or is it supposed to be shared among all threads
> in a process? If it's shared, do we need to be using casuptr() or something
> similar in addupc_intr() instead of a separate fetch and store?
> addupc_task() also has a race window between the copyin() and copyout() as
> well if it is shared. If its private, then I suppose each thread has to call
> profil(2) and gprof is supposed to be smart enough to make that happen? Does
> POSIX have anything to say regarding threads and profil(2)?
POSIX does not define profil(2). Here's what Solaris 9 has to
say about it:
In Solaris releases prior to 2.6, calling profil() in a mul-
tithreaded program would impact only the calling LWP; the
profile state was not inherited at LWP creation time. To
profile a multithreaded program with a global profile
buffer, each thread needed to issue a call to profil() at
threads start-up time, and each thread had to be a bound
thread. This was cumbersome and did not easily support
dynamically turning profiling on and off. In Solaris 2.6,
the profil() system call for multithreaded processes has
global impact - that is, a call to profil() impacts all
LWPs/threads in the process. This may cause applications
that depend on the previous per-LWP semantic to break, but
it is expected to improve multithreaded programs that wish
to turn profiling on and off dynamically at runtime.
We should probably avoid the mistake that Solaris < 2.6
made.
--
Dan Eischen
More information about the freebsd-threads
mailing list