Lightweight Kubernetes
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
Darren Shepherd 661988fb38 Update vendor 5 years ago
..
.gitignore Update vendor 6 years ago
.travis.yml Update vendor 5 years ago
LICENSE Update vendor 6 years ago
Makefile Update vendor 5 years ago
Protobuild.toml Update vendor 6 years ago
README.md Update vendor 6 years ago
blkio.go Update vendor 5 years ago
cgroup.go Update vendor 5 years ago
control.go Update vendor 6 years ago
cpu.go Update vendor 6 years ago
cpuacct.go Update vendor 6 years ago
cpuset.go Update vendor 6 years ago
devices.go Update vendor 6 years ago
errors.go Update vendor 6 years ago
freezer.go Update vendor 6 years ago
hierarchy.go Update vendor 6 years ago
hugetlb.go Update vendor 6 years ago
memory.go Update vendor 5 years ago
metrics.pb.go Update vendor 5 years ago
metrics.pb.txt Update vendor 5 years ago
metrics.proto Update vendor 5 years ago
named.go Update vendor 6 years ago
net_cls.go Update vendor 6 years ago
net_prio.go Update vendor 6 years ago
opts.go Update vendor 6 years ago
paths.go Update vendor 6 years ago
perf_event.go Update vendor 6 years ago
pids.go Update vendor 6 years ago
rdma.go Update vendor 6 years ago
state.go Update vendor 6 years ago
subsystem.go Update vendor 6 years ago
systemd.go Update vendor 6 years ago
ticks.go Update vendor 6 years ago
utils.go Update vendor 5 years ago
v1.go Update vendor 6 years ago

README.md

cgroups

Build Status codecov GoDoc Go Report Card

Go package for creating, managing, inspecting, and destroying cgroups. The resources format for settings on the cgroup uses the OCI runtime-spec found here.

Examples

Create a new cgroup

This creates a new cgroup using a static path for all subsystems under /test.

  • /sys/fs/cgroup/cpu/test
  • /sys/fs/cgroup/memory/test
  • etc....

It uses a single hierarchy and specifies cpu shares as a resource constraint and uses the v1 implementation of cgroups.

shares := uint64(100)
control, err := cgroups.New(cgroups.V1, cgroups.StaticPath("/test"), &specs.LinuxResources{
    CPU: &specs.CPU{
        Shares: &shares,
    },
})
defer control.Delete()

Create with systemd slice support

control, err := cgroups.New(cgroups.Systemd, cgroups.Slice("system.slice", "runc-test"), &specs.LinuxResources{
    CPU: &specs.CPU{
        Shares: &shares,
    },
})

Load an existing cgroup

control, err = cgroups.Load(cgroups.V1, cgroups.StaticPath("/test"))

Add a process to the cgroup

if err := control.Add(cgroups.Process{Pid:1234}); err != nil {
}

Update the cgroup

To update the resources applied in the cgroup

shares = uint64(200)
if err := control.Update(&specs.LinuxResources{
    CPU: &specs.CPU{
        Shares: &shares,
    },
}); err != nil {
}

Freeze and Thaw the cgroup

if err := control.Freeze(); err != nil {
}
if err := control.Thaw(); err != nil {
}

List all processes in the cgroup or recursively

processes, err := control.Processes(cgroups.Devices, recursive)

Get Stats on the cgroup

stats, err := control.Stat()

By adding cgroups.IgnoreNotExist all non-existent files will be ignored, e.g. swap memory stats without swap enabled

stats, err := control.Stat(cgroups.IgnoreNotExist)

Move process across cgroups

This allows you to take processes from one cgroup and move them to another.

err := control.MoveTo(destination)

Create subcgroup

subCgroup, err := control.New("child", resources)

Project details

Cgroups is a containerd sub-project, licensed under the Apache 2.0 license. As a containerd sub-project, you will find the:

information in our containerd/project repository.