Hi, on my way to learn to use pprof, i now face some intriguing results with lots of runtime.* calls,
can you help me to understand what those call are and how i should care about ? (pprof) top30 8720ms of 14380ms total (60.64%) Dropped 118 nodes (cum <= 71.90ms) Showing top 30 nodes out of 143 (cum >= 3800ms) flat flat% sum% cum cum% 720ms 5.01% 5.01% 1050ms 7.30% runtime.scanobject 700ms 4.87% 9.87% 3640ms 25.31% runtime.gentraceback 670ms 4.66% 14.53% 1780ms 12.38% runtime.pcvalue 490ms 3.41% 17.94% 490ms 3.41% runtime.readvarint 420ms 2.92% 20.86% 910ms 6.33% runtime.step 420ms 2.92% 23.78% 420ms 2.92% runtime/internal/atomic.Xchg 380ms 2.64% 26.43% 380ms 2.64% runtime.heapBitsForObject 340ms 2.36% 28.79% 1580ms 10.99% runtime.mallocgc 310ms 2.16% 30.95% 360ms 2.50% runtime.gopark 270ms 1.88% 32.82% 270ms 1.88% runtime.heapBitsSetType 260ms 1.81% 34.63% 510ms 3.55% runtime.scanblock 250ms 1.74% 36.37% 250ms 1.74% runtime/internal/atomic.Cas 240ms 1.67% 38.04% 4040ms 28.09% github.com/mh-cbon/chan/stream .(*Transform).Push 240ms 1.67% 39.71% 1210ms 8.41% runtime.schedule 230ms 1.60% 41.31% 230ms 1.60% runtime.newdefer 220ms 1.53% 42.84% 320ms 2.23% runtime.deferreturn 210ms 1.46% 44.30% 260ms 1.81% bytes.genSplit 210ms 1.46% 45.76% 260ms 1.81% runtime.greyobject 210ms 1.46% 47.22% 6080ms 42.28% runtime.systemstack 200ms 1.39% 48.61% 210ms 1.46% runtime.acquireSudog 200ms 1.39% 50.00% 1760ms 12.24% runtime.scanframeworker 190ms 1.32% 51.32% 790ms 5.49% sync.(*Mutex).Lock 180ms 1.25% 52.57% 180ms 1.25% runtime.gogo 180ms 1.25% 53.82% 180ms 1.25% runtime.memmove 170ms 1.18% 55.01% 790ms 5.49% runtime.chanrecv 170ms 1.18% 56.19% 530ms 3.69% runtime.lock 170ms 1.18% 57.37% 170ms 1.18% runtime.usleep 160ms 1.11% 58.48% 220ms 1.53% runtime.siftdownTimer 160ms 1.11% 59.60% 160ms 1.11% runtime/internal/atomic.Load 150ms 1.04% 60.64% 3800ms 26.43% main.main.func2 Also, I m not totally comfortable with flat Vs cum meanings, and those basics are not covered in https://blog.golang.org/profiling-go-programs Can you take a moment to explain those two notions ? One more Q. In this pprof output (pprof) list Push Total: 14.38s ROUTINE ======================== github.com/mh-cbon/chan/stream.(*Readable). Push in /home/mh-cbon/gow/src/github.com/mh-cbon/chan/stream/reader.go 0 1.65s (flat, cum) 11.47% of Total . . 79:func (s *Readable) Push(b interface{}) { . . 80: for s.Paused() { . . 81: <- time.After(time.Millisecond * 1) . . 82: } . . 83: s.writeMutex.Lock() . 10ms 84: defer s.writeMutex.Unlock() . . 85: for _, o := range s.Pipes { . 1.64s 86: o.Write(b) . . 87: } . . 88:} . . 89:func (s *Readable) Catch(fn ErrorFunc) Stream { . . 90: s.E = append(s.E, fn) . . 91: return s ROUTINE ======================== github.com/mh-cbon/chan/stream.(*Transform ).Push in /home/mh-cbon/gow/src/github.com/mh-cbon/chan/stream/transform.go 240ms 4.13s (flat, cum) 28.72% of Total . . 72: } else { . . 73: s.Push(b) . . 74: } . . 75:} . . 76:// Push writes data down in the stream. 40ms 40ms 77:func (s *Transform) Push(b interface{}) { . . 78: // s.pipeMutex.Lock() . . 79: // defer s.pipeMutex.Unlock() 190ms 190ms 80: for _, o := range s.Pipes { 10ms 3.90s 81: o.Write(b) . . 82: } . . 83:} . . 84:func (s *Transform) Catch(fn ErrorFunc) Stream { . . 85: s.E = append(s.E, fn) . . 86: return s The tow methods are very similar, but Transform.Push shows 190ms for the for loop, where Readable.Push does not show anything. How to understand this ? thanks! -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.