12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- package cgroups
- import (
- "fmt"
- specs "github.com/opencontainers/runtime-spec/specs-go"
- )
- // Name is a typed name for a cgroup subsystem
- type Name string
- const (
- Devices Name = "devices"
- Hugetlb Name = "hugetlb"
- Freezer Name = "freezer"
- Pids Name = "pids"
- NetCLS Name = "net_cls"
- NetPrio Name = "net_prio"
- PerfEvent Name = "perf_event"
- Cpuset Name = "cpuset"
- Cpu Name = "cpu"
- Cpuacct Name = "cpuacct"
- Memory Name = "memory"
- Blkio Name = "blkio"
- )
- // Subsystems returns a complete list of the default cgroups
- // avaliable on most linux systems
- func Subsystems() []Name {
- n := []Name{
- Hugetlb,
- Freezer,
- Pids,
- NetCLS,
- NetPrio,
- PerfEvent,
- Cpuset,
- Cpu,
- Cpuacct,
- Memory,
- Blkio,
- }
- if !isUserNS {
- n = append(n, Devices)
- }
- return n
- }
- type Subsystem interface {
- Name() Name
- }
- type pather interface {
- Subsystem
- Path(path string) string
- }
- type creator interface {
- Subsystem
- Create(path string, resources *specs.LinuxResources) error
- }
- type deleter interface {
- Subsystem
- Delete(path string) error
- }
- type stater interface {
- Subsystem
- Stat(path string, stats *Metrics) error
- }
- type updater interface {
- Subsystem
- Update(path string, resources *specs.LinuxResources) error
- }
- // SingleSubsystem returns a single cgroup subsystem within the base Hierarchy
- func SingleSubsystem(baseHierarchy Hierarchy, subsystem Name) Hierarchy {
- return func() ([]Subsystem, error) {
- subsystems, err := baseHierarchy()
- if err != nil {
- return nil, err
- }
- for _, s := range subsystems {
- if s.Name() == subsystem {
- return []Subsystem{
- s,
- }, nil
- }
- }
- return nil, fmt.Errorf("unable to find subsystem %s", subsystem)
- }
- }
|