balloons

package
v0.9.0 Latest Latest
Warning

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

Go to latest
Published: Jan 11, 2024 License: Apache-2.0 Imports: 25 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// PolicyName is the name used to activate this policy.
	PolicyName = "balloons"
	// PolicyDescription is a short description of this policy.
	PolicyDescription = "Flexible pools with per-pool CPU parameters"
	// PolicyPath is the path of this policy in the configuration hierarchy.
	PolicyPath = "policy." + PolicyName

	// NoLimit value denotes no limit being set.
	NoLimit = 0
)

Variables

View Source
var WalkSkipChildren error = errors.New("skip children")

WalkSkipChildren error returned from a DepthFirstWalk handler prevents walking deeper in the tree. The caller of the DepthFirstWalk will get no error.

View Source
var WalkStop error = errors.New("stop")

WalkStop error returned from a DepthFirstWalk handler stops the walk altogether. The caller of the DepthFirstWalk will get the WalkStop error.

Functions

func CreateBalloonsPolicy

func CreateBalloonsPolicy(policyOptions *policy.BackendOptions) policy.Backend

CreateBalloonsPolicy creates a new policy instance.

func NewCpuTree added in v0.8.0

func NewCpuTree(name string) *cpuTreeNode

NewCpuTree returns a named CPU tree node.

func NewCpuTreeFromSystem added in v0.8.0

func NewCpuTreeFromSystem() (*cpuTreeNode, error)

NewCpuTreeFromSystem returns the root node of the topology tree constructed from the underlying system.

Types

type Balloon

type Balloon struct {
	// Def is the definition from which this balloon instance is created.
	Def *BalloonDef
	// Instance is the index of this balloon instance, starting from
	// zero for every balloon definition.
	Instance int
	// Cpus is the set of CPUs exclusive to this balloon instance only.
	Cpus cpuset.CPUSet
	// Mems is the set of memory nodes with minimal access delay
	// from CPUs.
	Mems idset.IDSet
	// SharedIdleCpus is the set of idle CPUs that workloads in a
	// balloon are allowed to use with workloads in other balloons
	// that shareIdleCpus.
	SharedIdleCpus cpuset.CPUSet
	// PodIDs maps pod ID to list of container IDs.
	// - len(PodIDs) is the number of pods in the balloon.
	// - len(PodIDs[podID]) is the number of containers of podID
	//   currently assigned to the balloon.
	PodIDs map[string][]string
	// contains filtered or unexported fields
}

Balloon contains attributes of a balloon instance

func (Balloon) AvailMilliCpus

func (bln Balloon) AvailMilliCpus() int

func (Balloon) ContainerCount

func (bln Balloon) ContainerCount() int

ContainerCount returns the number of containers in a balloon.

func (Balloon) ContainerIDs

func (bln Balloon) ContainerIDs() []string

