pgo

package standard library
go1.22.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 5, 2024 License: BSD-3-Clause Imports: 10 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var LookupFunc = func(fullName string) (*ir.Func, error) {
	base.Fatalf("pgo.LookupMethodFunc not overridden")
	panic("unreachable")
}

LookupFunc looks up a function or method in export data. It is expected to be overridden by package noder, to break a dependency cycle.

Functions

func DirectCallee added in go1.21.0

func DirectCallee(fn ir.Node) *ir.Func

DirectCallee takes a function-typed expression and returns the underlying function that it refers to if statically known. Otherwise, it returns nil.

Equivalent to inline.inlCallee without calling CanInline on closures.

func NodeLineOffset

func NodeLineOffset(n ir.Node, fn *ir.Func) int

NodeLineOffset returns the line offset of n in fn.

func WeightInPercentage

func WeightInPercentage(value int64, total int64) float64

WeightInPercentage converts profile weights to a percentage.

Types

type CallSiteInfo

type CallSiteInfo struct {
	LineOffset int // Line offset from function start line.
	Caller     *ir.Func
	Callee     *ir.Func
}

CallSiteInfo captures call-site information and its caller/callee.

type IREdge

type IREdge struct {
	// Source and destination of the edge in IRNode.
	Src, Dst       *IRNode
	Weight         int64
	CallSiteOffset int // Line offset from function start line.
}

IREdge represents a call edge in the IRGraph with source, destination, weight, callsite, and line number information.

type IRGraph

type IRGraph struct {
	// Nodes of the graph. Each node represents a function, keyed by linker
	// symbol name.
	IRNodes map[string]*IRNode
}

IRGraph is a call graph with nodes pointing to IRs of functions and edges carrying weights and callsite information.

Nodes for indirect calls may have missing IR (IRNode.AST == nil) if the node is not visible from this package (e.g., not in the transitive deps). Keeping these nodes allows determining the hottest edge from a call even if that callee is not available.

TODO(prattmic): Consider merging this data structure with Graph. This is effectively a copy of Graph aggregated to line number and pointing to IR.

type IRNode

type IRNode struct {
	// Pointer to the IR of the Function represented by this node.
	AST *ir.Func
	// Linker symbol name of the Function represented by this node.
	// Populated only if AST == nil.
	LinkerSymbolName string

	// Set of out-edges in the callgraph. The map uniquely identifies each
	// edge based on the callsite and callee, for fast lookup.
	OutEdges map[NamedCallEdge]*IREdge
}

IRNode represents a node (function) in the IRGraph.

func (*IRNode) Name added in go1.21.0

func (i *IRNode) Name() string

Name returns the symbol name of this function.

type NamedCallEdge added in go1.22.0

type NamedCallEdge struct {
	CallerName     string
	CalleeName     string
	CallSiteOffset int // Line offset from function start line.
}

NamedCallEdge identifies a call edge by linker symbol names and call site offset.

type NamedEdgeMap added in go1.22.0

type NamedEdgeMap struct {
	Weight map[NamedCallEdge]int64

	// ByWeight lists all keys in Weight, sorted by edge weight.
	ByWeight []NamedCallEdge
}

NamedEdgeMap contains all unique call edges in the profile and their edge weight.

type Profile

type Profile struct {
	// Aggregated edge weights across the profile. This helps us determine
	// the percentage threshold for hot/cold partitioning.
	TotalWeight int64

	// NamedEdgeMap contains all unique call edges in the profile and their
	// edge weight.
	NamedEdgeMap NamedEdgeMap

	// WeightedCG represents the IRGraph built from profile, which we will
	// update as part of inlining.
	WeightedCG *IRGraph
}

Profile contains the processed PGO profile and weighted call graph used for PGO optimizations.

func New

func New(profileFile string) (*Profile, error)

New generates a profile-graph from the profile.

func (*Profile) PrintWeightedCallGraphDOT

func (p *Profile) PrintWeightedCallGraphDOT(edgeThreshold float64)

PrintWeightedCallGraphDOT prints IRGraph in DOT format.

Directories

Path Synopsis
internal
graph
Package graph represents a pprof profile as a directed graph.
Package graph represents a pprof profile as a directed graph.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL