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 // AliasName is the 'memtier' alias name for this policy. AliasName = "memtier" // AliasPath is the 'memtier' alias configuration path for this policy. AliasPath = "policy." + AliasName // 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 CreateMemtierPolicy ¶ added in v0.5.0
func CreateMemtierPolicy(opts *policyapi.BackendOptions) policyapi.Backend
CreateMemtierPolicy creates a new policy instance, aliased as 'memtier'.
func CreateTopologyAwarePolicy ¶
func CreateTopologyAwarePolicy(opts *policyapi.BackendOptions) policyapi.Backend
CreateTopologyAwarePolicy creates a new policy instance.
Types ¶
type ColdStartPreference ¶ added in v0.5.0
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 ¶ added in v0.5.0
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 ¶ added in v0.5.0
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 ¶ added in v0.5.0
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 ¶ added in v0.5.0
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.