diff --git a/internal/server/cgroup/abstraction.go b/internal/server/cgroup/abstraction.go index 2b747b24804..0c3c2713338 100644 --- a/internal/server/cgroup/abstraction.go +++ b/internal/server/cgroup/abstraction.go @@ -754,13 +754,49 @@ func (cg *CGroup) SetHugepagesLimit(pageType string, limit int64) error { case Unavailable: return ErrControllerMissing case V1: - return cg.rw.Set(version, "hugetlb", fmt.Sprintf("hugetlb.%s.limit_in_bytes", pageType), fmt.Sprintf("%d", limit)) + // Apply the overall limit. + err := cg.rw.Set(version, "hugetlb", fmt.Sprintf("hugetlb.%s.limit_in_bytes", pageType), fmt.Sprintf("%d", limit)) + if err != nil { + return err + } + + // Apply the reserved limit. + err = cg.rw.Set(version, "hugetlb", fmt.Sprintf("hugetlb.%s.rsvd.limit_in_bytes", pageType), fmt.Sprintf("%d", limit)) + if err != nil && !os.IsNotExist(err) { + return err + } + + return nil case V2: if limit == -1 { - return cg.rw.Set(version, "hugetlb", fmt.Sprintf("hugetlb.%s.max", pageType), "max") + // Apply the overall limit. + err := cg.rw.Set(version, "hugetlb", fmt.Sprintf("hugetlb.%s.max", pageType), "max") + if err != nil { + return err + } + + // Apply the reserved limit. + err = cg.rw.Set(version, "hugetlb", fmt.Sprintf("hugetlb.%s.rsvd.max", pageType), "max") + if err != nil && !os.IsNotExist(err) { + return err + } + + return nil + } + + // Apply the overall limit. + err := cg.rw.Set(version, "hugetlb", fmt.Sprintf("hugetlb.%s.max", pageType), fmt.Sprintf("%d", limit)) + if err != nil { + return err } - return cg.rw.Set(version, "hugetlb", fmt.Sprintf("hugetlb.%s.max", pageType), fmt.Sprintf("%d", limit)) + // Apply the reserved limit. + err = cg.rw.Set(version, "hugetlb", fmt.Sprintf("hugetlb.%s.rsvd.max", pageType), fmt.Sprintf("%d", limit)) + if err != nil && !os.IsNotExist(err) { + return err + } + + return nil } return ErrUnknownVersion