From e2055fb98c3773562b45909f0dcbc32216f08f11 Mon Sep 17 00:00:00 2001 From: Boovan Rajendran Date: Mon, 4 Sep 2023 08:05:29 -0400 Subject: [PATCH] kubelet CFS quota throttling for non integer cpulimit Signed-off-by: Boovan Rajendran --- pkg/kubelet/cm/internal_container_lifecycle_linux.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/kubelet/cm/internal_container_lifecycle_linux.go b/pkg/kubelet/cm/internal_container_lifecycle_linux.go index a99d01f8884..e5e25cd56de 100644 --- a/pkg/kubelet/cm/internal_container_lifecycle_linux.go +++ b/pkg/kubelet/cm/internal_container_lifecycle_linux.go @@ -39,7 +39,11 @@ func (i *internalContainerLifecycleImpl) PreCreateContainer(pod *v1.Pod, contain // Disable cgroup CFS throttle at the container level. // /sys/fs/cgroup/cpu/k8s-infra/kubepods///cpu.cfs_quota_us // /sys/fs/cgroup/cpu/k8s-infra/kubepods///cpu.cfs_period_us - if i.cpuManager.GetCPUPolicy() == "static" && v1qos.GetPodQOS(pod) == v1.PodQOSGuaranteed { + // We can only set CpuQuota to -1 if we're allocating the entire CPU. + // For fractional CPUs the CpuQuota is needed to enforce the limit. + cpuQuantity := container.Resources.Requests[v1.ResourceCPU] + fractionalCpuQuantity := cpuQuantity.MilliValue()%1000 + if i.cpuManager.GetCPUPolicy() == "static" && v1qos.GetPodQOS(pod) == v1.PodQOSGuaranteed && fractionalCpuQuantity == 0 { containerConfig.Linux.Resources.CpuPeriod = int64(100000) containerConfig.Linux.Resources.CpuQuota = int64(-1) } -- 2.25.1