From 4f2e382c9fb646e6f34bb0d7c4fa1a0a963a3b54 Mon Sep 17 00:00:00 2001 From: Dmitriy Vyukov Date: Wed, 14 Aug 2013 00:30:55 +0400 Subject: runtime: dump scheduler state if GODEBUG=schedtrace is set The schedtrace value sets dump period in milliseconds. In default mode the trace looks as follows: SCHED 0ms: gomaxprocs=4 idleprocs=0 threads=3 idlethreads=0 runqueue=0 [1 0 0 0] SCHED 1001ms: gomaxprocs=4 idleprocs=3 threads=6 idlethreads=3 runqueue=0 [0 0 0 0] SCHED 2008ms: gomaxprocs=4 idleprocs=1 threads=6 idlethreads=1 runqueue=0 [0 1 0 0] If GODEBUG=scheddetail=1 is set as well, then the detailed trace is printed: SCHED 0ms: gomaxprocs=4 idleprocs=0 threads=3 idlethreads=0 runqueue=0 singleproc=0 gcwaiting=1 mlocked=0 nmspinning=0 stopwait=0 sysmonwait=0 P0: status=3 tick=1 m=0 runqsize=1/128 gfreecnt=0 P1: status=3 tick=0 m=-1 runqsize=0/128 gfreecnt=0 P2: status=3 tick=0 m=-1 runqsize=0/128 gfreecnt=0 P3: status=3 tick=0 m=-1 runqsize=0/128 gfreecnt=0 M2: p=-1 curg=-1 mallocing=0 throwing=0 gcing=0 locks=1 dying=0 helpgc=0 spinning=0 lockedg=-1 M1: p=-1 curg=-1 mallocing=0 throwing=0 gcing=0 locks=1 dying=0 helpgc=0 spinning=0 lockedg=-1 M0: p=0 curg=1 mallocing=0 throwing=0 gcing=0 locks=1 dying=0 helpgc=0 spinning=0 lockedg=1 G1: status=2() m=0 lockedm=0 G2: status=1() m=-1 lockedm=-1 R=golang-dev, raggi, rsc CC=golang-dev https://golang.org/cl/11435044 --- src/pkg/runtime/runtime.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/pkg/runtime/runtime.h') diff --git a/src/pkg/runtime/runtime.h b/src/pkg/runtime/runtime.h index 89a42bbca4..c93a139a6c 100644 --- a/src/pkg/runtime/runtime.h +++ b/src/pkg/runtime/runtime.h @@ -361,6 +361,7 @@ struct P { Lock; + int32 id; uint32 status; // one of Pidle/Prunning/... P* link; uint32 schedtick; // incremented on every scheduler call @@ -532,6 +533,8 @@ struct CgoMal struct DebugVars { int32 gctrace; + int32 schedtrace; + int32 scheddetail; }; /* @@ -823,6 +826,7 @@ void runtime·exit(int32); void runtime·breakpoint(void); void runtime·gosched(void); void runtime·gosched0(G*); +void runtime·schedtrace(bool); void runtime·park(void(*)(Lock*), Lock*, int8*); void runtime·tsleep(int64, int8*); M* runtime·newm(void); -- cgit v1.3-5-g9baa