https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93623

            Bug ID: 93623
           Summary: No need to dump gcdas when forking
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: gcov-profile
          Assignee: unassigned at gcc dot gnu.org
          Reporter: cdenizet at mozilla dot com
                CC: marxin at gcc dot gnu.org
  Target Milestone: ---

In order to have accurate counters, gcdas are dumped before a fork and counters
are reset.
I think the dump is pretty useless: we could just reset the counters in the
child process.
Let say a counter is N before the fork, then fork and this counter is set to 0
in the child process.
In the parent process, the counter is incremented by P and in the child process
it's incremented by C.
When dump is ran at exit, parent process will dump N+P for the given counter
and the child process will dump 0+C, so when the gcdas are merged the resulting
counter will be N+P+C: so it's correct.
So the dump is useless and is time consuming. In firefox we've a lot of
processes and a lot of gcdas, so the dump adds a lot of overhead.
I think it makes sense to dump/reset in the case of exec** functions since the
process is replaced by a new process and so the counters are definitly lost.

Reply via email to