| package cgroups |
| |
| import ( |
| "os" |
| |
| specs "github.com/opencontainers/runtime-spec/specs-go" |
| ) |
| |
| const ( |
| cgroupProcs = "cgroup.procs" |
| defaultDirPerm = 0755 |
| ) |
| |
| // defaultFilePerm is a var so that the test framework can change the filemode |
| // of all files created when the tests are running. The difference between the |
| // tests and real world use is that files like "cgroup.procs" will exist when writing |
| // to a read cgroup filesystem and do not exist prior when running in the tests. |
| // this is set to a non 0 value in the test code |
| var defaultFilePerm = os.FileMode(0) |
| |
| type Process struct { |
| // Subsystem is the name of the subsystem that the process is in |
| Subsystem Name |
| // Pid is the process id of the process |
| Pid int |
| // Path is the full path of the subsystem and location that the process is in |
| Path string |
| } |
| |
| // Cgroup handles interactions with the individual groups to perform |
| // actions on them as them main interface to this cgroup package |
| type Cgroup interface { |
| // New creates a new cgroup under the calling cgroup |
| New(string, *specs.LinuxResources) (Cgroup, error) |
| // Add adds a process to the cgroup |
| Add(Process) error |
| // Delete removes the cgroup as a whole |
| Delete() error |
| // MoveTo moves all the processes under the calling cgroup to the provided one |
| // subsystems are moved one at a time |
| MoveTo(Cgroup) error |
| // Stat returns the stats for all subsystems in the cgroup |
| Stat(...ErrorHandler) (*Metrics, error) |
| // Update updates all the subsystems with the provided resource changes |
| Update(resources *specs.LinuxResources) error |
| // Processes returns all the processes in a select subsystem for the cgroup |
| Processes(Name, bool) ([]Process, error) |
| // Freeze freezes or pauses all processes inside the cgroup |
| Freeze() error |
| // Thaw thaw or resumes all processes inside the cgroup |
| Thaw() error |
| // OOMEventFD returns the memory subsystem's event fd for OOM events |
| OOMEventFD() (uintptr, error) |
| // State returns the cgroups current state |
| State() State |
| // Subsystems returns all the subsystems in the cgroup |
| Subsystems() []Subsystem |
| } |