]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: don't call setitimer for each thread
authorIan Lance Taylor <iant@golang.org>
Thu, 25 Jun 2020 21:50:10 +0000 (14:50 -0700)
committerIan Lance Taylor <iant@golang.org>
Wed, 19 Aug 2020 03:49:06 +0000 (03:49 +0000)
Previously, on Unix systems, when the profiler was enabled or disabled,
we called setitimer once per thread. With this change we instead call
it once per process.

Change-Id: I90f0189b562e11232816390dc7d55ed154bd836d
Reviewed-on: https://go-review.googlesource.com/c/go/+/240003
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
src/runtime/signal_unix.go

index 6a11c91fb93dd18133195208bfca5f5482d39892..064a0ea100f5071ea5907dad234b04ddc43e8d0d 100644 (file)
@@ -272,6 +272,12 @@ func setProcessCPUProfiler(hz int32) {
                        atomic.Storeuintptr(&fwdSig[_SIGPROF], getsig(_SIGPROF))
                        setsig(_SIGPROF, funcPC(sighandler))
                }
+
+               var it itimerval
+               it.it_interval.tv_sec = 0
+               it.it_interval.set_usec(1000000 / hz)
+               it.it_value = it.it_interval
+               setitimer(_ITIMER_PROF, &it, nil)
        } else {
                // If the Go signal handler should be disabled by default,
                // switch back to the signal handler that was installed
@@ -296,23 +302,16 @@ func setProcessCPUProfiler(hz int32) {
                                setsig(_SIGPROF, h)
                        }
                }
+
+               setitimer(_ITIMER_PROF, &itimerval{}, nil)
        }
 }
 
 // setThreadCPUProfiler makes any thread-specific changes required to
 // implement profiling at a rate of hz.
+// No changes required on Unix systems.
 func setThreadCPUProfiler(hz int32) {
-       var it itimerval
-       if hz == 0 {
-               setitimer(_ITIMER_PROF, &it, nil)
-       } else {
-               it.it_interval.tv_sec = 0
-               it.it_interval.set_usec(1000000 / hz)
-               it.it_value = it.it_interval
-               setitimer(_ITIMER_PROF, &it, nil)
-       }
-       _g_ := getg()
-       _g_.m.profilehz = hz
+       getg().m.profilehz = hz
 }
 
 func sigpipe() {