386b06eacd
Relevant changes: - containerd/containerd#51 Fix empty device type - containerd/containerd#52 Remove call to unitName - Calling unitName incorrectly appends -slice onto the end of the slice cgroup we are looking for - addresses containerd/containerd#47 cgroups: cgroup deleted - containerd/containerd#53 systemd-239+ no longer allows delegate slice - containerd/containerd#54 Bugfix: can't write to cpuset cgroup - containerd/containerd#63 Makes Load function more lenient on subsystems' checking - addresses containerd/containerd#58 Very strict checking of subsystems' existence while loading cgroup - containerd/containerd#67 Add functionality for retrieving all tasks of a cgroup - containerd/containerd#68 Fix net_prio typo - containerd/containerd#69 Blkio weight/leafWeight pointer value - containerd/containerd#77 Check for non-active/supported cgroups - addresses containerd/containerd#76 unable to find * in controller set: unknown - addresses docker/for-linux#545 Raspbian: Error response from daemon: unable to find "net_prio" in controller set: unknown - addresses docker/for-linux#552 Error response from daemon: unable to find "cpuacct" in controller set: unknown - addresses docker/for-linux#545 Raspbian: Error response from daemon: unable to find "net_prio" in controller set: unknown Signed-off-by: Sebastiaan van Stijn <github@gone.nl> |
||
---|---|---|
.. | ||
blkio.go | ||
cgroup.go | ||
control.go | ||
cpu.go | ||
cpuacct.go | ||
cpuset.go | ||
devices.go | ||
errors.go | ||
freezer.go | ||
hierarchy.go | ||
hugetlb.go | ||
LICENSE | ||
memory.go | ||
metrics.pb.go | ||
metrics.proto | ||
named.go | ||
net_cls.go | ||
net_prio.go | ||
opts.go | ||
paths.go | ||
perf_event.go | ||
pids.go | ||
rdma.go | ||
README.md | ||
state.go | ||
subsystem.go | ||
systemd.go | ||
ticks.go | ||
utils.go | ||
v1.go |
cgroups
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.