package topologymanager
import "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager"
Index ¶
- Constants
- func CheckPolicyOptionAvailable(option string) error
- func IsAlignmentGuaranteed(p Policy) bool
- type HintMerger
- func NewHintMerger(numaInfo *NUMAInfo, hints [][]TopologyHint, policyName string, opts PolicyOptions) HintMerger
- func (m HintMerger) Merge() TopologyHint
- type HintProvider
- type Manager
- func NewFakeManager() Manager
- func NewFakeManagerWithHint(hint *TopologyHint) Manager
- func NewFakeManagerWithPolicy(policy Policy) Manager
- func NewManager(topology []cadvisorapi.Node, topologyPolicyName string, topologyScopeName string, topologyPolicyOptions map[string]string) (Manager, error)
- type NUMADistances
- type NUMAInfo
- func NewNUMAInfo(topology []cadvisorapi.Node, opts PolicyOptions) (*NUMAInfo, error)
- func (n *NUMAInfo) Closest(m1 bitmask.BitMask, m2 bitmask.BitMask) bitmask.BitMask
- func (n NUMAInfo) DefaultAffinityMask() bitmask.BitMask
- func (n *NUMAInfo) Narrowest(m1 bitmask.BitMask, m2 bitmask.BitMask) bitmask.BitMask
- type Policy
- func NewBestEffortPolicy(numaInfo *NUMAInfo, opts PolicyOptions) Policy
- func NewNonePolicy() Policy
- func NewRestrictedPolicy(numaInfo *NUMAInfo, opts PolicyOptions) Policy
- func NewSingleNumaNodePolicy(numaInfo *NUMAInfo, opts PolicyOptions) Policy
- type PolicyOptions
- type Scope
- func NewContainerScope(policy Policy) Scope
- func NewNoneScope() Scope
- func NewPodScope(policy Policy) Scope
- type Store
- type TopologyAffinityError
- type TopologyHint
Constants ¶
const ( PreferClosestNUMANodes string = "prefer-closest-numa-nodes" MaxAllowableNUMANodes string = "max-allowable-numa-nodes" )
const ( // ErrorTopologyAffinity represents the type for a TopologyAffinityError ErrorTopologyAffinity = "TopologyAffinityError" )
const PolicyBestEffort string = "best-effort"
PolicyBestEffort policy name.
const PolicyNone string = "none"
PolicyNone policy name.
const PolicyRestricted string = "restricted"
PolicyRestricted policy name.
const PolicySingleNumaNode string = "single-numa-node"
PolicySingleNumaNode policy name.
Functions ¶
func CheckPolicyOptionAvailable ¶
func IsAlignmentGuaranteed ¶
IsAlignmentGuaranteed return true if the given policy guarantees that either the compute resources will be allocated within a NUMA boundary, or the allocation will fail at all.
Types ¶
type HintMerger ¶
type HintMerger struct { NUMAInfo *NUMAInfo Hints [][]TopologyHint // Set bestNonPreferredAffinityCount to help decide which affinity mask is // preferred amongst all non-preferred hints. We calculate this value as // the maximum of the minimum affinity counts supplied for any given hint // provider. In other words, prefer a hint that has an affinity mask that // includes all of the NUMA nodes from the provider that requires the most // NUMA nodes to satisfy its allocation. BestNonPreferredAffinityCount int CompareNUMAAffinityMasks func(candidate *TopologyHint, current *TopologyHint) (best *TopologyHint) }
func NewHintMerger ¶
func NewHintMerger(numaInfo *NUMAInfo, hints [][]TopologyHint, policyName string, opts PolicyOptions) HintMerger
func (HintMerger) Merge ¶
func (m HintMerger) Merge() TopologyHint
type HintProvider ¶
type HintProvider interface { // GetTopologyHints returns a map of resource names to a list of possible // concrete resource allocations in terms of NUMA locality hints. Each hint // is optionally marked "preferred" and indicates the set of NUMA nodes // involved in the hypothetical allocation. The topology manager calls // this function for each hint provider, and merges the hints to produce // a consensus "best" hint. The hint providers may subsequently query the // topology manager to influence actual resource assignment. GetTopologyHints(pod *v1.Pod, container *v1.Container) map[string][]TopologyHint // GetPodTopologyHints returns a map of resource names to a list of possible // concrete resource allocations per Pod in terms of NUMA locality hints. GetPodTopologyHints(pod *v1.Pod) map[string][]TopologyHint // Allocate triggers resource allocation to occur on the HintProvider after // all hints have been gathered and the aggregated Hint is available via a // call to Store.GetAffinity(). Allocate(pod *v1.Pod, container *v1.Container) error }
HintProvider is an interface for components that want to collaborate to achieve globally optimal concrete resource alignment with respect to NUMA locality.
type Manager ¶
type Manager interface { // PodAdmitHandler is implemented by Manager lifecycle.PodAdmitHandler // AddHintProvider adds a hint provider to manager to indicate the hint provider // wants to be consulted with when making topology hints AddHintProvider(HintProvider) // AddContainer adds pod to Manager for tracking AddContainer(pod *v1.Pod, container *v1.Container, containerID string) // RemoveContainer removes pod from Manager tracking RemoveContainer(containerID string) error // Store is the interface for storing pod topology hints Store }
Manager interface provides methods for Kubelet to manage pod topology hints
func NewFakeManager ¶
func NewFakeManager() Manager
NewFakeManager returns an instance of FakeManager
func NewFakeManagerWithHint ¶
func NewFakeManagerWithHint(hint *TopologyHint) Manager
NewFakeManagerWithHint returns an instance of fake topology manager with specified topology hints
func NewFakeManagerWithPolicy ¶
NewFakeManagerWithPolicy returns an instance of fake topology manager with specified policy
func NewManager ¶
func NewManager(topology []cadvisorapi.Node, topologyPolicyName string, topologyScopeName string, topologyPolicyOptions map[string]string) (Manager, error)
NewManager creates a new TopologyManager based on provided policy and scope
type NUMADistances ¶
func (NUMADistances) CalculateAverageFor ¶
func (d NUMADistances) CalculateAverageFor(bm bitmask.BitMask) float64
type NUMAInfo ¶
type NUMAInfo struct { Nodes []int NUMADistances NUMADistances }
func NewNUMAInfo ¶
func NewNUMAInfo(topology []cadvisorapi.Node, opts PolicyOptions) (*NUMAInfo, error)
func (*NUMAInfo) Closest ¶
func (NUMAInfo) DefaultAffinityMask ¶
func (*NUMAInfo) Narrowest ¶
type Policy ¶
type Policy interface { // Returns Policy Name Name() string // Returns a merged TopologyHint based on input from hint providers // and a Pod Admit Handler Response based on hints and policy type Merge(providersHints []map[string][]TopologyHint) (TopologyHint, bool) }
Policy interface for Topology Manager Pod Admit Result
func NewBestEffortPolicy ¶
func NewBestEffortPolicy(numaInfo *NUMAInfo, opts PolicyOptions) Policy
NewBestEffortPolicy returns best-effort policy.
func NewNonePolicy ¶
func NewNonePolicy() Policy
NewNonePolicy returns none policy.
func NewRestrictedPolicy ¶
func NewRestrictedPolicy(numaInfo *NUMAInfo, opts PolicyOptions) Policy
NewRestrictedPolicy returns restricted policy.
func NewSingleNumaNodePolicy ¶
func NewSingleNumaNodePolicy(numaInfo *NUMAInfo, opts PolicyOptions) Policy
NewSingleNumaNodePolicy returns single-numa-node policy.
type PolicyOptions ¶
func NewPolicyOptions ¶
func NewPolicyOptions(policyOptions map[string]string) (PolicyOptions, error)
type Scope ¶
type Scope interface { Name() string GetPolicy() Policy Admit(pod *v1.Pod) lifecycle.PodAdmitResult // AddHintProvider adds a hint provider to manager to indicate the hint provider // wants to be consoluted with when making topology hints AddHintProvider(h HintProvider) // AddContainer adds pod to Manager for tracking AddContainer(pod *v1.Pod, container *v1.Container, containerID string) // RemoveContainer removes pod from Manager tracking RemoveContainer(containerID string) error // Store is the interface for storing pod topology hints Store }
Scope interface for Topology Manager
func NewContainerScope ¶
NewContainerScope returns a container scope.
func NewNoneScope ¶
func NewNoneScope() Scope
NewNoneScope returns a none scope.
func NewPodScope ¶
NewPodScope returns a pod scope.
type Store ¶
type Store interface { GetAffinity(podUID string, containerName string) TopologyHint GetPolicy() Policy }
Store interface is to allow Hint Providers to retrieve pod affinity
type TopologyAffinityError ¶
type TopologyAffinityError struct{}
TopologyAffinityError represents an resource alignment error
func (TopologyAffinityError) Error ¶
func (e TopologyAffinityError) Error() string
func (TopologyAffinityError) Type ¶
func (e TopologyAffinityError) Type() string
type TopologyHint ¶
type TopologyHint struct { NUMANodeAffinity bitmask.BitMask // Preferred is set to true when the NUMANodeAffinity encodes a preferred // allocation for the Container. It is set to false otherwise. Preferred bool }
TopologyHint is a struct containing the NUMANodeAffinity for a Container
func (*TopologyHint) IsEqual ¶
func (th *TopologyHint) IsEqual(topologyHint TopologyHint) bool
IsEqual checks if TopologyHint are equal
func (*TopologyHint) LessThan ¶
func (th *TopologyHint) LessThan(other TopologyHint) bool
LessThan checks if TopologyHint `a` is less than TopologyHint `b` this means that either `a` is a preferred hint and `b` is not or `a` NUMANodeAffinity attribute is narrower than `b` NUMANodeAffinity attribute.
Source Files ¶
fake_topology_manager.go numa_info.go policy.go policy_best_effort.go policy_none.go policy_options.go policy_restricted.go policy_single_numa_node.go scope.go scope_container.go scope_none.go scope_pod.go topology_manager.go
Directories ¶
Path | Synopsis |
---|---|
pkg/kubelet/cm/topologymanager/bitmask |
- Version
- v1.33.0 (latest)
- Published
- Apr 23, 2025
- Platform
- linux/amd64
- Imports
- 15 packages
- Last checked
- 3 hours ago –
Tools for package owners.