util

package
Version: v0.5.0 Latest Latest
Warning

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

Go to latest
Published: Jun 30, 2022 License: Apache-2.0 Imports: 28 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ProcMemInfoPath = "/proc/meminfo"
)

Variables

View Source
var (
	CpuacctUsageTypeStat = sets.NewString("user", "nice", "system", "irq", "softirq")
)

Functions

func DefaultCPUBurstConfig added in v0.3.0

func DefaultCPUBurstConfig() slov1alpha1.CPUBurstConfig

func DefaultCPUBurstStrategy added in v0.3.0

func DefaultCPUBurstStrategy() *slov1alpha1.CPUBurstStrategy

func DefaultCPUQoS added in v0.4.0

func DefaultCPUQoS(qos apiext.QoSClass) *slov1alpha1.CPUQoS

func DefaultMemoryQoS added in v0.3.0

func DefaultMemoryQoS(qos apiext.QoSClass) *slov1alpha1.MemoryQoS

DefaultMemoryQoS returns the recommended configuration for memory qos strategy. Please refer to `apis/slo/v1alpha1` for the definition of each field. In the recommended configuration, all abilities of memcg qos are disable, including `MinLimitPercent`, `LowLimitPercent`, `ThrottlingPercent` since they are not fully beneficial to all scenarios. Whereas, they are still useful when the use case is determined. e.g. lock some memory to improve file read performance. Asynchronous memory reclaim is enabled by default to alleviate the direct reclaim pressure, including `WmarkRatio` and `WmarkScalePermill`. The watermark of async reclaim is not recommended to set too low, since lower the watermark the more excess reclamations. Memory min watermark grading corresponding to `WmarkMinAdj` is enabled. It benefits high-priority pods by postponing global reclaim when machine's free memory is below than `/proc/sys/vm/min_free_kbytes`.

func DefaultNodeSLOSpecConfig

func DefaultNodeSLOSpecConfig() slov1alpha1.NodeSLOSpec

DefaultNodeSLOSpecConfig defines the default config of the nodeSLOSpec, which would be used by the resmgr

func DefaultResourceQoSStrategy added in v0.3.0

func DefaultResourceQoSStrategy() *slov1alpha1.ResourceQoSStrategy

func DefaultResourceThresholdStrategy

func DefaultResourceThresholdStrategy() *slov1alpha1.ResourceThresholdStrategy

func DumpJSON

func DumpJSON(o interface{}) string

DumpJSON returns the JSON encoding

func FindContainerIdAndStatusByName added in v0.2.0

func FindContainerIdAndStatusByName(status *corev1.PodStatus, name string) (string, *corev1.ContainerStatus, error)

func GenerateCPUSetStr added in v0.2.0

func GenerateCPUSetStr(cpuset []int32) string

GenerateCPUSetStr generates the cpuset string from the cpuset slice eg. [3,2,1,0] => "3,2,1,0"

func GetCPUStatUsageTicks added in v0.2.0

func GetCPUStatUsageTicks() (uint64, error)

GetCPUStatUsageTicks returns the node's CPU usage ticks

func GetContainerBEMemoryByteLimit added in v0.2.0

func GetContainerBEMemoryByteLimit(c *corev1.Container) int64

func GetContainerBEMemoryByteRequest added in v0.3.0

func GetContainerBEMemoryByteRequest(c *corev1.Container) int64

func GetContainerBEMilliCPULimit added in v0.2.0

func GetContainerBEMilliCPULimit(c *corev1.Container) int64

func GetContainerBEMilliCPURequest added in v0.2.0

func GetContainerBEMilliCPURequest(c *corev1.Container) int64

func GetContainerBaseCFSQuota added in v0.3.0

func GetContainerBaseCFSQuota(container *corev1.Container) int64

func GetContainerCPUUsageNanoseconds added in v0.5.0

func GetContainerCPUUsageNanoseconds(podCgroupDir string, c *corev1.ContainerStatus) (uint64, error)

func GetContainerCgroupCFSPeriodPath added in v0.2.0

func GetContainerCgroupCFSPeriodPath(podParentDir string, c *corev1.ContainerStatus) (string, error)

func GetContainerCgroupCFSQuotaPath added in v0.2.0

