topologymanager

package
v1.28.0-alpha.3...-059ce4e Latest Latest
Warning

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

Go to latest
Published: Jul 9, 2023 License: Apache-2.0 Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const (

	// ErrorTopologyAffinity represents the type for a TopologyAffinityError
	ErrorTopologyAffinity = "TopologyAffinityError"
)
View Source
const PolicyBestEffort string = "best-effort"

PolicyBestEffort policy name.

View Source
const PolicyNone string = "none"

PolicyNone policy name.

View Source
const PolicyRestricted string = "restricted"

PolicyRestricted policy name.

View Source
const PolicySingleNumaNode string = "single-numa-node"

PolicySingleNumaNode policy name.

View Source
const (
	PreferClosestNUMANodes string = "prefer-closest-numa-nodes"
)

Variables

This section is empty.

Functions

func CheckPolicyOptionAvailable

func CheckPolicyOptionAvailable(option string) error

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

func NewFakeManagerWithPolicy(policy Policy) Manager

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

type NUMADistances map[int][]uint64

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 (n *NUMAInfo) Closest(m1 bitmask.BitMask, m2 bitmask.BitMask) bitmask.BitMask

func (NUMAInfo) DefaultAffinityMask

func (n NUMAInfo) DefaultAffinityMask() bitmask.BitMask

func (*NUMAInfo) Narrowest

func (n *NUMAInfo) Narrowest(m1 bitmask.BitMask, m2 bitmask.BitMask) bitmask.BitMask

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

type PolicyOptions struct {
	PreferClosestNUMA bool
}

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

func NewContainerScope(policy Policy) Scope

NewContainerScope returns a container scope.

func NewPodScope

func NewPodScope(policy Policy) Scope

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.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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