const maxCPUProfStack … const profBufWordCount … const profBufTagCount … type cpuProfile … var cpuprof … // SetCPUProfileRate sets the CPU profiling rate to hz samples per second. // If hz <= 0, SetCPUProfileRate turns off profiling. // If the profiler is on, the rate cannot be changed without first turning it off. // // Most clients should use the [runtime/pprof] package or // the [testing] package's -test.cpuprofile flag instead of calling // SetCPUProfileRate directly. func SetCPUProfileRate(hz int) { … } // add adds the stack trace to the profile. // It is called from signal handlers and other limited environments // and cannot allocate memory or acquire locks that might be // held at the time of the signal, nor can it use substantial amounts // of stack. // //go:nowritebarrierrec func (p *cpuProfile) add(tagPtr *unsafe.Pointer, stk []uintptr) { … } // addNonGo adds the non-Go stack trace to the profile. // It is called from a non-Go thread, so we cannot use much stack at all, // nor do anything that needs a g or an m. // In particular, we can't call cpuprof.log.write. // Instead, we copy the stack into cpuprof.extra, // which will be drained the next time a Go thread // gets the signal handling event. // //go:nosplit //go:nowritebarrierrec func (p *cpuProfile) addNonGo(stk []uintptr) { … } // addExtra adds the "extra" profiling events, // queued by addNonGo, to the profile log. // addExtra is called either from a signal handler on a Go thread // or from an ordinary goroutine; either way it can use stack // and has a g. The world may be stopped, though. func (p *cpuProfile) addExtra() { … } // CPUProfile panics. // It formerly provided raw access to chunks of // a pprof-format profile generated by the runtime. // The details of generating that format have changed, // so this functionality has been removed. // // Deprecated: Use the [runtime/pprof] package, // or the handlers in the [net/http/pprof] package, // or the [testing] package's -test.cpuprofile flag instead. func CPUProfile() []byte { … } // runtime/pprof.runtime_cyclesPerSecond should be an internal detail, // but widely used packages access it using linkname. // Notable members of the hall of shame include: // - github.com/grafana/pyroscope-go/godeltaprof // - github.com/pyroscope-io/godeltaprof // // Do not remove or change the type signature. // See go.dev/issue/67401. // //go:linkname pprof_cyclesPerSecond runtime/pprof.runtime_cyclesPerSecond func pprof_cyclesPerSecond() int64 { … } // readProfile, provided to runtime/pprof, returns the next chunk of // binary CPU profiling stack trace data, blocking until data is available. // If profiling is turned off and all the profile data accumulated while it was // on has been returned, readProfile returns eof=true. // The caller must save the returned data and tags before calling readProfile again. // The returned data contains a whole number of records, and tags contains // exactly one entry per record. // // runtime_pprof_readProfile should be an internal detail, // but widely used packages access it using linkname. // Notable members of the hall of shame include: // - github.com/pyroscope-io/pyroscope // // Do not remove or change the type signature. // See go.dev/issue/67401. // //go:linkname runtime_pprof_readProfile runtime/pprof.readProfile func runtime_pprof_readProfile() ([]uint64, []unsafe.Pointer, bool) { … }