runc: github.com/opencontainers/runc/libcontainer/cgroups Index | Files | Directories

package cgroups

import "github.com/opencontainers/runc/libcontainer/cgroups"

Index

Package Files

cgroups.go stats.go utils.go

Constants

const (
    CgroupNamePrefix = "name="
    CgroupProcesses  = "cgroup.procs"
)

Variables

var HugePageSizeUnitList = []string{"B", "KB", "MB", "GB", "TB", "PB"}

HugePageSizeUnitList is a list of the units used by the linux kernel when naming the HugePage control files. https://www.kernel.org/doc/Documentation/cgroup-v1/hugetlb.txt TODO Since the kernel only use KB, MB and GB; TB and PB should be removed, depends on https://github.com/docker/go-units/commit/a09cd47f892041a4fac473133d181f5aea6fa393

func ConvertBlkIOToCgroupV2Value Uses

func ConvertBlkIOToCgroupV2Value(blkIoWeight uint16) uint64

Since the OCI spec is designed for cgroup v1, in some cases there is need to convert from the cgroup v1 configuration to cgroup v2 the formula for BlkIOWeight is y = (1 + (x - 10) * 9999 / 990) convert linearly from [10-1000] to [1-10000]

func ConvertCPUQuotaCPUPeriodToCgroupV2Value Uses

func ConvertCPUQuotaCPUPeriodToCgroupV2Value(quota int64, period uint64) string

ConvertCPUQuotaCPUPeriodToCgroupV2Value generates cpu.max string.

func ConvertCPUSharesToCgroupV2Value Uses

func ConvertCPUSharesToCgroupV2Value(cpuShares uint64) uint64

Since the OCI spec is designed for cgroup v1, in some cases there is need to convert from the cgroup v1 configuration to cgroup v2 the formula for cpuShares is y = (1 + ((x - 2) * 9999) / 262142) convert from [2-262144] to [1-10000] 262144 comes from Linux kernel definition "#define MAX_SHARES (1UL << 18)"

func ConvertMemorySwapToCgroupV2Value Uses

func ConvertMemorySwapToCgroupV2Value(memorySwap, memory int64) (int64, error)

ConvertMemorySwapToCgroupV2Value converts MemorySwap value from OCI spec for use by cgroup v2 drivers. A conversion is needed since Resources.MemorySwap is defined as memory+swap combined, while in cgroup v2 swap is a separate value.

func EnterPid Uses

func EnterPid(cgroupPaths map[string]string, pid int) error

func FindCgroupMountpoint Uses

func FindCgroupMountpoint(cgroupPath, subsystem string) (string, error)

https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt

func FindCgroupMountpointAndRoot Uses

func FindCgroupMountpointAndRoot(cgroupPath, subsystem string) (string, string, error)

func FindCgroupMountpointDir Uses

func FindCgroupMountpointDir() (string, error)

func GetAllPids Uses

func GetAllPids(path string) ([]int, error)

GetAllPids returns all pids, that were added to cgroup at path and to all its subcgroups.

func GetAllSubsystems Uses

func GetAllSubsystems() ([]string, error)

GetAllSubsystems returns all the cgroup subsystems supported by the kernel

func GetHugePageSize Uses

func GetHugePageSize() ([]string, error)

func GetInitCgroup Uses

func GetInitCgroup(subsystem string) (string, error)

func GetInitCgroupPath Uses

func GetInitCgroupPath(subsystem string) (string, error)

func GetOwnCgroup Uses

func GetOwnCgroup(subsystem string) (string, error)

GetOwnCgroup returns the relative path to the cgroup docker is running in.

func GetOwnCgroupPath Uses

func GetOwnCgroupPath(subsystem string) (string, error)

func GetPids Uses

func GetPids(dir string) ([]int, error)

GetPids returns all pids, that were added to cgroup at path.

func IsCgroup2UnifiedMode Uses

func IsCgroup2UnifiedMode() bool

IsCgroup2UnifiedMode returns whether we are running in cgroup v2 unified mode.

func IsNotFound Uses

func IsNotFound(err error) bool

func NewNotFoundError Uses

func NewNotFoundError(sub string) error

func ParseCgroupFile Uses

func ParseCgroupFile(path string) (map[string]string, error)

ParseCgroupFile parses the given cgroup file, typically from /proc/<pid>/cgroup, into a map of subgroups to cgroup names.

func PathExists Uses

