Commit c2985a05 authored by Jon Coppeard's avatar Jon Coppeard
Browse files

Bug 1823622 - Part 2: Refine parallel marking telemetry to exclude wait times r=sfink

There are three measurements made for parallel mark threads: 1) total time, 2)
marking time and 3) waiting time (when the thread is blocked on a condition
variable).

When calculating utilization we want to use the time the thread was running so
we should exclude waiting time. When calculating the speedup over single
threaded marking we want to use the time the thread spent marking.

Depends on D173127

Differential Revision: https://phabricator.services.mozilla.com/D173128
parent bad11fdf
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -1107,12 +1107,15 @@ void Statistics::sendGCTelemetry() {
  // Parallel marking stats.
  if (gc->isParallelMarkingEnabled()) {
    TimeDuration wallTime = SumPhase(PhaseKind::PARALLEL_MARK, phaseTimes);
    TimeDuration parallelRunTime =
        sumTotalParallelTime(PhaseKind::PARALLEL_MARK) -
        sumTotalParallelTime(PhaseKind::PARALLEL_MARK_WAIT);
    TimeDuration parallelMarkTime =
        sumTotalParallelTime(PhaseKind::PARALLEL_MARK);
        sumTotalParallelTime(PhaseKind::PARALLEL_MARK_MARK);
    if (wallTime && parallelMarkTime) {
      uint32_t threadCount = gc->markers.length();
      double speedup = parallelMarkTime / wallTime;
      double utilization = parallelMarkTime / (wallTime * threadCount);
      double utilization = parallelRunTime / (wallTime * threadCount);
      runtime->metrics().GC_PARALLEL_MARK_SPEEDUP(uint32_t(speedup * 100.0));
      runtime->metrics().GC_PARALLEL_MARK_UTILIZATION(
          uint32_t(utilization * 100.0));