Documentation
¶
Index ¶
Constants ¶
const ( // PolicyName is the name used to activate this policy implementation. PolicyName = "topology-aware" // PolicyDescription is a short description of this policy. PolicyDescription = "A policy for prototyping memory tiering." // PolicyPath is the path of this policy in the configuration hierarchy. PolicyPath = "policy." + PolicyName // ColdStartDone is the event generated for the end of a container cold start period. ColdStartDone = "cold-start-done" )
const (
IndentDepth = 4
)
indent produces an indentation string for the given level.
const (
// OverfitPenalty is the per layer penalty for overfitting in the node tree.
OverfitPenalty = 0.9
)
Variables ¶
This section is empty.
Functions ¶
func CreateTopologyAwarePolicy ¶
func CreateTopologyAwarePolicy(opts *policyapi.BackendOptions) policyapi.Backend
CreateTopologyAwarePolicy creates a new policy instance.
Types ¶
type ColdStartPreference ¶
ColdStartPreference lists the various ways the container can be configured to trigger cold start. Currently, only timer is supported. If the "duration" is set to a duration greater than 0, cold start is enabled and the DRAM controller is added to the container after the duration has passed.
type Grant ¶
type Grant interface {
// SetCPUPortion sets the fraction CPU portion for the grant.
SetCPUPortion(fraction int)
// SetMemoryAllocation sets the memory allocation for the grant.
SetMemoryAllocation(memoryType, memoryMap, time.Duration)
// Clone creates a copy of this grant.
Clone() Grant
// RefetchNodes updates the stored cpu and memory nodes of this grant by name.
RefetchNodes() error
// GetContainer returns the container CPU capacity is granted to.
GetContainer() cache.Container
// GetCPUNode returns the node that granted CPU capacity to the container.
GetCPUNode() Node
// GetMemoryNode returns the node which granted memory capacity to
// the container.
GetMemoryNode() Node
// CPUType returns the type of granted CPUs
CPUType() cpuClass
// CPUPortion returns granted milli-CPUs of non-full CPUs of CPUType().
// CPUPortion() == ReservedPortion() + SharedPortion().
CPUPortion() int
// ExclusiveCPUs returns the exclusively granted non-isolated cpuset.
ExclusiveCPUs() cpuset.CPUSet
// ReservedCPUs returns the reserved granted cpuset.
ReservedCPUs() cpuset.CPUSet
// ReservedPortion() returns the amount of CPUs in milli-CPU granted.
ReservedPortion() int
SharedCPUs() cpuset.CPUSet
SharedPortion() int
// IsolatedCpus returns the exclusively granted isolated cpuset.
IsolatedCPUs() cpuset.CPUSet
// MemoryType returns the type(s) of granted memory.
MemoryType() memoryType
// SetMemoryNode updates the grant memory controllers.
SetMemoryNode(Node)
// Memset returns the granted memory controllers as a string.
Memset() idset.IDSet
// ExpandMemset() makes the memory controller set larger as the grant
// is moved up in the node hierarchy.
ExpandMemset() (bool, error)
// MemLimit returns the amount of memory that the container is
// allowed to use.
MemLimit() memoryMap
// String returns a printable representation of this grant.
String() string
// Release releases the grant from all the Supplys it uses.
Release()
// AccountAllocateCPU accounts for (removes) allocated exclusive capacity for this grant.
AccountAllocateCPU()
// AccountReleaseCPU accounts for (reinserts) released exclusive capacity for this grant.
AccountReleaseCPU()
// UpdateExtraMemoryReservation() updates the reservations in the subtree
// of nodes under the node from which the memory was granted.
UpdateExtraMemoryReservation()
// RestoreMemset restores the granted memory set to node maximum
// and reapplies the grant.
RestoreMemset()
// ColdStart returns the cold start timeout.
ColdStart() time.Duration
// AddTimer adds a cold start timer.
AddTimer(*time.Timer)
// StopTimer stops a cold start timer.
StopTimer()
// ClearTimer clears the cold start timer pointer.
ClearTimer()
}
Grant represents CPU and memory capacity allocated to a container from a node.
type Node ¶
type Node interface {
// IsNil tests if this node is nil.
IsNil() bool
// Name returns the name of this node.
Name() string
// Kind returns the type of this node.
Kind() NodeKind
// NodeID returns the (enumerated) node id of this node.
NodeID() int
// Parent returns the parent node of this node.
Parent() Node
// Children returns the child nodes of this node.
Children() []Node
// LinkParent sets the given node as the parent node, and appends this node as a its child.
LinkParent(Node)
// AddChildren appends the nodes to the children, *WITHOUT* updating their parents.
AddChildren([]Node)
// IsSameNode returns true if the given node is the same as this one.
IsSameNode(Node) bool
// IsRootNode returns true if this node has no parent.
IsRootNode() bool
// IsLeafNode returns true if this node has no children.
IsLeafNode() bool
// Get the distance of this node from the root node.
RootDistance() int
// Get the height of this node (inverse of depth: tree depth - node depth).
NodeHeight() int
// System returns the policy sysfs instance.
System() system.System
// Policy returns the policy back pointer.
Policy() *policy
// DiscoverSupply
DiscoverSupply(assignedNUMANodes []idset.ID) Supply
// GetSupply returns the full CPU at this node.
GetSupply() Supply
// FreeSupply returns the available CPU supply of this node.
FreeSupply() Supply
// GrantedReservedCPU returns the amount of granted reserved CPU of this node and its children.
GrantedReservedCPU() int
GrantedSharedCPU() int
// GetMemset
GetMemset(mtype memoryType) idset.IDSet
// AssignNUMANodes assigns the given set of NUMA nodes to this one.
AssignNUMANodes(ids []idset.ID)
// DepthFirst traverse the tree@node calling the function at each node.
DepthFirst(func(Node) error) error
// BreadthFirst traverse the tree@node calling the function at each node.
BreadthFirst(func(Node) error) error
// Dump state of the node.
Dump(string, ...int)
GetMemoryType() memoryType
HasMemoryType(memoryType) bool
GetPhysicalNodeIDs() []idset.ID
GetScore(Request) Score
HintScore(topology.Hint) float64
// contains filtered or unexported methods
}
Node is the abstract interface our partition tree nodes implement.
type NodeKind ¶
type NodeKind string
NodeKind represents a unique node type.
const ( // NilNode is the type of a nil node. NilNode NodeKind = "" // UnknownNode is the type of unknown node type. UnknownNode NodeKind = "unknown" // SocketNode represents a physical CPU package/socket in the system. SocketNode NodeKind = "socket" // DieNode represents a die within a physical CPU package/socket in the system. DieNode NodeKind = "die" // NumaNode represents a NUMA node in the system. NumaNode NodeKind = "numa node" // VirtualNode represents a virtual node, currently the root multi-socket setups. VirtualNode NodeKind = "virtual node" )
type Request ¶
type Request interface {
// GetContainer returns the container requesting CPU capacity.
GetContainer() cache.Container
// String returns a printable representation of this request.
String() string
// CPUType returns the type of requested CPU.
CPUType() cpuClass
// SetCPUType sets the type of requested CPU.
SetCPUType(cpuType cpuClass)
// FullCPUs return the number of full CPUs requested.
FullCPUs() int
// CPUFraction returns the amount of fractional milli-CPU requested.
CPUFraction() int
// Isolate returns whether isolated CPUs are preferred for this request.
Isolate() bool
// MemoryType returns the type(s) of requested memory.
MemoryType() memoryType
// MemAmountToAllocate retuns how much memory we need to reserve for a request.
MemAmountToAllocate() uint64
// ColdStart returns the cold start timeout.
ColdStart() time.Duration
}
Request represents CPU and memory resources requested by a container.
type Score ¶
type Score interface {
// Calculate the actual score from the collected parameters.
Eval() float64
// Supply returns the supply associated with this score.
Supply() Supply
// Request returns the request associated with this score.
Request() Request
IsolatedCapacity() int
ReservedCapacity() int
Colocated() int
HintScores() map[string]float64
String() string
}
Score represents how well a supply can satisfy a request.
type Supply ¶
type Supply interface {
// GetNode returns the node supplying this capacity.
GetNode() Node
// Clone creates a copy of this supply.
Clone() Supply
// IsolatedCPUs returns the isolated cpuset in this supply.
IsolatedCPUs() cpuset.CPUSet
// ReservedCPUs returns the reserved cpuset in this supply.
ReservedCPUs() cpuset.CPUSet
// SharableCPUs returns the sharable cpuset in this supply.
SharableCPUs() cpuset.CPUSet
// GrantedReserved returns the locally granted reserved CPU capacity in this supply.
GrantedReserved() int
GrantedShared() int
// GrantedMemory returns the locally granted memory capacity in this supply.
GrantedMemory(memoryType) uint64
// Cumulate cumulates the given supply into this one.
Cumulate(Supply)
// AssignMemory adds extra memory to this supply (for extra NUMA nodes assigned to a pool).
AssignMemory(mem memoryMap)
// AccountAllocateCPU accounts for (removes) allocated exclusive capacity from the supply.
AccountAllocateCPU(Grant)
// AccountReleaseCPU accounts for (reinserts) released exclusive capacity into the supply.
AccountReleaseCPU(Grant)
// GetScore calculates how well this supply fits/fulfills the given request.
GetScore(Request) Score
AllocatableSharedCPU(...bool) int
// Allocate allocates CPU capacity from this supply and returns it as a grant.
Allocate(Request) (Grant, error)
// ReleaseCPU releases a previously allocated CPU grant from this supply.
ReleaseCPU(Grant)
// ReleaseMemory releases a previously allocated memory grant from this supply.
ReleaseMemory(Grant)
// ReallocateMemory updates the Grant to allocate memory from this supply.
ReallocateMemory(Grant) error
// ExtraMemoryReservation returns the memory reservation.
ExtraMemoryReservation(memoryType) uint64
// SetExtraMemroyReservation sets the extra memory reservation based on the granted memory.
SetExtraMemoryReservation(Grant)
// ReleaseExtraMemoryReservation removes the extra memory reservations based on the granted memory.
ReleaseExtraMemoryReservation(Grant)
// MemoryLimit returns the amount of various memory types belonging to this grant.
MemoryLimit() memoryMap
// Reserve accounts for CPU grants after reloading cached allocations.
Reserve(Grant) error
// ReserveMemory accounts for memory grants after reloading cached allocations.
ReserveMemory(Grant) error
// DumpCapacity returns a printable representation of the supply's resource capacity.
DumpCapacity() string
// DumpAllocatable returns a printable representation of the supply's alloctable resources.
DumpAllocatable() string
// DumpMemoryState dumps the state of the available and allocated memory.
DumpMemoryState(string)
}
Supply represents avaialbe CPU and memory capacity of a node.