func PathExists(path string) bool

func RemovePaths Uses

func RemovePaths(paths map[string]string) (err error)

RemovePaths iterates over the provided paths removing them. We trying to remove all paths five times with increasing delay between tries. If after all there are not removed cgroups - appropriate error will be returned.

func WriteCgroupProc Uses

func WriteCgroupProc(dir string, pid int) error

WriteCgroupProc writes the specified pid into the cgroup's cgroup.procs file

type BlkioStatEntry Uses

type BlkioStatEntry struct {
    Major uint64 `json:"major,omitempty"`
    Minor uint64 `json:"minor,omitempty"`
    Op    string `json:"op,omitempty"`
    Value uint64 `json:"value,omitempty"`
}

type BlkioStats Uses

type BlkioStats struct {
    // number of bytes tranferred to and from the block device
    IoServiceBytesRecursive []BlkioStatEntry `json:"io_service_bytes_recursive,omitempty"`
    IoServicedRecursive     []BlkioStatEntry `json:"io_serviced_recursive,omitempty"`
    IoQueuedRecursive       []BlkioStatEntry `json:"io_queue_recursive,omitempty"`
    IoServiceTimeRecursive  []BlkioStatEntry `json:"io_service_time_recursive,omitempty"`
    IoWaitTimeRecursive     []BlkioStatEntry `json:"io_wait_time_recursive,omitempty"`
    IoMergedRecursive       []BlkioStatEntry `json:"io_merged_recursive,omitempty"`
    IoTimeRecursive         []BlkioStatEntry `json:"io_time_recursive,omitempty"`
    SectorsRecursive        []BlkioStatEntry `json:"sectors_recursive,omitempty"`
}

type CpuStats Uses

type CpuStats struct {
    CpuUsage       CpuUsage       `json:"cpu_usage,omitempty"`
    ThrottlingData ThrottlingData `json:"throttling_data,omitempty"`
}

type CpuUsage Uses

type CpuUsage struct {
    // Total CPU time consumed.
    // Units: nanoseconds.
    TotalUsage uint64 `json:"total_usage,omitempty"`
    // Total CPU time consumed per core.
    // Units: nanoseconds.
    PercpuUsage []uint64 `json:"percpu_usage,omitempty"`
    // CPU time consumed per core in kernel mode
    // Units: nanoseconds.
    PercpuUsageInKernelmode []uint64 `json:"percpu_usage_in_kernelmode"`
    // CPU time consumed per core in user mode
    // Units: nanoseconds.
    PercpuUsageInUsermode []uint64 `json:"percpu_usage_in_usermode"`
    // Time spent by tasks of the cgroup in kernel mode.
    // Units: nanoseconds.
    UsageInKernelmode uint64 `json:"usage_in_kernelmode"`
    // Time spent by tasks of the cgroup in user mode.
    // Units: nanoseconds.
    UsageInUsermode uint64 `json:"usage_in_usermode"`
}

CpuUsage denotes the usage of a CPU. All CPU stats are aggregate since container inception.

type HugetlbStats Uses

type HugetlbStats struct {
    // current res_counter usage for hugetlb
    Usage uint64 `json:"usage,omitempty"`
    // maximum usage ever recorded.
    MaxUsage uint64 `json:"max_usage,omitempty"`
    // number of times hugetlb usage allocation failure.
    Failcnt uint64 `json:"failcnt"`
}

type Manager Uses

type Manager interface {
    // Applies cgroup configuration to the process with the specified pid
    Apply(pid int) error

    // Returns the PIDs inside the cgroup set
    GetPids() ([]int, error)

    // Returns the PIDs inside the cgroup set & all sub-cgroups
    GetAllPids() ([]int, error)

    // Returns statistics for the cgroup set
    GetStats() (*Stats, error)

    // Toggles the freezer cgroup according with specified state
    Freeze(state configs.FreezerState) error

    // Destroys the cgroup set
    Destroy() error

    // Path returns a cgroup path to the specified controller/subsystem.
    // For cgroupv2, the argument is unused and can be empty.
    Path(string) string

    // Sets the cgroup as configured.
    Set(container *configs.Config) error

    // GetPaths returns cgroup path(s) to save in a state file in order to restore later.
    //
    // For cgroup v1, a key is cgroup subsystem name, and the value is the path
    // to the cgroup for this subsystem.
    //
    // For cgroup v2 unified hierarchy, a key is "", and the value is the unified path.
    GetPaths() map[string]string

    // GetCgroups returns the cgroup data as configured.
    GetCgroups() (*configs.Cgroup, error)

    // GetFreezerState retrieves the current FreezerState of the cgroup.
    GetFreezerState() (configs.FreezerState, error)
}

