...

Package v2

import "github.com/containerd/cgroups/v2"
Overview
Index
Subdirectories

Overview ▾

Index ▾

Variables
func DeviceFilter(devices []specs.LinuxDeviceCgroup) (asm.Instructions, string, error)
func LoadAttachCgroupDeviceFilter(insts asm.Instructions, license string, dirFD int) (func() error, error)
func NestedGroupPath(suffix string) (string, error)
func PidGroupPath(pid int) (string, error)
func VerifyGroupPath(g string) error
type BFQ
type CPU
    func (r *CPU) Values() (o []Value)
type CPUMax
    func NewCPUMax(quota *int64, period *uint64) CPUMax
type ControllerToggle
type Entry
    func (e Entry) String() string
type Event
type HugeTlb
    func (r *HugeTlb) Values() (o []Value)
type HugeTlbEntry
type IO
    func (i *IO) Values() (o []Value)
type IOType
type Manager
    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)
    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
    func (r *Memory) Values() (o []Value)
type Pids
    func (r *Pids) Values() (o []Value)
type RDMA
    func (r *RDMA) Values() (o []Value)
type RDMAEntry
    func (r RDMAEntry) String() string
type Resources
    func ToResources(spec *specs.LinuxResources) *Resources
    func (r *Resources) EnabledControllers() (c []string)
    func (r *Resources) Values() (o []Value)
type State
    func (s State) Values() []Value
type Value

Package files

cpu.go devicefilter.go ebpf.go errors.go hugetlb.go io.go manager.go memory.go paths.go pids.go rdma.go state.go utils.go

Variables

var (
    ErrInvalidFormat    = errors.New("cgroups: parsing file with invalid format failed")
    ErrInvalidGroupPath = errors.New("cgroups: invalid group path")
)

func DeviceFilter

func DeviceFilter(devices []specs.LinuxDeviceCgroup) (asm.Instructions, string, error)

DeviceFilter returns eBPF device filter program and its license string

func LoadAttachCgroupDeviceFilter

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

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

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

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

type BFQ struct {
    Weight uint16
}

type CPU

type CPU struct {
    Weight *uint64
    Max    CPUMax
    Cpus   string
    Mems   string
}

func (*CPU) Values

func (r *CPU) Values() (o []Value)

type CPUMax

type CPUMax string

func NewCPUMax

func NewCPUMax(quota *int64, period *uint64) CPUMax

type ControllerToggle

type ControllerToggle int
const (
    Enable ControllerToggle = iota + 1
    Disable
)

type Entry

type Entry struct {
    Type  IOType
    Major int64
    Minor int64
    Rate  uint64
}

func (Entry) String

func (e Entry) String() string

type Event

type Event struct {
    Low     uint64
    High    uint64
    Max     uint64
    OOM     uint64
    OOMKill uint64
}

type HugeTlb

type HugeTlb []HugeTlbEntry

func (*HugeTlb) Values

func (r *HugeTlb) Values() (o []Value)

type HugeTlbEntry

type HugeTlbEntry struct {
    HugePageSize string
    Limit        uint64
}

type IO

type IO struct {
    BFQ BFQ
    Max []Entry
}

func (*IO) Values

func (i *IO) Values() (o []Value)

type IOType

type IOType string
const (
    ReadBPS   IOType = "rbps"
    WriteBPS  IOType = "wbps"
    ReadIOPS  IOType = "riops"
    WriteIOPS IOType = "wiops"
)

type Manager

type Manager struct {
    // contains filtered or unexported fields
}

func LoadManager

func LoadManager(mountpoint string, group string) (*Manager, error)

func LoadSystemd

func LoadSystemd(slice, group string) (*Manager, error)

func NewManager

func NewManager(mountpoint string, group string, resources *Resources) (*Manager, error)

func NewSystemd

func NewSystemd(slice, group string, pid int, resources *Resources) (*Manager, error)

func (*Manager) AddProc

func (c *Manager) AddProc(pid uint64) error

func (*Manager) AddThread

func (c *Manager) AddThread(tid uint64) error

func (*Manager) Controllers

func (c *Manager) Controllers() ([]string, error)

func (*Manager) Delete

func (c *Manager) Delete() error

func (*Manager) DeleteSystemd

func (c *Manager) DeleteSystemd() error

func (*Manager) EventChan

func (c *Manager) EventChan() (<-chan Event, <-chan error)

func (*Manager) Freeze

func (c *Manager) Freeze() error

func (*Manager) MemoryEventFD

func (c *Manager) MemoryEventFD() (int, uint32, error)

MemoryEventFD returns inotify file descriptor and 'memory.events' inotify watch descriptor

func (*Manager) MoveTo

func (c *Manager) MoveTo(destination *Manager) error

func (*Manager) NewChild

func (c *Manager) NewChild(name string, resources *Resources) (*Manager, error)

func (*Manager) Procs

func (c *Manager) Procs(recursive bool) ([]uint64, error)

func (*Manager) RootControllers

func (c *Manager) RootControllers() ([]string, error)

func (*Manager) Stat

func (c *Manager) Stat() (*stats.Metrics, error)

func (*Manager) Thaw

func (c *Manager) Thaw() error

func (*Manager) ToggleControllers

func (c *Manager) ToggleControllers(controllers []string, t ControllerToggle) error

func (*Manager) Update

func (c *Manager) Update(resources *Resources) error

type Memory

type Memory struct {
    Swap *int64
    Min  *int64
    Max  *int64
    Low  *int64
    High *int64
}

func (*Memory) Values

func (r *Memory) Values() (o []Value)

type Pids

type Pids struct {
    Max int64
}

func (*Pids) Values

func (r *Pids) Values() (o []Value)

type RDMA

type RDMA struct {
    Limit []RDMAEntry
}

func (*RDMA) Values

func (r *RDMA) Values() (o []Value)

type RDMAEntry

type RDMAEntry struct {
    Device     string
    HcaHandles uint32
    HcaObjects uint32
}

func (RDMAEntry) String

func (r RDMAEntry) String() string

type Resources

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

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 (*Resources) EnabledControllers

func (r *Resources) EnabledControllers() (c []string)

EnabledControllers returns the list of all not nil resource controllers

func (*Resources) Values

func (r *Resources) Values() (o []Value)

Values returns the raw filenames and values that can be written to the unified hierarchy

type State

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 (State) Values

func (s State) Values() []Value

type Value

Value of a cgroup setting

type Value struct {
    // contains filtered or unexported fields
}

Subdirectories

Name Synopsis
..
stats