Documentation ¶
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
- type CPUMax
- type CgroupType
- type ControllerToggle
- type Entry
- type Event
- type HugeTlb
- type HugeTlbEntry
- type IO
- type IOType
- type InitConfig
- type InitOpts
- type Manager
- 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) GetType() (CgroupType, error)
- func (c *Manager) Kill() 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) SetType(cgType CgroupType) error
- func (c *Manager) Stat() (*stats.Metrics, error)
- func (c *Manager) Thaw() error
- func (c *Manager) Threads(recursive bool) ([]uint64, error)
- func (c *Manager) ToggleControllers(controllers []string, t ControllerToggle) error
- func (c *Manager) Update(resources *Resources) error
- type Memory
- type Pids
- type RDMA
- type RDMAEntry
- type Resources
- type State
- type Value
Constants ¶
This section is empty.
Variables ¶
var ( ErrInvalidFormat = errors.New("cgroups: parsing file with invalid format failed") ErrInvalidGroupPath = errors.New("cgroups: invalid group path") )
Functions ¶
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 ¶
NestedGroupPath will nest the cgroups based on the calling processes cgroup placing its child processes inside its own path
func PidGroupPath ¶
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 ¶
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.
Types ¶
type CgroupType ¶
type CgroupType string
CgroupType represents the types a cgroup can be.
const ( Domain CgroupType = "domain" Threaded CgroupType = "threaded" )
type ControllerToggle ¶
type ControllerToggle int
const ( Enable ControllerToggle = iota + 1 Disable )
type HugeTlb ¶
type HugeTlb []HugeTlbEntry
type HugeTlbEntry ¶
type InitConfig ¶
type InitConfig struct {
// contains filtered or unexported fields
}
type InitOpts ¶
type InitOpts func(c *InitConfig) error
func WithMountpoint ¶
WithMountpoint sets the unified mountpoint. The default path is /sys/fs/cgroup.
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
func LoadSystemd ¶
func NewManager ¶
func NewSystemd ¶
func (*Manager) Controllers ¶
func (*Manager) DeleteSystemd ¶
func (*Manager) GetType ¶
func (c *Manager) GetType() (CgroupType, error)
func (*Manager) Kill ¶
Kill will try to forcibly exit all of the processes in the cgroup. This is equivalent to sending a SIGKILL to every process. On kernels 5.14 and greater this will use the cgroup.kill file, on anything that doesn't have the cgroup.kill file, a manual process of freezing -> sending a SIGKILL to every process -> thawing will be used.
func (*Manager) MemoryEventFD ¶
MemoryEventFD returns inotify file descriptor and 'memory.events' inotify watch descriptor
func (*Manager) RootControllers ¶
func (*Manager) SetType ¶
func (c *Manager) SetType(cgType CgroupType) error
func (*Manager) ToggleControllers ¶
func (c *Manager) ToggleControllers(controllers []string, t ControllerToggle) error
type Resources ¶
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 }
Resources for a cgroups v2 unified hierarchy
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 ¶
EnabledControllers returns the list of all not nil resource controllers