]> Cypherpunks repositories - gostls13.git/commitdiff
internal/trace: flags for what to include in GC utilization
authorAustin Clements <austin@google.com>
Fri, 28 Jul 2017 17:51:58 +0000 (13:51 -0400)
committerAustin Clements <austin@google.com>
Mon, 5 Nov 2018 19:10:20 +0000 (19:10 +0000)
Change-Id: I4ba963b003cb25b39d7575d423f17930d84f3f69
Reviewed-on: https://go-review.googlesource.com/c/60796
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
src/cmd/trace/mmu.go
src/internal/traceparser/gc.go
src/internal/traceparser/gc_test.go

index f76e0d0e5fa861d57edf257d16163a75c126d674..2a07be4ba2d1f12d642bf0904cece10b74bb806a 100644 (file)
@@ -38,7 +38,7 @@ func getMMUCurve() ([]trace.MutatorUtil, *trace.MMUCurve, error) {
                if err != nil {
                        mmuCache.err = err
                } else {
-                       mmuCache.util = tr.MutatorUtilization()
+                       mmuCache.util = tr.MutatorUtilization(trace.UtilSTW | trace.UtilBackground | trace.UtilAssist)
                        mmuCache.mmuCurve = trace.NewMMUCurve(mmuCache.util)
                }
        })
index 313e23edf6efd34c961769c24a3d4e9966f04339..ab0c640e26cb016d279bcc056715821f5c8bd90c 100644 (file)
@@ -22,11 +22,27 @@ type MutatorUtil struct {
        Util float64
 }
 
+// UtilFlags controls the behavior of MutatorUtilization.
+type UtilFlags int
+
+const (
+       // UtilSTW means utilization should account for STW events.
+       UtilSTW UtilFlags = 1 << iota
+       // UtilBackground means utilization should account for
+       // background mark workers.
+       UtilBackground
+       // UtilAssist means utilization should account for mark
+       // assists.
+       UtilAssist
+       // UtilSweep means utilization should account for sweeping.
+       UtilSweep
+)
+
 // MutatorUtilization returns the mutator utilization function for the
 // given trace. This function will always end with 0 utilization. The
 // bounds of the function are implicit in the first and last event;
 // outside of these bounds the function is undefined.
-func (p *Parsed) MutatorUtilization() []MutatorUtil {
+func (p *Parsed) MutatorUtilization(flags UtilFlags) []MutatorUtil {
        events := p.Events
        if len(events) == 0 {
                return nil
@@ -42,17 +58,33 @@ func (p *Parsed) MutatorUtilization() []MutatorUtil {
                case EvGomaxprocs:
                        gomaxprocs = int(ev.Args[0])
                case EvGCSTWStart:
-                       stw++
+                       if flags&UtilSTW != 0 {
+                               stw++
+                       }
                case EvGCSTWDone:
-                       stw--
+                       if flags&UtilSTW != 0 {
+                               stw--
+                       }
                case EvGCMarkAssistStart:
-                       gcPs++
-                       assists[ev.G] = true
+                       if flags&UtilAssist != 0 {
+                               gcPs++
+                               assists[ev.G] = true
+                       }
                case EvGCMarkAssistDone:
-                       gcPs--
-                       delete(assists, ev.G)
+                       if flags&UtilAssist != 0 {
+                               gcPs--
+                               delete(assists, ev.G)
+                       }
+               case EvGCSweepStart:
+                       if flags&UtilSweep != 0 {
+                               gcPs++
+                       }
+               case EvGCSweepDone:
+                       if flags&UtilSweep != 0 {
+                               gcPs--
+                       }
                case EvGoStartLabel:
-                       if strings.HasPrefix(ev.SArgs[0], "GC ") && ev.SArgs[0] != "GC (idle)" {
+                       if flags&UtilBackground != 0 && strings.HasPrefix(ev.SArgs[0], "GC ") && ev.SArgs[0] != "GC (idle)" {
                                // Background mark worker.
                                bgMark[ev.G] = true
                                gcPs++
index 65772be7172c4478a46c689d239a9b146a84a388..f1416fa9f92ee225381a7c6a0596a97fd01f8345 100644 (file)
@@ -84,7 +84,7 @@ func TestMMUTrace(t *testing.T) {
        if err := p.Parse(0, 1<<62, nil); err != nil {
                t.Fatalf("failed to parse trace: %s", err)
        }
-       mu := p.MutatorUtilization()
+       mu := p.MutatorUtilization(UtilSTW | UtilBackground | UtilAssist)
        mmuCurve := NewMMUCurve(mu)
 
        // Test the optimized implementation against the "obviously
@@ -106,7 +106,7 @@ func BenchmarkMMU(b *testing.B) {
        if err := p.Parse(0, 1<<62, nil); err != nil {
                b.Fatalf("failed to parse trace: %s", err)
        }
-       mu := p.MutatorUtilization()
+       mu := p.MutatorUtilization(UtilSTW | UtilBackground | UtilAssist | UtilSweep)
        b.ResetTimer()
 
        for i := 0; i < b.N; i++ {