mirror of
https://github.com/opencontainers/runc.git
synced 2026-07-11 06:03:57 +08:00
c1adc99a20
In manager.Apply() method, a path to each subsystem is obtained by calling d.path(sys.Name()), and the sys.Apply() is called that does the same call to d.path() again. d.path() is an expensive call, so rather than to call it twice, let's reuse the result. This results the number of times we parse mountinfo during container start from 62 to 34 on my setup. Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
41 lines
873 B
Go
41 lines
873 B
Go
// +build linux
|
|
|
|
package fs
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"github.com/opencontainers/runc/libcontainer/cgroups"
|
|
"github.com/opencontainers/runc/libcontainer/cgroups/fscommon"
|
|
"github.com/opencontainers/runc/libcontainer/configs"
|
|
)
|
|
|
|
type NetClsGroup struct {
|
|
}
|
|
|
|
func (s *NetClsGroup) Name() string {
|
|
return "net_cls"
|
|
}
|
|
|
|
func (s *NetClsGroup) Apply(path string, d *cgroupData) error {
|
|
return join(path, d.pid)
|
|
}
|
|
|
|
func (s *NetClsGroup) Set(path string, cgroup *configs.Cgroup) error {
|
|
if cgroup.Resources.NetClsClassid != 0 {
|
|
if err := fscommon.WriteFile(path, "net_cls.classid", strconv.FormatUint(uint64(cgroup.Resources.NetClsClassid), 10)); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (s *NetClsGroup) Remove(d *cgroupData) error {
|
|
return removePath(d.path("net_cls"))
|
|
}
|
|
|
|
func (s *NetClsGroup) GetStats(path string, stats *cgroups.Stats) error {
|
|
return nil
|
|
}
|