ContainerIDs returns IDs of containers assigned in a balloon. (Using cache.Container.GetCacheID()'s)

func (Balloon) MaxAvailMilliCpus

func (bln Balloon) MaxAvailMilliCpus(freeCpus cpuset.CPUSet) int

func (Balloon) PrettyName

func (bln Balloon) PrettyName() string

PrettyName returns a unique name for a balloon.

func (Balloon) String

func (bln Balloon) String() string

String is a stringer for a balloon.

type BalloonDef

type BalloonDef struct {
	// Name of the balloon definition.
	Name string `json:"Name"`
	// Namespaces control which namespaces are assigned into
	// balloon instances from this definition. This is used by
	// namespace assign methods.
	Namespaces []string `json:"Namespaces",omitempty`
	// MaxCpus specifies the maximum number of CPUs exclusively
	// usable by containers in a balloon. Balloon size will not be
	// inflated larger than MaxCpus.
	MaxCpus int `json:"MaxCPUs"`
	// MinCpus specifies the minimum number of CPUs exclusively
	// usable by containers in a balloon. When new balloon is created,
	// this will be the number of CPUs reserved for it even if a container
	// would request less.
	MinCpus int `json:"MinCPUs"`
	// AllocatorPriority (0: High, 1: Normal, 2: Low, 3: None)
	// This parameter is passed to CPU allocator when creating or
	// resizing a balloon. At init, balloons with highest priority
	// CPUs are allocated first.
	AllocatorPriority cpuallocator.CPUPriority `json:"AllocatorPriority"`
	// PreferSpreadOnPhysicalCores is the balloon type specific
	// parameter of the policy level parameter with the same name.
	PreferSpreadOnPhysicalCores *bool `json:"PreferSpreadOnPhysicalCores,omitempty"`
	// AllocatorTopologyBalancing is the balloon type specific
	// parameter of the policy level parameter with the same name.
	AllocatorTopologyBalancing *bool `json:"AllocatorTopologyBalancing,omitempty"`
	// CpuClass controls how CPUs of a balloon are (re)configured
	// whenever a balloon is created, inflated or deflated.
	CpuClass string `json:"CpuClass"`
	// MinBalloons is the number of balloon instances that always
	// exist even if they would become empty. At init this number
	// of instances will be created before assigning any
	// containers.
	MinBalloons int `json:"MinBalloons"`
	// MaxBalloons is the maximum number of balloon instances that
	// is allowed to co-exist. If reached, new balloons cannot be
	// created anymore.
	MaxBalloons int `json:"MaxBalloons"`
	// PreferSpreadingPods: containers of the same pod may be
	// placed on separate balloons. The default is false: prefer
	// placing containers of a pod to the same balloon(s).
	PreferSpreadingPods bool
	// PreferPerNamespaceBalloon: if true, containers in different
	// namespaces are preferrably placed in separate balloons,
	// even if the balloon type is the same for all of them. On
	// the other hand, containers in the same namespace will be
	// placed in the same balloon instances. The default is false:
	// namespaces have no effect on placement.
	PreferPerNamespaceBalloon bool
	// PreferNewBalloons: prefer creating new balloons over adding
	// containers to existing balloons. The default is false:
	// prefer using filling free capacity and possibly inflating
	// existing balloons before creating new ones.
	PreferNewBalloons bool
	// ShareIdleCpusInSame <topology-level>: if there are idle
	// CPUs, that is CPUs not in any balloon, in the same
	// <topology-level> as any CPU in the balloon, then allow
	// workloads to run on those (shared) CPUs in addition to the
	// (dedicated) CPUs of the balloon.
	ShareIdleCpusInSame CPUTopologyLevel `json:"ShareIdleCPUsInSame,omitempty"`
}

BalloonDef contains a balloon definition.

func (*BalloonDef) DeepCopy

func (bdef *BalloonDef) DeepCopy() *BalloonDef

DeepCopy creates a deep copy of a BalloonDef

func (BalloonDef) String

func (bdef BalloonDef) String() string

String stringifies a BalloonDef

type BalloonMetrics

type BalloonMetrics struct {
	// Balloon type metrics
	DefName  string
	CpuClass string
	MinCpus  int
	MaxCpus  int
	// Balloon instance metrics
	PrettyName            string
	Cpus                  cpuset.CPUSet
	CpusCount             int
	Numas                 []string
	NumasCount            int
	Dies                  []string
	DiesCount             int
	Packages              []string
	PackagesCount         int
	SharedIdleCpus        cpuset.CPUSet
	SharedIdleCpusCount   int
	CpusAllowed           cpuset.CPUSet
	CpusAllowedCount      int
	Mems                  string
	ContainerNames        string
	ContainerReqMilliCpus int
}

BalloonMetrics define metrics of a balloon instance.

type BalloonsOptions

type BalloonsOptions balloonsOptionsWrapped

func (*BalloonsOptions) DeepCopy

func (bo *BalloonsOptions) DeepCopy() *BalloonsOptions

DeepCopy creates a deep copy of a BalloonsOptions

func (*BalloonsOptions) UnmarshalJSON

func (bo *BalloonsOptions) UnmarshalJSON(data []byte) error

UnmarshalJSON makes sure all options from previous unmarshals get cleared before unmarshaling new data to the same address.

type CPUTopologyLevel added in v0.8.0

type CPUTopologyLevel int
const (
	CPUTopologyLevelUndefined CPUTopologyLevel = iota
	CPUTopologyLevelSystem
	CPUTopologyLevelPackage
	CPUTopologyLevelDie
	CPUTopologyLevelNuma
	CPUTopologyLevelCore
	CPUTopologyLevelThread
	CPUTopologyLevelCount
)

func (CPUTopologyLevel) MarshalJSON added in v0.8.0

func (ctl CPUTopologyLevel) MarshalJSON() ([]byte, error)

MarshalJSON()

func (CPUTopologyLevel) String added in v0.8.0

func (ctl CPUTopologyLevel) String() string

Strings returns topology level as a string

func (*CPUTopologyLevel) UnmarshalJSON added in v0.8.0

func (ctl *CPUTopologyLevel) UnmarshalJSON(data []byte) error

UnmarshalJSON unmarshals a JSON string to CPUTopologyLevel

type FillMethod

type FillMethod int

FillMethod specifies the order in which balloon instances should be filled.

const (
	FillUnspecified FillMethod = iota
	// FillBalanced: put a container into the balloon with most
	// free CPU without changing the size of the balloon.
	FillBalanced
	// FillBalancedInflate: put a container into the balloon with
	// most free CPU when the balloon is inflated to the maximum
	// size.
	FillBalancedInflate
	// FillPacked: put a container into a balloon so that it
	// minimizes the amount of currently unused CPUs in the
	// balloon.
	FillPacked
	// FillPackedInflate: put a container into a balloon so that
	// it minimizes the amount of unused CPUs if the balloon is
	// inflated to the maximum size.
	FillPackedInflate
	// FillSameNamespace: put a container into a balloon that already
	// includes another container from the same namespace
	FillSameNamespace
	// FillSamePod: put a container into a balloon that already
	// includes another container from the same pod.
	FillSamePod
	// FillNewBalloon: create a new balloon, if possible, and put
	// a container into it.
	FillNewBalloon
	// FillNewBalloonMust: create a new balloon for a container,
	// but refuse to run the container if the balloon cannot be
	// created.
	FillNewBalloonMust
	// FillReservedBalloon: put a container into the reserved
	// balloon.
	FillReservedBalloon
	// FillDefaultBalloon: put a container into the default
	// balloon.
	FillDefaultBalloon
)

func (FillMethod) MarshalJSON

func (fm FillMethod) MarshalJSON() ([]byte, error)

MarshalJSON marshals a FillMethod as a quoted json string

func (FillMethod) String

func (fm FillMethod) String() string

String stringifies a FillMethod

func (*FillMethod) UnmarshalJSON

func (fm *FillMethod) UnmarshalJSON(b []byte) error

UnmarshalJSON unmarshals a FillMethod quoted json string to the enum value

type Metrics

type Metrics struct {
	Balloons []*BalloonMetrics
}

Metrics defines the balloons-specific metrics from policy level.

Jump to

Keyboard shortcuts

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