summaryrefslogtreecommitdiff
path: root/vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups.go
diff options
context:
space:
mode:
authorLibravatar dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>2024-01-22 09:35:23 +0000
committerLibravatar GitHub <noreply@github.com>2024-01-22 09:35:23 +0000
commita858831387f5e423c855ff3c5611fc80209f44b0 (patch)
tree059dcfc37228670e1e2aa20db4a36bb3cef40ef6 /vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups.go
parent[bugfix] fix array type for also_known_as_uris (#2553) (diff)
downloadgotosocial-a858831387f5e423c855ff3c5611fc80209f44b0.tar.xz
[chore]: Bump github.com/KimMachineGun/automemlimit from 0.4.0 to 0.5.0 (#2560)
Diffstat (limited to 'vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups.go')
-rw-r--r--vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups.go91
1 files changed, 6 insertions, 85 deletions
diff --git a/vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups.go b/vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups.go
index cfe6d0f60..979bd3937 100644
--- a/vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups.go
+++ b/vendor/github.com/KimMachineGun/automemlimit/memlimit/cgroups.go
@@ -1,91 +1,12 @@
-//go:build linux
-// +build linux
-
package memlimit
import (
- "path/filepath"
-
- "github.com/containerd/cgroups/v3"
- "github.com/containerd/cgroups/v3/cgroup1"
- "github.com/containerd/cgroups/v3/cgroup2"
+ "errors"
)
-const (
- cgroupMountPoint = "/sys/fs/cgroup"
+var (
+ // ErrNoCgroup is returned when the process is not in cgroup.
+ ErrNoCgroup = errors.New("process is not in cgroup")
+ // ErrCgroupsNotSupported is returned when the system does not support cgroups.
+ ErrCgroupsNotSupported = errors.New("cgroups is not supported on this system")
)
-
-// FromCgroup returns the memory limit based on the cgroups version on this system.
-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
-}
-
-// FromCgroupV1 returns the memory limit from the cgroup v1.
-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 {
- return limit, nil
- }
-
- return 0, ErrNoLimit
-}
-
-// 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.
-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()
-}
-
-// FromCgroupV2 returns the memory limit from the cgroup v2.
-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 {
- return limit, nil
- }
-
- return 0, ErrNoLimit
-}