type MemoryData Uses

type MemoryData struct {
    Usage    uint64 `json:"usage,omitempty"`
    MaxUsage uint64 `json:"max_usage,omitempty"`
    Failcnt  uint64 `json:"failcnt"`
    Limit    uint64 `json:"limit"`
}

type MemoryStats Uses

type MemoryStats struct {
    // memory used for cache
    Cache uint64 `json:"cache,omitempty"`
    // usage of memory
    Usage MemoryData `json:"usage,omitempty"`
    // usage of memory + swap
    SwapUsage MemoryData `json:"swap_usage,omitempty"`
    // usage of kernel memory
    KernelUsage MemoryData `json:"kernel_usage,omitempty"`
    // usage of kernel TCP memory
    KernelTCPUsage MemoryData `json:"kernel_tcp_usage,omitempty"`
    // usage of memory pages by NUMA node
    // see chapter 5.6 of memory controller documentation
    PageUsageByNUMA PageUsageByNUMA `json:"page_usage_by_numa,omitempty"`
    // if true, memory usage is accounted for throughout a hierarchy of cgroups.
    UseHierarchy bool `json:"use_hierarchy"`

    Stats map[string]uint64 `json:"stats,omitempty"`
}

type Mount Uses

type Mount struct {
    Mountpoint string
    Root       string
    Subsystems []string
}

func GetCgroupMounts Uses

func GetCgroupMounts(all bool) ([]Mount, error)

GetCgroupMounts returns the mounts for the cgroup subsystems. all indicates whether to return just the first instance or all the mounts.

func (Mount) GetOwnCgroup Uses

func (m Mount) GetOwnCgroup(cgroups map[string]string) (string, error)

type NotFoundError Uses

type NotFoundError struct {
    Subsystem string
}

func (*NotFoundError) Error Uses

func (e *NotFoundError) Error() string

type PageStats Uses

type PageStats struct {
    Total uint64           `json:"total,omitempty"`
    Nodes map[uint8]uint64 `json:"nodes,omitempty"`
}

type PageUsageByNUMA Uses

type PageUsageByNUMA struct {
    // Embedding is used as types can't be recursive.
    PageUsageByNUMAInner
    Hierarchical PageUsageByNUMAInner `json:"hierarchical,omitempty"`
}

type PageUsageByNUMAInner Uses

type PageUsageByNUMAInner struct {
    Total       PageStats `json:"total,omitempty"`
    File        PageStats `json:"file,omitempty"`
    Anon        PageStats `json:"anon,omitempty"`
    Unevictable PageStats `json:"unevictable,omitempty"`
}

type PidsStats Uses

type PidsStats struct {
    // number of pids in the cgroup
    Current uint64 `json:"current,omitempty"`
    // active pids hard limit
    Limit uint64 `json:"limit,omitempty"`
}

type Stats Uses

type Stats struct {
    CpuStats    CpuStats    `json:"cpu_stats,omitempty"`
    MemoryStats MemoryStats `json:"memory_stats,omitempty"`
    PidsStats   PidsStats   `json:"pids_stats,omitempty"`
    BlkioStats  BlkioStats  `json:"blkio_stats,omitempty"`
    // the map is in the format "size of hugepage: stats of the hugepage"
    HugetlbStats map[string]HugetlbStats `json:"hugetlb_stats,omitempty"`
}

func NewStats Uses

func NewStats() *Stats

type ThrottlingData Uses

type ThrottlingData struct {
    // Number of periods with throttling active
    Periods uint64 `json:"periods,omitempty"`
    // Number of periods when the container hit its throttling limit.
    ThrottledPeriods uint64 `json:"throttled_periods,omitempty"`
    // Aggregate time the container was throttled for in nanoseconds.
    ThrottledTime uint64 `json:"throttled_time,omitempty"`
}

Directories

PathSynopsis
ebpf
ebpf/devicefilterPackage devicefilter containes eBPF device filter program
fs
fs2
fscommon
systemd

Package cgroups imports 14 packages (graph) and is imported by 1828 packages. Updated 2020-06-01. Refresh now. Tools for package owners.