var ( ErrInvalidFormat = errors.New("cgroups: parsing file with invalid format failed") ErrInvalidGroupPath = errors.New("cgroups: invalid group path") )
func DeviceFilter(devices []specs.LinuxDeviceCgroup) (asm.Instructions, string, error)
DeviceFilter returns eBPF device filter program and its license string
func LoadAttachCgroupDeviceFilter(insts asm.Instructions, license string, dirFD int) (func() error, error)
LoadAttachCgroupDeviceFilter installs eBPF device filter program to /sys/fs/cgroup/<foo> directory.
Requires the system to be running in cgroup2 unified-mode with kernel >= 4.15 .
https://github.com/torvalds/linux/commit/ebc614f687369f9df99828572b1d85a7c2de3d92
func NestedGroupPath(suffix string) (string, error)
NestedGroupPath will nest the cgroups based on the calling processes cgroup placing its child processes inside its own path
func PidGroupPath(pid int) (string, error)
PidGroupPath will return the correct cgroup paths for an existing process running inside a cgroup This is commonly used for the Load function to restore an existing container
func VerifyGroupPath(g string) error
VerifyGroupPath verifies the format of group path string g. The format is same as the third field in /proc/PID/cgroup. e.g. "/user.slice/user-1001.slice/session-1.scope"
g must be a "clean" absolute path starts with "/", and must not contain "/sys/fs/cgroup" prefix.
VerifyGroupPath doesn't verify whether g actually exists on the system.
type BFQ struct { Weight uint16 }
type CPU struct { Weight *uint64 Max CPUMax Cpus string Mems string }
func (r *CPU) Values() (o []Value)
type CPUMax string
func NewCPUMax(quota *int64, period *uint64) CPUMax
type ControllerToggle int
const ( Enable ControllerToggle = iota + 1 Disable )
type Entry struct { Type IOType Major int64 Minor int64 Rate uint64 }
func (e Entry) String() string
type Event struct { Low uint64 High uint64 Max uint64 OOM uint64 OOMKill uint64 }
type HugeTlb []HugeTlbEntry
func (r *HugeTlb) Values() (o []Value)
type HugeTlbEntry struct { HugePageSize string Limit uint64 }
type IO struct { BFQ BFQ Max []Entry }
func (i *IO) Values() (o []Value)
type IOType string
const ( ReadBPS IOType = "rbps" WriteBPS IOType = "wbps" ReadIOPS IOType = "riops" WriteIOPS IOType = "wiops" )
type Manager struct {
// contains filtered or unexported fields
}
func LoadManager(mountpoint string, group string) (*Manager, error)
func LoadSystemd(slice, group string) (*Manager, error)
func NewManager(mountpoint string, group string, resources *Resources) (*Manager, error)
func NewSystemd(slice, group string, pid int, resources *Resources) (*Manager, error)
func (c *Manager) AddProc(pid uint64) error
func (c *Manager) AddThread(tid uint64) error
func (c *Manager) Controllers() ([]string, error)
func (c *Manager) Delete() error
func (c *Manager) DeleteSystemd() error
func (c *Manager) EventChan() (<-chan Event, <-chan error)
func (c *Manager) Freeze() error
func (c *Manager) MemoryEventFD() (int, uint32, error)
MemoryEventFD returns inotify file descriptor and 'memory.events' inotify watch descriptor
func (c *Manager) MoveTo(destination *Manager) error
func (c *Manager) NewChild(name string, resources *Resources) (*Manager, error)
func (c *Manager) Procs(recursive bool) ([]uint64, error)
func (c *Manager) RootControllers() ([]string, error)
func (c *Manager) Stat() (*stats.Metrics, error)
func (c *Manager) Thaw() error
func (c *Manager) ToggleControllers(controllers []string, t ControllerToggle) error
func (c *Manager) Update(resources *Resources) error
type Memory struct { Swap *int64 Min *int64 Max *int64 Low *int64 High *int64 }
func (r *Memory) Values() (o []Value)
type Pids struct { Max int64 }
func (r *Pids) Values() (o []Value)
type RDMA struct { Limit []RDMAEntry }
func (r *RDMA) Values() (o []Value)
type RDMAEntry struct { Device string HcaHandles uint32 HcaObjects uint32 }
func (r RDMAEntry) String() string
Resources for a cgroups v2 unified hierarchy
type Resources struct { CPU *CPU Memory *Memory Pids *Pids IO *IO RDMA *RDMA HugeTlb *HugeTlb // When len(Devices) is zero, devices are not controlled Devices []specs.LinuxDeviceCgroup }
func ToResources(spec *specs.LinuxResources) *Resources
ToResources converts the oci LinuxResources struct into a v2 Resources type for use with this package.
converting cgroups configuration from v1 to v2 ref: https://github.com/containers/crun/blob/master/crun.1.md#cgroup-v2
func (r *Resources) EnabledControllers() (c []string)
EnabledControllers returns the list of all not nil resource controllers
func (r *Resources) Values() (o []Value)
Values returns the raw filenames and values that can be written to the unified hierarchy
State is a type that represents the state of the current cgroup
type State string
const ( Unknown State = "" Thawed State = "thawed" Frozen State = "frozen" Deleted State = "deleted" )
func (s State) Values() []Value
Value of a cgroup setting
type Value struct {
// contains filtered or unexported fields
}