cgroups

package
v16.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 21, 2023 License: MIT Imports: 17 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func PruneOldCgroups

func PruneOldCgroups(cfg cgroups.Config, logger log.FieldLogger)

PruneOldCgroups prunes old cgroups for both the memory and cpu subsystems

Types

type AddCommandOption

type AddCommandOption func(*addCommandCfg)

AddCommandOption is an option that can be passed to AddCommand.

func WithCgroupKey

func WithCgroupKey(cgroupKey string) AddCommandOption

WithCgroupKey overrides the key used to derive the Cgroup bucket. If not passed, then the command arguments will be used as the cgroup key.

type CGroupManager added in v16.2.0

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

CGroupManager is a manager class that implements specific methods related to cgroups

func (*CGroupManager) AddCommand added in v16.2.0

func (cgm *CGroupManager) AddCommand(cmd *exec.Cmd, opts ...AddCommandOption) (string, error)

AddCommand adds a Cmd to a cgroup

func (*CGroupManager) Cleanup added in v16.2.0

func (cgm *CGroupManager) Cleanup() error

Cleanup cleans up cgroups created in Setup.

func (*CGroupManager) Collect added in v16.2.0

func (cgm *CGroupManager) Collect(ch chan<- prometheus.Metric)

Collect is used to collect the current values of all CGroupManager prometheus metrics

func (*CGroupManager) Describe added in v16.2.0

func (cgm *CGroupManager) Describe(ch chan<- *prometheus.Desc)

Describe is used to generate description information for each CGroupManager prometheus metric

func (*CGroupManager) Ready added in v16.3.0

func (cgm *CGroupManager) Ready() bool

Ready returns true if the Cgroup manager is configured and ready to use.

func (*CGroupManager) Setup added in v16.2.0

func (cgm *CGroupManager) Setup() error

Setup parent cgroups and repository sub cgroups

func (*CGroupManager) Stats added in v16.3.0

func (cgm *CGroupManager) Stats() (Stats, error)

Stats returns cgroup accounting statistics collected by reading cgroupfs files.

type CgroupStats added in v16.3.0

type CgroupStats struct {
	// CPUThrottledCount is much the CPU was throttled, this field is fetched from the `nr_throttled` field of
	// `cpu.stat` file.
	CPUThrottledCount uint64
	// CPUThrottledCount is the accumulated duration of CPU throttled time in seconds. It is from the
	// `throttled_time` (V1) or the `throttled_usec` (v2) field of the `cpu.stat` file.
	CPUThrottledDuration float64
	// MemoryUsage is the current memory usage in bytes of a cgroup. It's fetched from the `memory.usage_in_bytes`
	// (V1) or the `memory.current` (V2) files.
	MemoryUsage uint64
	// MemoryLimit is the current memory limit in bytes of a cgroup. It's from the `memory.limit_in_bytes` (V1) or
	// the `memory.max` (V2) files.
	MemoryLimit uint64
	// OOMKills is the accumulated count when the cgroup is being OOM-ed. It's read from the `memory.oom_control`
	// (V1) and the `memory.events` (V2) files.
	OOMKills uint64
	// UnderOOM is the current OOM status of a cgroup. This information is available for Cgroup V1 only. It's read
	// from the `memory.oom_control` file.
	UnderOOM bool
}

CgroupStats stores the current usage statistics of the resources managed by cgroup manager. They are fetched from the cgroupfs statistic files.

type Manager

type Manager interface {
	// Setup creates cgroups and assigns configured limitations.
	// It is expected to be called once at Gitaly startup from any
	// instance of the Manager.
	Setup() error
	// Ready returns true if this cgroup manager is configured and
	// ready to use.
	Ready() bool
	// AddCommand adds a Cmd to a cgroup.
	AddCommand(*exec.Cmd, ...AddCommandOption) (string, error)
	// Cleanup cleans up cgroups created in Setup.
	// It is expected to be called once at Gitaly shutdown from any
	// instance of the Manager.
	Cleanup() error
	// Stats returns cgroup accounting statistics collected by reading
	// cgroupfs files. Those statistics are generic for both Cgroup V1
	// and Cgroup V2.
	Stats() (Stats, error)
	Describe(ch chan<- *prometheus.Desc)
	Collect(ch chan<- prometheus.Metric)
}

Manager supplies an interface for interacting with cgroups

func NewManager

func NewManager(cfg cgroups.Config, pid int) Manager

NewManager returns the appropriate Cgroups manager

type NoopManager

type NoopManager struct{}

NoopManager is a cgroups manager that does nothing

func (*NoopManager) AddCommand

func (cg *NoopManager) AddCommand(*exec.Cmd, ...AddCommandOption) (string, error)

func (*NoopManager) Cleanup

func (cg *NoopManager) Cleanup() error

func (*NoopManager) Collect

func (cg *NoopManager) Collect(ch chan<- prometheus.Metric)

Collect does nothing

func (*NoopManager) Describe

func (cg *NoopManager) Describe(ch chan<- *prometheus.Desc)

Describe does nothing

func (*NoopManager) Ready added in v16.3.0

func (cg *NoopManager) Ready() bool

func (*NoopManager) Setup

func (cg *NoopManager) Setup() error

func (*NoopManager) Stats added in v16.3.0

func (cg *NoopManager) Stats() (Stats, error)

type Stats added in v16.3.0

type Stats struct {
	// ParentStats stores the statistics of the parent cgroup. There should be
	// an array of per-repository cgroups, but we haven't used that information
	// yet.
	ParentStats CgroupStats
}

Stats stores statistics of all cgroups managed by a manager

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL