summaryrefslogtreecommitdiff
path: root/vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups_linux.go
diff options
context:
space:
mode:
authorLibravatar dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>2025-02-03 10:12:35 +0000
committerLibravatar GitHub <noreply@github.com>2025-02-03 10:12:35 +0000
commitc086d4048c2a26a0bf70c1ced24c78680a786710 (patch)
treecf7606e8452e9047d7f0e0d9b6de10edf7ebdc89 /vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups_linux.go
parent[chore]: Bump golang.org/x/oauth2 from 0.24.0 to 0.25.0 (#3725) (diff)
downloadgotosocial-c086d4048c2a26a0bf70c1ced24c78680a786710.tar.xz
[chore]: Bump github.com/KimMachineGun/automemlimit from 0.6.1 to 0.7.0 (#3726)
Bumps [github.com/KimMachineGun/automemlimit](https://github.com/KimMachineGun/automemlimit) from 0.6.1 to 0.7.0. - [Release notes](https://github.com/KimMachineGun/automemlimit/releases) - [Commits](https://github.com/KimMachineGun/automemlimit/compare/v0.6.1...v0.7.0) --- updated-dependencies: - dependency-name: github.com/KimMachineGun/automemlimit dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Diffstat (limited to 'vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups_linux.go')
-rw-r--r--vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups_linux.go98
1 files changed, 16 insertions, 82 deletions
diff --git a/vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups_linux.go b/vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups_linux.go
index 98a954873..fd2c7e497 100644
--- a/vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups_linux.go
+++ b/vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups_linux.go
@@ -3,96 +3,30 @@
package memlimit
-import (
- "math"
- "os"
- "path/filepath"
-
- "github.com/containerd/cgroups/v3"
- "github.com/containerd/cgroups/v3/cgroup1"
- "github.com/containerd/cgroups/v3/cgroup2"
-)
-
-const (
- cgroupMountPoint = "/sys/fs/cgroup"
-)
-
-// FromCgroup returns the memory limit based on the cgroups version on this system.
+// FromCgroup retrieves the memory limit from the cgroup.
func FromCgroup() (uint64, error) {
- switch cgroups.Mode() {
- case cgroups.Legacy:
- return FromCgroupV1()
- case cgroups.Hybrid:
- return FromCgroupHybrid()
- case cgroups.Unified:
- return FromCgroupV2()
- }
- return 0, ErrNoCgroup
+ return fromCgroup(detectCgroupVersion)
}
-// FromCgroupV1 returns the memory limit from the cgroup v1.
+// FromCgroupV1 retrieves the memory limit from the cgroup v1 controller.
+// After v1.0.0, this function could be removed and FromCgroup should be used instead.
func FromCgroupV1() (uint64, error) {
- cg, err := cgroup1.Load(cgroup1.RootPath, cgroup1.WithHiearchy(
- cgroup1.SingleSubsystem(cgroup1.Default, cgroup1.Memory),
- ))
- if err != nil {
- return 0, err
- }
-
- metrics, err := cg.Stat(cgroup1.IgnoreNotExist)
- if err != nil {
- return 0, err
- }
-
- if limit := metrics.GetMemory().GetHierarchicalMemoryLimit(); limit != 0 && limit != getCgroupV1NoLimit() {
- return limit, nil
- }
-
- return 0, ErrNoLimit
-}
-
-func getCgroupV1NoLimit() uint64 {
- ps := uint64(os.Getpagesize())
- return math.MaxInt64 / ps * ps
+ return fromCgroup(func(_ []mountInfo) (bool, bool) {
+ return true, false
+ })
}
-// FromCgroupHybrid returns the memory limit from the cgroup v1 or v2.
-// It checks the cgroup v2 first, and if it fails, it falls back to cgroup v1.
+// FromCgroupHybrid retrieves the memory limit from the cgroup v2 and v1 controller sequentially,
+// basically, it is equivalent to FromCgroup.
+// After v1.0.0, this function could be removed and FromCgroup should be used instead.
func FromCgroupHybrid() (uint64, error) {
- limit, err := fromCgroupV2(filepath.Join(cgroupMountPoint, "unified"))
- if err == nil {
- return limit, nil
- } else if err != ErrNoLimit {
- return 0, err
- }
-
- return FromCgroupV1()
+ return FromCgroup()
}
-// FromCgroupV2 returns the memory limit from the cgroup v2.
+// FromCgroupV2 retrieves the memory limit from the cgroup v2 controller.
+// After v1.0.0, this function could be removed and FromCgroup should be used instead.
func FromCgroupV2() (uint64, error) {
- return fromCgroupV2(cgroupMountPoint)
-}
-
-func fromCgroupV2(mountPoint string) (uint64, error) {
- path, err := cgroup2.NestedGroupPath("")
- if err != nil {
- return 0, err
- }
-
- m, err := cgroup2.Load(path, cgroup2.WithMountpoint(mountPoint))
- if err != nil {
- return 0, err
- }
-
- stats, err := m.Stat()
- if err != nil {
- return 0, err
- }
-
- if limit := stats.GetMemory().GetUsageLimit(); limit != 0 && limit != math.MaxUint64 {
- return limit, nil
- }
-
- return 0, ErrNoLimit
+ return fromCgroup(func(_ []mountInfo) (bool, bool) {
+ return false, true
+ })
}