package benchmark

import "cmd/link/internal/benchmark"

Package benchmark provides a Metrics object that enables memory and CPU profiling for the linker. The Metrics objects can be used to mark stages of the code, and name the measurements during that stage. There is also optional GCs that can be performed at the end of each stage, so you can get an accurate measurement of how each stage changes live memory.

Index

Types

type Flags

type Flags int
const (
	GC         = 1 << iota
	NoGC Flags = 0
)

type Metrics

type Metrics struct {
	// contains filtered or unexported fields
}

func New

func New(gc Flags, filebase string) *Metrics

New creates a new Metrics object.

Typical usage should look like:

func main() {
  filename := "" // Set to enable per-phase pprof file output.
  bench := benchmark.New(benchmark.GC, filename)
  defer bench.Report(os.Stdout)
  // etc
  bench.Start("foo")
  foo()
  bench.Start("bar")
  bar()
}

Note that a nil Metrics object won't cause any errors, so one could write code like:

func main() {
  enableBenchmarking := flag.Bool("enable", true, "enables benchmarking")
  flag.Parse()
  var bench *benchmark.Metrics
  if *enableBenchmarking {
    bench = benchmark.New(benchmark.GC)
  }
  bench.Start("foo")
  // etc.
}

func (*Metrics) Report

func (m *Metrics) Report(w io.Writer)

Report reports the metrics. Closes the currently Start(ed) range, and writes the report to the given io.Writer.

func (*Metrics) Start

func (m *Metrics) Start(name string)

Start marks the beginning of a new measurement phase. Once a metric is started, it continues until either a Report is issued, or another Start is called.

Source Files

bench.go

Version
v1.24.0 (latest)
Published
Feb 10, 2025
Platform
linux/amd64
Imports
7 packages
Last checked
22 minutes ago

Tools for package owners.