mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
Revert "Pod level hugepage for cgroup when unset in container"
This reverts commit f0a14732371cb6f9521567b3fad564d8a8360bd7 and kuberuntime_container_linux_test.go change.
This commit is contained in:
parent
fd50d9207f
commit
98e362c049
@ -143,7 +143,7 @@ func (m *kubeGenericRuntimeManager) generateLinuxContainerResources(pod *v1.Pod,
|
|||||||
lcr.OomScoreAdj = int64(qos.GetContainerOOMScoreAdjust(pod, container,
|
lcr.OomScoreAdj = int64(qos.GetContainerOOMScoreAdjust(pod, container,
|
||||||
int64(m.machineInfo.MemoryCapacity)))
|
int64(m.machineInfo.MemoryCapacity)))
|
||||||
|
|
||||||
lcr.HugepageLimits = GetHugepageLimitsFromResources(pod, container.Resources)
|
lcr.HugepageLimits = GetHugepageLimitsFromResources(container.Resources)
|
||||||
|
|
||||||
// Configure swap for the container
|
// Configure swap for the container
|
||||||
m.configureContainerSwapResources(lcr, pod, container)
|
m.configureContainerSwapResources(lcr, pod, container)
|
||||||
@ -300,7 +300,7 @@ func (m *kubeGenericRuntimeManager) calculateLinuxResources(cpuRequest, cpuLimit
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetHugepageLimitsFromResources returns limits of each hugepages from resources.
|
// 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
|
var hugepageLimits []*runtimeapi.HugepageLimit
|
||||||
|
|
||||||
// For each page size, limit to 0.
|
// For each page size, limit to 0.
|
||||||
@ -312,20 +312,23 @@ func GetHugepageLimitsFromResources(pod *v1.Pod, resources v1.ResourceRequiremen
|
|||||||
}
|
}
|
||||||
|
|
||||||
requiredHugepageLimits := map[string]uint64{}
|
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 {
|
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 {
|
for _, hugepageLimit := range hugepageLimits {
|
||||||
@ -337,25 +340,6 @@ func GetHugepageLimitsFromResources(pod *v1.Pod, resources v1.ResourceRequiremen
|
|||||||
return hugepageLimits
|
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 {
|
func toKubeContainerResources(statusResources *runtimeapi.ContainerResources) *kubecontainer.ContainerResources {
|
||||||
var cStatusResources *kubecontainer.ContainerResources
|
var cStatusResources *kubecontainer.ContainerResources
|
||||||
runtimeStatusResources := statusResources.GetLinux()
|
runtimeStatusResources := statusResources.GetLinux()
|
||||||
|
@ -665,7 +665,7 @@ func TestGetHugepageLimitsFromResources(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
results := GetHugepageLimitsFromResources(&v1.Pod{}, test.resources)
|
results := GetHugepageLimitsFromResources(test.resources)
|
||||||
if !reflect.DeepEqual(expectedHugepages, results) {
|
if !reflect.DeepEqual(expectedHugepages, results) {
|
||||||
t.Errorf("%s test failed. Expected %v but got %v", test.name, expectedHugepages, results)
|
t.Errorf("%s test failed. Expected %v but got %v", test.name, expectedHugepages, results)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user