From 98e362c04952438d8a934f20bec0a19ce1473119 Mon Sep 17 00:00:00 2001 From: Kevin Torres Date: Fri, 7 Mar 2025 00:12:31 +0000 Subject: [PATCH] Revert "Pod level hugepage for cgroup when unset in container" This reverts commit f0a14732371cb6f9521567b3fad564d8a8360bd7 and kuberuntime_container_linux_test.go change. --- .../kuberuntime_container_linux.go | 52 +++++++------------ .../kuberuntime_container_linux_test.go | 2 +- 2 files changed, 19 insertions(+), 35 deletions(-) diff --git a/pkg/kubelet/kuberuntime/kuberuntime_container_linux.go b/pkg/kubelet/kuberuntime/kuberuntime_container_linux.go index 4fafdeda6f3..de32e864a52 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_container_linux.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_container_linux.go @@ -143,7 +143,7 @@ func (m *kubeGenericRuntimeManager) generateLinuxContainerResources(pod *v1.Pod, lcr.OomScoreAdj = int64(qos.GetContainerOOMScoreAdjust(pod, container, int64(m.machineInfo.MemoryCapacity))) - lcr.HugepageLimits = GetHugepageLimitsFromResources(pod, container.Resources) + lcr.HugepageLimits = GetHugepageLimitsFromResources(container.Resources) // Configure swap for the container m.configureContainerSwapResources(lcr, pod, container) @@ -300,7 +300,7 @@ func (m *kubeGenericRuntimeManager) calculateLinuxResources(cpuRequest, cpuLimit } // GetHugepageLimitsFromResources returns limits of each hugepages from resources. -func GetHugepageLimitsFromResources(pod *v1.Pod, resources v1.ResourceRequirements) []*runtimeapi.HugepageLimit { +func GetHugepageLimitsFromResources(resources v1.ResourceRequirements) []*runtimeapi.HugepageLimit { var hugepageLimits []*runtimeapi.HugepageLimit // For each page size, limit to 0. @@ -312,20 +312,23 @@ func GetHugepageLimitsFromResources(pod *v1.Pod, resources v1.ResourceRequiremen } requiredHugepageLimits := map[string]uint64{} - - // When hugepage limits are specified at pod level, the container limit will - // match the pod level limit, however if the container also specifies, - // its limit will have precedence over the pod level limit - if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.PodLevelResources) && resourcehelper.IsPodLevelResourcesSet(pod) { - for limitName, limitAmount := range pod.Spec.Resources.Limits { - readAndDefineRequiredHugepageLimit(requiredHugepageLimits, limitName, limitAmount) - } - } - - // If the container and the pod specify, the container will have precedence, - // overriding the pod level limit for resourceObj, amountObj := range resources.Limits { - readAndDefineRequiredHugepageLimit(requiredHugepageLimits, resourceObj, amountObj) + if !v1helper.IsHugePageResourceName(resourceObj) { + continue + } + + pageSize, err := v1helper.HugePageSizeFromResourceName(resourceObj) + if err != nil { + klog.InfoS("Failed to get hugepage size from resource", "object", resourceObj, "err", err) + continue + } + + sizeString, err := v1helper.HugePageUnitSizeFromByteSize(pageSize.Value()) + if err != nil { + klog.InfoS("Size is invalid", "object", resourceObj, "err", err) + continue + } + requiredHugepageLimits[sizeString] = uint64(amountObj.Value()) } for _, hugepageLimit := range hugepageLimits { @@ -337,25 +340,6 @@ func GetHugepageLimitsFromResources(pod *v1.Pod, resources v1.ResourceRequiremen return hugepageLimits } -func readAndDefineRequiredHugepageLimit(requiredHugepageLimits map[string]uint64, resourceObj v1.ResourceName, amountObj resource.Quantity) { - if !v1helper.IsHugePageResourceName(resourceObj) { - return - } - - pageSize, err := v1helper.HugePageSizeFromResourceName(resourceObj) - if err != nil { - klog.InfoS("Failed to get hugepage size from resource", "object", resourceObj, "err", err) - return - } - - sizeString, err := v1helper.HugePageUnitSizeFromByteSize(pageSize.Value()) - if err != nil { - klog.InfoS("Size is invalid", "object", resourceObj, "err", err) - return - } - requiredHugepageLimits[sizeString] = uint64(amountObj.Value()) -} - func toKubeContainerResources(statusResources *runtimeapi.ContainerResources) *kubecontainer.ContainerResources { var cStatusResources *kubecontainer.ContainerResources runtimeStatusResources := statusResources.GetLinux() diff --git a/pkg/kubelet/kuberuntime/kuberuntime_container_linux_test.go b/pkg/kubelet/kuberuntime/kuberuntime_container_linux_test.go index ae1ad6125d6..6bb6f606966 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_container_linux_test.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_container_linux_test.go @@ -665,7 +665,7 @@ func TestGetHugepageLimitsFromResources(t *testing.T) { } } - results := GetHugepageLimitsFromResources(&v1.Pod{}, test.resources) + results := GetHugepageLimitsFromResources(test.resources) if !reflect.DeepEqual(expectedHugepages, results) { t.Errorf("%s test failed. Expected %v but got %v", test.name, expectedHugepages, results) }