1
0
mirror of https://github.com/golang/go synced 2024-11-11 17:51:49 -07:00

runtime,runtime/metrics: clarify OS stack metrics

There are some subtle details here about measuring OS stacks in cgo
programs. There's also an expectation about magnitude in the MemStats
docs that isn't in the runtime/metrics docs. Fix both.

Fixes #54396.

Change-Id: I6b60a62a4a304e6688e7ab4d511d66193fc25321
Reviewed-on: https://go-review.googlesource.com/c/go/+/502156
Run-TryBot: Michael Knyszek <mknyszek@google.com>
Auto-Submit: Michael Knyszek <mknyszek@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Michael Pratt <mpratt@google.com>
This commit is contained in:
Michael Anthony Knyszek 2023-06-09 19:14:55 +00:00 committed by Gopher Robot
parent e126572f8a
commit b2215e49c7
3 changed files with 33 additions and 8 deletions

View File

@ -339,9 +339,11 @@ var allDesc = []Description{
Kind: KindUint64,
},
{
Name: "/memory/classes/heap/stacks:bytes",
Description: "Memory allocated from the heap that is reserved for stack space, whether or not it is currently in-use.",
Kind: KindUint64,
Name: "/memory/classes/heap/stacks:bytes",
Description: "Memory allocated from the heap that is reserved for stack space, whether or not it is currently in-use. " +
"Currently, this represents all stack memory for goroutines. It also includes all OS thread stacks in non-cgo programs. " +
"Note that stacks may be allocated differently in the future, and this may change.",
Kind: KindUint64,
},
{
Name: "/memory/classes/heap/unused:bytes",
@ -374,9 +376,13 @@ var allDesc = []Description{
Kind: KindUint64,
},
{
Name: "/memory/classes/os-stacks:bytes",
Description: "Stack memory allocated by the underlying operating system.",
Kind: KindUint64,
Name: "/memory/classes/os-stacks:bytes",
Description: "Stack memory allocated by the underlying operating system. " +
"In non-cgo programs this metric is currently zero. This may change in the future." +
"In cgo programs this metric includes OS thread stacks allocated directly from the OS. " +
"Currently, this only accounts for one stack in c-shared and c-archive build modes, " +
"and other sources of stacks from the OS are not measured. This too may change in the future.",
Kind: KindUint64,
},
{
Name: "/memory/classes/other:bytes",

View File

@ -318,7 +318,10 @@ Below is the full list of supported metrics, ordered lexicographically.
/memory/classes/heap/stacks:bytes
Memory allocated from the heap that is reserved for stack space,
whether or not it is currently in-use.
whether or not it is currently in-use. Currently, this
represents all stack memory for goroutines. It also includes all
OS thread stacks in non-cgo programs. Note that stacks may be
allocated differently in the future, and this may change.
/memory/classes/heap/unused:bytes
Memory that is reserved for heap objects but is not currently
@ -345,6 +348,12 @@ Below is the full list of supported metrics, ordered lexicographically.
/memory/classes/os-stacks:bytes
Stack memory allocated by the underlying operating system.
In non-cgo programs this metric is currently zero. This may
change in the future.In cgo programs this metric includes
OS thread stacks allocated directly from the OS. Currently,
this only accounts for one stack in c-shared and c-archive build
modes, and other sources of stacks from the OS are not measured.
This too may change in the future.
/memory/classes/other:bytes
Memory used by execution trace buffers, structures for debugging

View File

@ -199,7 +199,17 @@ type MemStats struct {
// StackSys is bytes of stack memory obtained from the OS.
//
// StackSys is StackInuse, plus any memory obtained directly
// from the OS for OS thread stacks (which should be minimal).
// from the OS for OS thread stacks.
//
// In non-cgo programs this metric is currently equal to StackInuse
// (but this should not be relied upon, and the value may change in
// the future).
//
// In cgo programs this metric includes OS thread stacks allocated
// directly from the OS. Currently, this only accounts for one stack in
// c-shared and c-archive build modes and other sources of stacks from
// the OS (notably, any allocated by C code) are not currently measured.
// Note this too may change in the future.
StackSys uint64
// Off-heap memory statistics.