1// Copyright 2009 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package runtime
6
7// Breakpoint executes a breakpoint trap.
8func Breakpoint()
9
10// LockOSThread wires the calling goroutine to its current operating system thread.
11// Until the calling goroutine exits or calls UnlockOSThread, it will always
12// execute in that thread, and no other goroutine can.
13func LockOSThread()
14
15// UnlockOSThread unwires the calling goroutine from its fixed operating system thread.
16// If the calling goroutine has not called LockOSThread, UnlockOSThread is a no-op.
17func UnlockOSThread()
18
19// GOMAXPROCS sets the maximum number of CPUs that can be executing
20// simultaneously and returns the previous setting.  If n < 1, it does not
21// change the current setting.
22// The number of logical CPUs on the local machine can be queried with NumCPU.
23// This call will go away when the scheduler improves.
24func GOMAXPROCS(n int) int
25
26// NumCPU returns the number of logical CPUs on the local machine.
27func NumCPU() int
28
29// NumCgoCall returns the number of cgo calls made by the current process.
30func NumCgoCall() int64
31
32// NumGoroutine returns the number of goroutines that currently exist.
33func NumGoroutine() int
34
35// MemProfileRate controls the fraction of memory allocations
36// that are recorded and reported in the memory profile.
37// The profiler aims to sample an average of
38// one allocation per MemProfileRate bytes allocated.
39//
40// To include every allocated block in the profile, set MemProfileRate to 1.
41// To turn off profiling entirely, set MemProfileRate to 0.
42//
43// The tools that process the memory profiles assume that the
44// profile rate is constant across the lifetime of the program
45// and equal to the current value.  Programs that change the
46// memory profiling rate should do so just once, as early as
47// possible in the execution of the program (for example,
48// at the beginning of main).
49var MemProfileRate int = 512 * 1024
50
51// A MemProfileRecord describes the live objects allocated
52// by a particular call sequence (stack trace).
53type MemProfileRecord struct {
54	AllocBytes, FreeBytes     int64       // number of bytes allocated, freed
55	AllocObjects, FreeObjects int64       // number of objects allocated, freed
56	Stack0                    [32]uintptr // stack trace for this record; ends at first 0 entry
57}
58
59// InUseBytes returns the number of bytes in use (AllocBytes - FreeBytes).
60func (r *MemProfileRecord) InUseBytes() int64 { return r.AllocBytes - r.FreeBytes }
61
62// InUseObjects returns the number of objects in use (AllocObjects - FreeObjects).
63func (r *MemProfileRecord) InUseObjects() int64 {
64	return r.AllocObjects - r.FreeObjects
65}
66
67// Stack returns the stack trace associated with the record,
68// a prefix of r.Stack0.
69func (r *MemProfileRecord) Stack() []uintptr {
70	for i, v := range r.Stack0 {
71		if v == 0 {
72			return r.Stack0[0:i]
73		}
74	}
75	return r.Stack0[0:]
76}
77
78// MemProfile returns n, the number of records in the current memory profile.
79// If len(p) >= n, MemProfile copies the profile into p and returns n, true.
80// If len(p) < n, MemProfile does not change p and returns n, false.
81//
82// If inuseZero is true, the profile includes allocation records
83// where r.AllocBytes > 0 but r.AllocBytes == r.FreeBytes.
84// These are sites where memory was allocated, but it has all
85// been released back to the runtime.
86//
87// Most clients should use the runtime/pprof package or
88// the testing package's -test.memprofile flag instead
89// of calling MemProfile directly.
90func MemProfile(p []MemProfileRecord, inuseZero bool) (n int, ok bool)
91
92// A StackRecord describes a single execution stack.
93type StackRecord struct {
94	Stack0 [32]uintptr // stack trace for this record; ends at first 0 entry
95}
96
97// Stack returns the stack trace associated with the record,
98// a prefix of r.Stack0.
99func (r *StackRecord) Stack() []uintptr {
100	for i, v := range r.Stack0 {
101		if v == 0 {
102			return r.Stack0[0:i]
103		}
104	}
105	return r.Stack0[0:]
106}
107
108// ThreadCreateProfile returns n, the number of records in the thread creation profile.
109// If len(p) >= n, ThreadCreateProfile copies the profile into p and returns n, true.
110// If len(p) < n, ThreadCreateProfile does not change p and returns n, false.
111//
112// Most clients should use the runtime/pprof package instead
113// of calling ThreadCreateProfile directly.
114func ThreadCreateProfile(p []StackRecord) (n int, ok bool)
115
116// GoroutineProfile returns n, the number of records in the active goroutine stack profile.
117// If len(p) >= n, GoroutineProfile copies the profile into p and returns n, true.
118// If len(p) < n, GoroutineProfile does not change p and returns n, false.
119//
120// Most clients should use the runtime/pprof package instead
121// of calling GoroutineProfile directly.
122func GoroutineProfile(p []StackRecord) (n int, ok bool)
123
124// CPUProfile returns the next chunk of binary CPU profiling stack trace data,
125// blocking until data is available.  If profiling is turned off and all the profile
126// data accumulated while it was on has been returned, CPUProfile returns nil.
127// The caller must save the returned data before calling CPUProfile again.
128//
129// Most clients should use the runtime/pprof package or
130// the testing package's -test.cpuprofile flag instead of calling
131// CPUProfile directly.
132func CPUProfile() []byte
133
134// SetCPUProfileRate sets the CPU profiling rate to hz samples per second.
135// If hz <= 0, SetCPUProfileRate turns off profiling.
136// If the profiler is on, the rate cannot be changed without first turning it off.
137//
138// Most clients should use the runtime/pprof package or
139// the testing package's -test.cpuprofile flag instead of calling
140// SetCPUProfileRate directly.
141func SetCPUProfileRate(hz int)
142
143// SetBlockProfileRate controls the fraction of goroutine blocking events
144// that are reported in the blocking profile.  The profiler aims to sample
145// an average of one blocking event per rate nanoseconds spent blocked.
146//
147// To include every blocking event in the profile, pass rate = 1.
148// To turn off profiling entirely, pass rate <= 0.
149func SetBlockProfileRate(rate int)
150
151// BlockProfileRecord describes blocking events originated
152// at a particular call sequence (stack trace).
153type BlockProfileRecord struct {
154	Count  int64
155	Cycles int64
156	StackRecord
157}
158
159// BlockProfile returns n, the number of records in the current blocking profile.
160// If len(p) >= n, BlockProfile copies the profile into p and returns n, true.
161// If len(p) < n, BlockProfile does not change p and returns n, false.
162//
163// Most clients should use the runtime/pprof package or
164// the testing package's -test.blockprofile flag instead
165// of calling BlockProfile directly.
166func BlockProfile(p []BlockProfileRecord) (n int, ok bool)
167
168// Stack formats a stack trace of the calling goroutine into buf
169// and returns the number of bytes written to buf.
170// If all is true, Stack formats stack traces of all other goroutines
171// into buf after the trace for the current goroutine.
172func Stack(buf []byte, all bool) int
173
174// Get field tracking information.  Only fields with a tag go:"track"
175// are tracked.  This function will add every such field that is
176// referenced to the map.  The keys in the map will be
177// PkgPath.Name.FieldName.  The value will be true for each field
178// added.
179func Fieldtrack(map[string]bool)
180