Move cgroup and oom score setting to cmd.
Signed-off-by: Lantao Liu <lantaol@google.com>
This commit is contained in:
@@ -27,6 +27,9 @@ import (
|
||||
"runtime"
|
||||
"syscall"
|
||||
|
||||
"github.com/containerd/cgroups"
|
||||
"github.com/containerd/containerd/sys"
|
||||
runtimespec "github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/opencontainers/selinux/go-selinux"
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/spf13/cobra"
|
||||
@@ -95,6 +98,19 @@ func main() {
|
||||
|
||||
logrus.Infof("Run cri-containerd %+v", o)
|
||||
|
||||
if o.CgroupPath != "" {
|
||||
_, err := loadCgroup(o.CgroupPath)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to load cgroup for cgroup path %v: %v", o.CgroupPath, err)
|
||||
}
|
||||
}
|
||||
|
||||
if o.OOMScore != 0 {
|
||||
if err := sys.SetOOMScore(os.Getpid(), o.OOMScore); err != nil {
|
||||
return fmt.Errorf("failed to set OOMScore to %v: %v", o.OOMScore, err)
|
||||
}
|
||||
}
|
||||
|
||||
// Start profiling server if enable.
|
||||
if o.EnableProfiling {
|
||||
logrus.Info("Start profiling server")
|
||||
@@ -200,3 +216,23 @@ func setGLogLevel(l logrus.Level) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// loadCgroup loads the cgroup associated with path if it exists and moves the current process into the cgroup. If the cgroup
|
||||
// is not created it is created and returned.
|
||||
func loadCgroup(cgroupPath string) (cgroups.Cgroup, error) {
|
||||
cg, err := cgroups.Load(cgroups.V1, cgroups.StaticPath(cgroupPath))
|
||||
if err != nil {
|
||||
if err != cgroups.ErrCgroupDeleted {
|
||||
return nil, err
|
||||
}
|
||||
if cg, err = cgroups.New(cgroups.V1, cgroups.StaticPath(cgroupPath), &runtimespec.LinuxResources{}); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
if err := cg.Add(cgroups.Process{
|
||||
Pid: os.Getpid(),
|
||||
}); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return cg, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user