On Wed, Aug 17, 2011 at 10:22:16AM -0700, Xinliang David Li wrote:
> On Wed, Aug 17, 2011 at 8:35 AM, Mike Hommey <mhom...@mozilla.com> wrote:
> > On Thu, Aug 11, 2011 at 09:27:23AM -0700, Xinliang David Li wrote:
> >> > Maybe I have an idea as to why FDO doesn't work so well. Does the
> >> > instrumentation code support running several times in parallel (as in,
> >> > several processes with the instrumented code running concurrently)?
> >>
> >> gcc supports profile merging from multiple runs -- but there is no
> >> synchronization on profile file update, but it will become a problem
> >> only when all the concurrently running processes are existing at the
> >> same time (and dumping profile data to the same gcda file at the same
> >> time). Similarly, there are data races in profile counter update for
> >> multi-threaded programs, in practice it is not a big issue
> >> (-fprofile-correction option needs to be turned on in profile-use).
> >
> > Are there known quirks with threads and dlopen() ?
> 
> threads causes data races in counter update, but the problem is minor
> in practice.
> 
> dlopen should also be fine. libgcov is linked in statically into each
> shared library, so dlopen/dlclose won't mess up other shared lib or
> main executable's module list.
> 
> >
> > To avoid the problem mentioned above, I configured Firefox to use only
> > one process. But in that setup, I only get partial instrumentation data.
> > For example, I get instrumentation data for cairo, but not for our
> > layout engine. I do however get layout engine instrumentation data with
> > the same build if I enable multiple processes (but then I hit the
> > problem that multiple processes updating the same profile data is not
> > properly supported).
> 
> Are they exiting at the same time? If not, it should be fine.

They are, and communicate with each other.

Mike

Reply via email to