Documentation
¶
Index ¶
Constants ¶
const ( FullPCPUsOnlyOption string = "full-pcpus-only" DistributeCPUsAcrossNUMAOption string = "distribute-cpus-across-numa" AlignBySocketOption string = "align-by-socket" )
Names of the options, as part of the user interface.
const ( // PolicyStatic is the name of the static policy. // Should options be given, these will be ignored and backward (up to 1.21 included) // compatible behaviour will be enforced PolicyStatic policyName = "static" // ErrorSMTAlignment represents the type of an SMTAlignmentError ErrorSMTAlignment = "SMTAlignmentError" )
const PolicyNone policyName = "none"
PolicyNone name of none policy
Variables ¶
This section is empty.
Functions ¶
func CheckPolicyOptionAvailable ¶
CheckPolicyOptionAvailable verifies if the given option can be used depending on the Feature Gate Settings. returns nil on success, or an error describing the failure on error.
func ValidateStaticPolicyOptions ¶
func ValidateStaticPolicyOptions(opts StaticPolicyOptions, topology *topology.CPUTopology, topologyManager topologymanager.Store) error
ValidateStaticPolicyOptions ensures that the requested policy options are compatible with the machine on which the CPUManager is running.
Types ¶
type ActivePodsFunc ¶
ActivePodsFunc is a function that returns a list of pods to reconcile.
type LoopControl ¶
type LoopControl int
LoopControl controls the behavior of the cpu accumulator loop logic
const ( Continue LoopControl = iota Break )
Possible loop control outcomes
type Manager ¶
type Manager interface { // Start is called during Kubelet initialization. Start(activePods ActivePodsFunc, sourcesReady config.SourcesReady, podStatusProvider status.PodStatusProvider, containerRuntime runtimeService, initialContainers containermap.ContainerMap) error // Called to trigger the allocation of CPUs to a container. This must be // called at some point prior to the AddContainer() call for a container, // e.g. at pod admission time. Allocate(pod *v1.Pod, container *v1.Container) error // AddContainer adds the mapping between container ID to pod UID and the container name // The mapping used to remove the CPU allocation during the container removal AddContainer(p *v1.Pod, c *v1.Container, containerID string) // RemoveContainer is called after Kubelet decides to kill or delete a // container. After this call, the CPU manager stops trying to reconcile // that container and any CPUs dedicated to the container are freed. RemoveContainer(containerID string) error // State returns a read-only interface to the internal CPU manager state. State() state.Reader // GetTopologyHints implements the topologymanager.HintProvider Interface // and is consulted to achieve NUMA aware resource alignment among this // and other resource controllers. GetTopologyHints(*v1.Pod, *v1.Container) map[string][]topologymanager.TopologyHint // GetExclusiveCPUs implements the podresources.CPUsProvider interface to provide // exclusively allocated cpus for the container GetExclusiveCPUs(podUID, containerName string) cpuset.CPUSet // GetPodTopologyHints implements the topologymanager.HintProvider Interface // and is consulted to achieve NUMA aware resource alignment per Pod // among this and other resource controllers. GetPodTopologyHints(pod *v1.Pod) map[string][]topologymanager.TopologyHint // GetAllocatableCPUs returns the total set of CPUs available for allocation. GetAllocatableCPUs() cpuset.CPUSet // GetCPUAffinity returns cpuset which includes cpus from shared pools // as well as exclusively allocated cpus GetCPUAffinity(podUID, containerName string) cpuset.CPUSet }
Manager interface provides methods for Kubelet to manage pod cpus.
func NewManager ¶
func NewManager(cpuPolicyName string, cpuPolicyOptions map[string]string, reconcilePeriod time.Duration, machineInfo *cadvisorapi.MachineInfo, specificCPUs cpuset.CPUSet, nodeAllocatableReservation v1.ResourceList, stateFileDirectory string, affinity topologymanager.Store) (Manager, error)
NewManager creates new cpu manager based on provided policy
type Policy ¶
type Policy interface { Name() string Start(s state.State) error // Allocate call is idempotent Allocate(s state.State, pod *v1.Pod, container *v1.Container) error // RemoveContainer call is idempotent RemoveContainer(s state.State, podUID string, containerName string) error // GetTopologyHints implements the topologymanager.HintProvider Interface // and is consulted to achieve NUMA aware resource alignment among this // and other resource controllers. GetTopologyHints(s state.State, pod *v1.Pod, container *v1.Container) map[string][]topologymanager.TopologyHint // GetPodTopologyHints implements the topologymanager.HintProvider Interface // and is consulted to achieve NUMA aware resource alignment per Pod // among this and other resource controllers. GetPodTopologyHints(s state.State, pod *v1.Pod) map[string][]topologymanager.TopologyHint // GetAllocatableCPUs returns the total set of CPUs available for allocation. GetAllocatableCPUs(m state.State) cpuset.CPUSet }
Policy implements logic for pod container to CPU assignment.
func NewNonePolicy ¶
NewNonePolicy returns a cpuset manager policy that does nothing
func NewStaticPolicy ¶
func NewStaticPolicy(topology *topology.CPUTopology, numReservedCPUs int, reservedCPUs cpuset.CPUSet, affinity topologymanager.Store, cpuPolicyOptions map[string]string) (Policy, error)
NewStaticPolicy returns a CPU manager policy that does not change CPU assignments for exclusively pinned guaranteed containers after the main container process starts.
type SMTAlignmentError ¶
SMTAlignmentError represents an error due to SMT alignment
func (SMTAlignmentError) Error ¶
func (e SMTAlignmentError) Error() string
func (SMTAlignmentError) Type ¶
func (e SMTAlignmentError) Type() string
Type returns human-readable type of this error. Used in the admission control to populate Admission Failure reason.
type StaticPolicyOptions ¶
type StaticPolicyOptions struct { // flag to enable extra allocation restrictions to avoid // different containers to possibly end up on the same core. // we consider "core" and "physical CPU" synonim here, leaning // towards the terminoloy k8s hints. We acknowledge this is confusing. // // looking at https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/, // any possible naming scheme will lead to ambiguity to some extent. // We picked "pcpu" because it the established docs hints at vCPU already. FullPhysicalCPUsOnly bool // Flag to evenly distribute CPUs across NUMA nodes in cases where more // than one NUMA node is required to satisfy the allocation. DistributeCPUsAcrossNUMA bool // Flag to ensure CPUs are considered aligned at socket boundary rather than // NUMA boundary AlignBySocket bool }
StaticPolicyOptions holds the parsed value of the policy options, ready to be consumed internally.
func NewStaticPolicyOptions ¶
func NewStaticPolicyOptions(policyOptions map[string]string) (StaticPolicyOptions, error)
NewStaticPolicyOptions creates a StaticPolicyOptions struct from the user configuration.