mirror of
https://github.com/siderolabs/talos.git
synced 2025-10-18 11:01:12 +02:00
fix(init): enable hierarchical accounting and reclaim (#59)
This commit is contained in:
parent
71d97c85b4
commit
68d95c2052
@ -5,47 +5,31 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
)
|
)
|
||||||
|
|
||||||
func enableMemoryHierarchy(s string) error {
|
const (
|
||||||
f := path.Join(s, "/sys/fs/cgroup/memory.use_hierarchy")
|
memoryCgroup = "memory"
|
||||||
if err := ioutil.WriteFile(f, []byte{1}, 0644); err != nil {
|
memoryUseHierarchy = "memory.use_hierarchy"
|
||||||
return err
|
memoryUseHierarchyPermissions = os.FileMode(400)
|
||||||
}
|
)
|
||||||
|
|
||||||
return nil
|
var (
|
||||||
}
|
memoryUseHierarchyContents = []byte(strconv.Itoa(1))
|
||||||
|
)
|
||||||
|
|
||||||
/*
|
// Mount creates the cgroup mount points.
|
||||||
Mount creates the following mount points:
|
|
||||||
cgroup /sys/fs/cgroup tmpfs defaults 0 0
|
|
||||||
cgroup /sys/fs/cgroup/hugetlb cgroup defaults 0 0
|
|
||||||
cgroup /sys/fs/cgroup/memory cgroup defaults 0 0
|
|
||||||
cgroup /sys/fs/cgroup/net_cls cgroup defaults 0 0
|
|
||||||
cgroup /sys/fs/cgroup/perf_event cgroup defaults 0 0
|
|
||||||
cgroup /sys/fs/cgroup/cpu cgroup defaults 0 0
|
|
||||||
cgroup /sys/fs/cgroup/devices cgroup defaults 0 0
|
|
||||||
cgroup /sys/fs/cgroup/pids cgroup defaults 0 0
|
|
||||||
cgroup /sys/fs/cgroup/blkio cgroup defaults 0 0
|
|
||||||
cgroup /sys/fs/cgroup/freezer cgroup defaults 0 0
|
|
||||||
cgroup /sys/fs/cgroup/cpuset cgroup defaults 0 0
|
|
||||||
*/
|
|
||||||
func Mount(s string) error {
|
func Mount(s string) error {
|
||||||
|
|
||||||
target := path.Join(s, "/sys/fs/cgroup")
|
target := path.Join(s, "/sys/fs/cgroup")
|
||||||
if err := os.MkdirAll(target, os.ModeDir); err != nil {
|
if err := os.MkdirAll(target, os.ModeDir); err != nil {
|
||||||
return fmt.Errorf("failed to create %s: %s", target, err.Error())
|
return fmt.Errorf("failed to create %s: %s", target, err.Error())
|
||||||
}
|
}
|
||||||
if err := unix.Mount("defaults", target, "tmpfs", 0, ""); err != nil {
|
if err := unix.Mount("tmpfs", target, "tmpfs", 0, ""); err != nil {
|
||||||
return fmt.Errorf("failed to mount %s: %s", target, err.Error())
|
return fmt.Errorf("failed to mount %s: %s", target, err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := enableMemoryHierarchy(s); err != nil {
|
|
||||||
return fmt.Errorf("failed to enable cgroup memory hierarchy: %s", err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
cgroups := []string{
|
cgroups := []string{
|
||||||
"hugetlb",
|
"hugetlb",
|
||||||
"memory",
|
"memory",
|
||||||
@ -59,14 +43,20 @@ func Mount(s string) error {
|
|||||||
"cpuset",
|
"cpuset",
|
||||||
}
|
}
|
||||||
for _, c := range cgroups {
|
for _, c := range cgroups {
|
||||||
p := path.Join(s, fmt.Sprintf("/sys/fs/cgroup/%s", c))
|
p := path.Join(s, "/sys/fs/cgroup", c)
|
||||||
if err := os.MkdirAll(p, os.ModeDir); err != nil {
|
if err := os.MkdirAll(p, os.ModeDir); err != nil {
|
||||||
return fmt.Errorf("failed to create %s: %s", p, err.Error())
|
return fmt.Errorf("failed to create %s: %s", p, err.Error())
|
||||||
}
|
}
|
||||||
if err := unix.Mount("defaults", p, "cgroup", 0, ""); err != nil {
|
if err := unix.Mount("cgroup", p, "cgroup", 0, ""); err != nil {
|
||||||
return fmt.Errorf("failed to mount %s: %s", p, err.Error())
|
return fmt.Errorf("failed to mount %s: %s", p, err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// See https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt
|
||||||
|
target = path.Join(s, "/sys/fs/cgroup", memoryCgroup, memoryUseHierarchy)
|
||||||
|
if err := ioutil.WriteFile(target, memoryUseHierarchyContents, memoryUseHierarchyPermissions); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user