summaryrefslogtreecommitdiff
path: root/vendor/github.com/containerd/cgroups/control.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/containerd/cgroups/control.go')
-rw-r--r--vendor/github.com/containerd/cgroups/control.go99
1 files changed, 99 insertions, 0 deletions
diff --git a/vendor/github.com/containerd/cgroups/control.go b/vendor/github.com/containerd/cgroups/control.go
new file mode 100644
index 000000000..5fcaac6d0
--- /dev/null
+++ b/vendor/github.com/containerd/cgroups/control.go
@@ -0,0 +1,99 @@
+/*
+ Copyright The containerd Authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package cgroups
+
+import (
+ "os"
+
+ v1 "github.com/containerd/cgroups/stats/v1"
+ specs "github.com/opencontainers/runtime-spec/specs-go"
+)
+
+type procType = string
+
+const (
+ cgroupProcs procType = "cgroup.procs"
+ cgroupTasks procType = "tasks"
+ 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 / task is in.
+ Subsystem Name
+ // Pid is the process id of the process / task.
+ Pid int
+ // Path is the full path of the subsystem and location that the process / task is in.
+ Path string
+}
+
+type Task = Process
+
+// 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 (cgroup.procs). Without additional arguments,
+ // the process is added to all the cgroup subsystems. When giving Add a list of
+ // subsystem names, the process is only added to those subsystems, provided that
+ // they are active in the targeted cgroup.
+ Add(Process, ...Name) error
+ // AddProc adds the process with the given id to the cgroup (cgroup.procs).
+ // Without additional arguments, the process with the given id is added to all
+ // the cgroup subsystems. When giving AddProc a list of subsystem names, the process
+ // id is only added to those subsystems, provided that they are active in the targeted
+ // cgroup.
+ AddProc(uint64, ...Name) error
+ // AddTask adds a process to the cgroup (tasks). Without additional arguments, the
+ // task is added to all the cgroup subsystems. When giving AddTask a list of subsystem
+ // names, the task is only added to those subsystems, provided that they are active in
+ // the targeted cgroup.
+ AddTask(Process, ...Name) 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) (*v1.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)
+ // Tasks returns all the tasks in a select subsystem for the cgroup
+ Tasks(Name, bool) ([]Task, 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)
+ // RegisterMemoryEvent returns the memory subsystems event fd for whatever memory event was
+ // registered for. Can alternatively register for the oom event with this method.
+ RegisterMemoryEvent(MemoryEvent) (uintptr, error)
+ // State returns the cgroups current state
+ State() State
+ // Subsystems returns all the subsystems in the cgroup
+ Subsystems() []Subsystem
+}