mirror of
https://github.com/golang/go
synced 2024-11-15 09:40:34 -07:00
runtime: factor out GC pause time CPU stats update
Currently this is done manually in two places. Replace these manual updates with a method that also forces the caller to be mindful that the number will be multiplied (and that it needs to be). This will make follow-up changes simpler too. Change-Id: I81ea844b47a40ff3470d23214b4b2fb5b71a4abe Reviewed-on: https://go-review.googlesource.com/c/go/+/570255 Auto-Submit: Michael Knyszek <mknyszek@google.com> Reviewed-by: David Chase <drchase@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
parent
ddc6e165fd
commit
08a7ab97ba
@ -747,9 +747,8 @@ func gcStart(trigger gcTrigger) {
|
|||||||
work.pauseNS += now - stw.start
|
work.pauseNS += now - stw.start
|
||||||
work.tMark = now
|
work.tMark = now
|
||||||
|
|
||||||
sweepTermCpu := int64(work.stwprocs) * (work.tMark - work.tSweepTerm)
|
// Update the CPU stats pause time.
|
||||||
work.cpuStats.gcPauseTime += sweepTermCpu
|
work.cpuStats.accumulateGCPauseTime(now-work.tSweepTerm, work.stwprocs)
|
||||||
work.cpuStats.gcTotalTime += sweepTermCpu
|
|
||||||
|
|
||||||
// Release the CPU limiter.
|
// Release the CPU limiter.
|
||||||
gcCPULimiter.finishGCTransition(now)
|
gcCPULimiter.finishGCTransition(now)
|
||||||
@ -1017,13 +1016,10 @@ func gcMarkTermination(stw worldStop) {
|
|||||||
memstats.pause_end[memstats.numgc%uint32(len(memstats.pause_end))] = uint64(unixNow)
|
memstats.pause_end[memstats.numgc%uint32(len(memstats.pause_end))] = uint64(unixNow)
|
||||||
memstats.pause_total_ns += uint64(work.pauseNS)
|
memstats.pause_total_ns += uint64(work.pauseNS)
|
||||||
|
|
||||||
markTermCpu := int64(work.stwprocs) * (work.tEnd - work.tMarkTerm)
|
|
||||||
work.cpuStats.gcPauseTime += markTermCpu
|
|
||||||
work.cpuStats.gcTotalTime += markTermCpu
|
|
||||||
|
|
||||||
// Accumulate CPU stats.
|
// Accumulate CPU stats.
|
||||||
//
|
//
|
||||||
// Pass gcMarkPhase=true so we can get all the latest GC CPU stats in there too.
|
// Pass gcMarkPhase=true so we can get all the latest GC CPU stats in there too.
|
||||||
|
work.cpuStats.accumulateGCPauseTime(work.tEnd-work.tMarkTerm, work.stwprocs)
|
||||||
work.cpuStats.accumulate(now, true)
|
work.cpuStats.accumulate(now, true)
|
||||||
|
|
||||||
// Compute overall GC CPU utilization.
|
// Compute overall GC CPU utilization.
|
||||||
@ -1166,7 +1162,7 @@ func gcMarkTermination(stw worldStop) {
|
|||||||
gcController.assistTime.Load(),
|
gcController.assistTime.Load(),
|
||||||
gcController.dedicatedMarkTime.Load() + gcController.fractionalMarkTime.Load(),
|
gcController.dedicatedMarkTime.Load() + gcController.fractionalMarkTime.Load(),
|
||||||
gcController.idleMarkTime.Load(),
|
gcController.idleMarkTime.Load(),
|
||||||
markTermCpu,
|
int64(work.stwprocs) * (work.tEnd - work.tMarkTerm),
|
||||||
} {
|
} {
|
||||||
if i == 2 || i == 3 {
|
if i == 2 || i == 3 {
|
||||||
// Separate mark time components with /.
|
// Separate mark time components with /.
|
||||||
|
@ -921,6 +921,16 @@ type cpuStats struct {
|
|||||||
totalTime int64 // GOMAXPROCS * (monotonic wall clock time elapsed)
|
totalTime int64 // GOMAXPROCS * (monotonic wall clock time elapsed)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// accumulateGCPauseTime add dt*stwProcs to the GC CPU pause time stats. dt should be
|
||||||
|
// the actual time spent paused, for orthogonality. stwProcs should be GOMAXPROCS,
|
||||||
|
// not work.stwprocs, since this number must be comparable to a total time computed
|
||||||
|
// from GOMAXPROCS.
|
||||||
|
func (s *cpuStats) accumulateGCPauseTime(dt int64, stwProcs int32) {
|
||||||
|
cpu := dt * int64(stwProcs)
|
||||||
|
s.gcPauseTime += cpu
|
||||||
|
s.gcTotalTime += cpu
|
||||||
|
}
|
||||||
|
|
||||||
// accumulate takes a cpuStats and adds in the current state of all GC CPU
|
// accumulate takes a cpuStats and adds in the current state of all GC CPU
|
||||||
// counters.
|
// counters.
|
||||||
//
|
//
|
||||||
|
Loading…
Reference in New Issue
Block a user