func GetContainerCgroupCFSQuotaPath(podParentDir string, c *corev1.ContainerStatus) (string, error)

func GetContainerCgroupCPUAcctUsagePath added in v0.5.0

func GetContainerCgroupCPUAcctUsagePath(podParentDir string, c *corev1.ContainerStatus) (string, error)

func GetContainerCgroupCPUSharePath added in v0.2.0

func GetContainerCgroupCPUSharePath(podParentDir string, c *corev1.ContainerStatus) (string, error)

func GetContainerCgroupCPUStatPath added in v0.2.0

func GetContainerCgroupCPUStatPath(podParentDir string, c *corev1.ContainerStatus) (string, error)

func GetContainerCgroupMemLimitPath added in v0.2.0

func GetContainerCgroupMemLimitPath(podParentDir string, c *corev1.ContainerStatus) (string, error)

func GetContainerCgroupMemStatPath added in v0.2.0

func GetContainerCgroupMemStatPath(podParentDir string, c *corev1.ContainerStatus) (string, error)

func GetContainerCgroupPathWithKube added in v0.2.0

func GetContainerCgroupPathWithKube(podParentDir string, c *corev1.ContainerStatus) (string, error)

@parentDir kubepods-burstable.slice/kubepods-pod7712555c_ce62_454a_9e18_9ff0217b8941.slice/ @return kubepods.slice/kubepods-burstable.slice/kubepods-pod7712555c_ce62_454a_9e18_9ff0217b8941.slice/****.scope

func GetContainerCgroupPathWithKubeByID added in v0.5.0

func GetContainerCgroupPathWithKubeByID(podParentDir string, containerID string) (string, error)

@parentDir kubepods-burstable.slice/kubepods-pod7712555c_ce62_454a_9e18_9ff0217b8941.slice/ @return kubepods.slice/kubepods-burstable.slice/kubepods-pod7712555c_ce62_454a_9e18_9ff0217b8941.slice/****.scope

func GetContainerCurCFSPeriod added in v0.2.0

func GetContainerCurCFSPeriod(podParentDir string, c *corev1.ContainerStatus) (int64, error)

func GetContainerCurCFSQuota added in v0.2.0

func GetContainerCurCFSQuota(podParentDir string, c *corev1.ContainerStatus) (int64, error)

func GetContainerCurCPUShare added in v0.2.0

func GetContainerCurCPUShare(podParentDir string, c *corev1.ContainerStatus) (int64, error)

func GetContainerCurMemLimitBytes added in v0.2.0

func GetContainerCurMemLimitBytes(podParentDir string, c *corev1.ContainerStatus) (int64, error)

func GetContainerCurTasks added in v0.3.0

func GetContainerCurTasks(podParentDir string, c *corev1.ContainerStatus) ([]int, error)

func GetContainerCurTasksPath added in v0.3.0

func GetContainerCurTasksPath(podParentDir string, c *corev1.ContainerStatus) (string, error)

func GetContainerMemStatUsageBytes added in v0.2.0

func GetContainerMemStatUsageBytes(podCgroupDir string, c *corev1.ContainerStatus) (int64, error)

func GetContainerMemoryByteLimit added in v0.3.0

func GetContainerMemoryByteLimit(c *corev1.Container) int64

func GetContainerMilliCPULimit added in v0.3.0

func GetContainerMilliCPULimit(c *corev1.Container) int64

func GetFastLabelSelector

func GetFastLabelSelector(ps *metav1.LabelSelector) (labels.Selector, error)

func GetKubeQoSByCgroupParent added in v0.4.0

func GetKubeQoSByCgroupParent(cgroupDir string) corev1.PodQOSClass

func GetKubeQosClass added in v0.2.0

func GetKubeQosClass(pod *corev1.Pod) corev1.PodQOSClass

func GetKubeQosRelativePath added in v0.2.0

func GetKubeQosRelativePath(qosClass corev1.PodQOSClass) string

@output like kubepods.slice/kubepods-besteffort.slice/

func GetMemInfoUsageKB added in v0.2.0

func GetMemInfoUsageKB() (int64, error)

GetMemInfoUsageKB returns the node's memory usage quantity (kB)

func GetNodeAddress added in v0.4.1

func GetNodeAddress(node *corev1.Node, addrType corev1.NodeAddressType) (string, error)

GetNodeAddress get node specified type address.

func GetNodeKey

func GetNodeKey(node *corev1.Node) string

GetNodeKey returns a generated key with given node

func GetNodeMetricKey

func GetNodeMetricKey(nodeMetric *slov1alpha1.NodeMetric) string

GetNodeMetricKey returns a generated key with given nodeMetric

func GetPodBEMemoryByteLimit added in v0.2.0

func GetPodBEMemoryByteLimit(pod *corev1.Pod) int64

func GetPodBEMemoryByteRequestIgnoreUnlimited added in v0.3.0

func GetPodBEMemoryByteRequestIgnoreUnlimited(pod *corev1.Pod) int64

func GetPodBEMilliCPULimit added in v0.2.0

func GetPodBEMilliCPULimit(pod *corev1.Pod) int64

func GetPodBEMilliCPURequest added in v0.2.0

func GetPodBEMilliCPURequest(pod *corev1.Pod) int64

func GetPodCPUUsageNanoseconds added in v0.5.0

func GetPodCPUUsageNanoseconds(podCgroupDir string) (uint64, error)

GetPodCPUUsage returns the pod's CPU usage in nanosecond

func GetPodCgroupCFSPeriodPath added in v0.2.0

func GetPodCgroupCFSPeriodPath(podParentDir string) string

func GetPodCgroupCFSQuotaPath added in v0.2.0

func GetPodCgroupCFSQuotaPath(podParentDir string) string

@podParentDir kubepods-burstable.slice/kubepods-pod7712555c_ce62_454a_9e18_9ff0217b8941.slice/ @output /sys/fs/cgroup/cpu/kubepods.slice/kubepods-burstable.slice/kubepods-pod7712555c_ce62_454a_9e18_9ff0217b8941.slice/cpu.cfs_quota_us

func GetPodCgroupCPUAcctProcUsagePath added in v0.5.0

func GetPodCgroupCPUAcctProcUsagePath(podParentDir string) string

@podParentDir kubepods-burstable.slice/kubepods-pod7712555c_ce62_454a_9e18_9ff0217b8941.slice/ @output /sys/fs/cgroup/cpuacct/kubepods.slice/kubepods-burstable.slice/kubepods-pod7712555c_ce62_454a_9e18_9ff0217b8941.slice/cpuacct.usage

func GetPodCgroupCPUSharePath added in v0.2.0

func GetPodCgroupCPUSharePath(podParentDir string) string

@podParentDir kubepods-burstable.slice/kubepods-pod7712555c_ce62_454a_9e18_9ff0217b8941.slice/ @output /sys/fs/cgroup/cpu/kubepods.slice/kubepods-burstable.slice/kubepods-pod7712555c_ce62_454a_9e18_9ff0217b8941.slice/cpu.shares

func GetPodCgroupCPUStatPath added in v0.2.0

func GetPodCgroupCPUStatPath(podParentDir string) string

@podParentDir kubepods-burstable.slice/kubepods-pod7712555c_ce62_454a_9e18_9ff0217b8941.slice/ @output /sys/fs/cgroup/cpu/kubepods.slice/kubepods-burstable.slice/kubepods-pod7712555c_ce62_454a_9e18_9ff0217b8941.slice/cpu.stat

func GetPodCgroupDirWithKube added in v0.2.0

func GetPodCgroupDirWithKube(podKubeRelativeDir string) string

@kubeRelativeDir kubepods-burstable.slice/kubepods-pod7712555c_ce62_454a_9e18_9ff0217b8941.slice/ @return kubepods.slice/kubepods-burstable.slice/kubepods-pod7712555c_ce62_454a_9e18_9ff0217b8941.slice/

func GetPodCgroupMemLimitPath added in v0.2.0

func GetPodCgroupMemLimitPath(podParentDir string) string

@podParentDir kubepods-burstable.slice/kubepods-pod7712555c_ce62_454a_9e18_9ff0217b8941.slice/ @output /sys/fs/cgroup/memory/kubepods.slice/kubepods-burstable.slice/kubepods-pod7712555c_ce62_454a_9e18_9ff0217b8941.slice/memory.limit_in_bytes

func GetPodCgroupMemStatPath added in v0.2.0

func GetPodCgroupMemStatPath(podParentDir string) string

@podParentDir kubepods-burstable.slice/kubepods-pod7712555c_ce62_454a_9e18_9ff0217b8941.slice/ @output /sys/fs/cgroup/memory/kubepods.slice/kubepods-burstable.slice/kubepods-pod7712555c_ce62_454a_9e18_9ff0217b8941.slice/memory.stat

func GetPodCurCFSPeriod added in v0.2.0

func GetPodCurCFSPeriod(podParentDir string) (int64, error)

func GetPodCurCFSQuota added in v0.2.0

func GetPodCurCFSQuota(podParentDir string) (int64, error)

func GetPodCurCPUShare added in v0.2.0

func GetPodCurCPUShare(podParentDir string) (int64, error)

func GetPodCurMemLimitBytes added in v0.2.0

func GetPodCurMemLimitBytes(podParentDir string) (int64, error)

func GetPodKey

func GetPodKey(pod *corev1.Pod) string

func GetPodKubeRelativePath added in v0.2.0

func GetPodKubeRelativePath(pod *corev1.Pod) string

@return like kubepods-burstable.slice/kubepods-pod7712555c_ce62_454a_9e18_9ff0217b8941.slice/

func GetPodMemStatUsageBytes added in v0.2.0

func GetPodMemStatUsageBytes(podCgroupDir string) (int64, error)

GetPodMemStatUsageBytes returns the pod's memory usage quantity (Byte)

func GetPodMetricKey

func GetPodMetricKey(podMetric *slov1alpha1.PodMetricInfo) string

func GetPodQoSRelativePath added in v0.2.0

func GetPodQoSRelativePath(qosClass corev1.PodQOSClass) string

@return like kubepods.slice/kubepods-burstable.slice/

func GetPodRequest

func GetPodRequest(pod *corev1.Pod, resourceNames ...corev1.ResourceName) corev1.ResourceList

func GetRootCgroupCPUSetDir added in v0.2.0

func GetRootCgroupCPUSetDir(qosClass corev1.PodQOSClass) string

GetRootCgroupCPUSetDir gets the cpuset parent directory of the specified podQos' root cgroup @output /sys/fs/cgroup/cpuset/kubepods.slice/kubepods-besteffort.slice

func GetRootCgroupCPUUsageNanoseconds added in v0.5.0

func GetRootCgroupCPUUsageNanoseconds(qosClass corev1.PodQOSClass) (uint64, error)

func GetRootCgroupCurCFSPeriod added in v0.4.0

func GetRootCgroupCurCFSPeriod(qosClass corev1.PodQOSClass) (int64, error)

func GetRootCgroupCurCFSQuota added in v0.4.0

func GetRootCgroupCurCFSQuota(qosClass corev1.PodQOSClass) (int64, error)

func GetRootCgroupCurCPUSet added in v0.2.0

func GetRootCgroupCurCPUSet(qosClass corev1.PodQOSClass) ([]int32, error)

GetRootCgroupCurCPUSet gets the current cpuset of the specified podQos' root cgroup

func IsNodeAddressTypeSupported added in v0.4.1

func IsNodeAddressTypeSupported(addrType corev1.NodeAddressType) bool

IsNodeAddressTypeSupported determine whether addrType is a supported type.

func IsPodTerminated added in v0.4.0

func IsPodTerminated(pod *corev1.Pod) bool

func IsResourceDiff

func IsResourceDiff(old, new corev1.ResourceList, resourceName corev1.ResourceName, diffThreshold float64) bool

IsResourceDiff returns whether the new resource has big enough difference with the old one or not

func MaxInt64 added in v0.3.0

func MaxInt64(i, j int64) int64

func MergeCPUSet added in v0.2.0

func MergeCPUSet(old, new []int32) []int32

MergeCPUSet merges the old cpuset with the new one, and also deduplicate and keeps a desc order by processor ids e.g. [1,0], [3,2,2,1] => [3,2,1,0]

func MergeCfg added in v0.2.0

func MergeCfg(old, new interface{}) (interface{}, error)

MergeCfg returns a merged interface. Value in new will override old's when both fields exist. It will throw an error if:

  1. either of the inputs was nil;
  2. inputs were not a pointer of the same json struct.

func MinInt64 added in v0.3.0

func MinInt64(i, j int64) int64

func MultiplyMilliQuant

func MultiplyMilliQuant(quant resource.Quantity, factor float64) resource.Quantity

MultiplyMilliQuant scales quantity by factor

func MultiplyQuant

func MultiplyQuant(quant resource.Quantity, factor float64) resource.Quantity

MultiplyQuant scales quantity by factor

func NewZeroResourceList

func NewZeroResourceList() corev1.ResourceList

func NoneCPUQoS added in v0.4.0

func NoneCPUQoS() *slov1alpha1.CPUQoS

func NoneMemoryQoS added in v0.3.0

func NoneMemoryQoS() *slov1alpha1.MemoryQoS

NoneMemoryQoS returns the all-disabled configuration for memory qos strategy.

func NoneResctrlQoS added in v0.3.0

func NoneResctrlQoS() *slov1alpha1.ResctrlQoS

func NoneResourceQoS added in v0.3.0

func NoneResourceQoS(qos apiext.QoSClass) *slov1alpha1.ResourceQoS

func NoneResourceQoSStrategy added in v0.3.0

func NoneResourceQoSStrategy() *slov1alpha1.ResourceQoSStrategy

NoneResourceQoSStrategy indicates the qos strategy with all qos

func ParseCPUSetStr added in v0.2.0

func ParseCPUSetStr(cpusetStr string) ([]int32, error)

ParseCPUSetStr parses cpuset string into a slice eg. "0-5,34,46-48" => [0,1,2,3,4,5,34,46,47,48]

func ParseContainerID added in v0.2.0

func ParseContainerID(basename string) (string, error)

@return 7712555c_ce62_454a_9e18_9ff0217b8941 from docker-7712555c_ce62_454a_9e18_9ff0217b8941.scope

func ParseContainerId added in v0.2.0

func ParseContainerId(data string) (cType, cID string, err error)

func ParsePodID added in v0.2.0

func ParsePodID(basename string) (string, error)

@return 7712555c_ce62_454a_9e18_9ff0217b8941 from kubepods-pod7712555c_ce62_454a_9e18_9ff0217b8941.slice

func RunFeature added in v0.2.0

func RunFeature(moduleFunc func(), featureDependency []featuregate.Feature, interval int, stopCh <-chan struct{}) bool

RunFeature runs moduleFunc only if interval > 0 AND at least one feature dependency is enabled

func RunFeatureWithInit added in v0.2.0

func RunFeatureWithInit(moduleInit func() error, moduleFunc func(), featureDependency []featuregate.Feature, interval int, stopCh <-chan struct{}) (bool, error)

RunFeatureWithInit runs moduleFunc only if interval > 0 , at least one feature dependency is enabled and moduleInit function returns nil

func WriteCgroupCPUSet added in v0.2.0

func WriteCgroupCPUSet(cgroupFileDir, cpusetStr string) error

WriteCgroupCPUSet writes the cgroup cpuset file according to the specified cgroup dir

Types

type CPUBasicInfo added in v0.2.0

type CPUBasicInfo struct {
	HyperThreadEnabled bool   `json:"hyperThreadEnabled,omitempty"`
	CatL3CbmMask       string `json:"catL3CbmMask,omitempty"`
}

CPUBasicInfo describes the cpu basic features and status

type CPUTotalInfo added in v0.2.0

type CPUTotalInfo struct {
	NumberCPUs    int32 `json:"numberCPUs"`
	NumberCores   int32 `json:"numberCores"`
	NumberSockets int32 `json:"numberSockets"`
	NumberNodes   int32 `json:"numberNodes"`
	NumberL3s     int32 `json:"numberL3s"`
}

CPUTotalInfo describes the total number infos of the local cpu, e.g. the number of cores, the number of numa nodes

type LocalCPUInfo added in v0.2.0

type LocalCPUInfo struct {
	// BasicInfo describe the cpu features and their status
	BasicInfo CPUBasicInfo `json:"basicInfo,omitempty"`
	// ProcessorInfos contains topology information of all available CPUs
	ProcessorInfos []ProcessorInfo `json:"processorInfos,omitempty"`
	// TotalInfo stores the numbers of cpu processors, cores, sockets and nodes
	TotalInfo CPUTotalInfo `json:"totalInfo,omitempty"`
}

LocalCPUInfo contains the cpu information collected from the node

func GetLocalCPUInfo added in v0.2.0

func GetLocalCPUInfo() (*LocalCPUInfo, error)

GetLocalCPUInfo returns the local cpu info for cpuset allocation, NUMA-aware scheduling

type MemInfo added in v0.2.0

type MemInfo struct {
	MemTotal          uint64 `json:"mem_total"`
	MemFree           uint64 `json:"mem_free"`
	MemAvailable      uint64 `json:"mem_available"`
	Buffers           uint64 `json:"buffers"`
	Cached            uint64 `json:"cached"`
	SwapCached        uint64 `json:"swap_cached"`
	Active            uint64 `json:"active"`
	Inactive          uint64 `json:"inactive"`
	ActiveAnon        uint64 `json:"active_anon" field:"Active(anon)"`
	InactiveAnon      uint64 `json:"inactive_anon" field:"Inactive(anon)"`
	ActiveFile        uint64 `json:"active_file" field:"Active(file)"`
	InactiveFile      uint64 `json:"inactive_file" field:"Inactive(file)"`
	Unevictable       uint64 `json:"unevictable"`
	Mlocked           uint64 `json:"mlocked"`
	SwapTotal         uint64 `json:"swap_total"`
	SwapFree          uint64 `json:"swap_free"`
	Dirty             uint64 `json:"dirty"`
	Writeback         uint64 `json:"write_back"`
	AnonPages         uint64 `json:"anon_pages"`
	Mapped            uint64 `json:"mapped"`
	Shmem             uint64 `json:"shmem"`
	Slab              uint64 `json:"slab"`
	SReclaimable      uint64 `json:"s_reclaimable"`
	SUnreclaim        uint64 `json:"s_unclaim"`
	KernelStack       uint64 `json:"kernel_stack"`
	PageTables        uint64 `json:"page_tables"`
	NFS_Unstable      uint64 `json:"nfs_unstable"`
	Bounce            uint64 `json:"bounce"`
	WritebackTmp      uint64 `json:"writeback_tmp"`
	CommitLimit       uint64 `json:"commit_limit"`
	Committed_AS      uint64 `json:"committed_as"`
	VmallocTotal      uint64 `json:"vmalloc_total"`
	VmallocUsed       uint64 `json:"vmalloc_used"`
	VmallocChunk      uint64 `json:"vmalloc_chunk"`
	HardwareCorrupted uint64 `json:"hardware_corrupted"`
	AnonHugePages     uint64 `json:"anon_huge_pages"`
	HugePages_Total   uint64 `json:"huge_pages_total"`
	HugePages_Free    uint64 `json:"huge_pages_free"`
	HugePages_Rsvd    uint64 `json:"huge_pages_rsvd"`
	HugePages_Surp    uint64 `json:"huge_pages_surp"`
	Hugepagesize      uint64 `json:"hugepagesize"`
	DirectMap4k       uint64 `json:"direct_map_4k"`
	DirectMap2M       uint64 `json:"direct_map_2M"`
	DirectMap1G       uint64 `json:"direct_map_1G"`
}

type ProcessorInfo added in v0.2.0

type ProcessorInfo struct {
	// logic CPU/ processor ID
	CPUID int32 `json:"cpu"`
	// physical CPU core ID
	CoreID int32 `json:"core"`
	// cpu socket ID
	SocketID int32 `json:"socket"`
	// numa node ID
	NodeID int32 `json:"node"`
	// L1 L2 cache ID
	L1dl1il2 string `json:"l1dl1il2"`
	// L3 cache ID
	L3 int32 `json:"l3"`
	// online
	Online string `json:"online"`
}

ProcessorInfo describes the processor topology information of a single logic cpu, including the core, socket and numa node it belongs to

Directories

Path Synopsis
metrics
handler/mockclient
Package mock_client is a generated GoMock package.
Package mock_client is a generated GoMock package.

Jump to

Keyboard shortcuts

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