mirror of
https://github.com/siderolabs/talos.git
synced 2025-08-25 08:31:13 +02:00
65 lines
1.6 KiB
Go
65 lines
1.6 KiB
Go
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
package cgroups
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path"
|
|
"strconv"
|
|
|
|
"golang.org/x/sys/unix"
|
|
)
|
|
|
|
const (
|
|
memoryCgroup = "memory"
|
|
memoryUseHierarchy = "memory.use_hierarchy"
|
|
memoryUseHierarchyPermissions = os.FileMode(400)
|
|
)
|
|
|
|
var (
|
|
memoryUseHierarchyContents = []byte(strconv.Itoa(1))
|
|
)
|
|
|
|
// Mount creates the cgroup mount points.
|
|
func Mount(s string) error {
|
|
target := path.Join(s, "/sys/fs/cgroup")
|
|
if err := os.MkdirAll(target, os.ModeDir); err != nil {
|
|
return fmt.Errorf("failed to create %s: %s", target, err.Error())
|
|
}
|
|
if err := unix.Mount("tmpfs", target, "tmpfs", 0, ""); err != nil {
|
|
return fmt.Errorf("failed to mount %s: %s", target, err.Error())
|
|
}
|
|
|
|
cgroups := []string{
|
|
"hugetlb",
|
|
"memory",
|
|
"net_cls",
|
|
"perf_event",
|
|
"cpu",
|
|
"devices",
|
|
"pids",
|
|
"blkio",
|
|
"freezer",
|
|
"cpuset",
|
|
}
|
|
for _, c := range cgroups {
|
|
p := path.Join(s, "/sys/fs/cgroup", c)
|
|
if err := os.MkdirAll(p, os.ModeDir); err != nil {
|
|
return fmt.Errorf("failed to create %s: %s", p, err.Error())
|
|
}
|
|
if err := unix.Mount("cgroup", p, "cgroup", 0, ""); err != nil {
|
|
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)
|
|
err := ioutil.WriteFile(target, memoryUseHierarchyContents, memoryUseHierarchyPermissions)
|
|
|
|
return err
|
|
}
|