package cgroupfs
import "gvisor.dev/gvisor/pkg/sentry/fsimpl/cgroupfs"
Package cgroupfs implements cgroupfs.
A cgroup is a collection of tasks on the system, organized into a tree-like structure similar to a filesystem directory tree. In fact, each cgroup is represented by a directory on cgroupfs, and is manipulated through control files in the directory.
All cgroups on a system are organized into hierarchies. Hierarchies are a distinct tree of cgroups, with a common set of controllers. One or more cgroupfs mounts may point to each hierarchy. These mounts provide a common view into the same tree of cgroups.
A controller (also known as a "resource controller", or a cgroup "subsystem") determines the behaviour of each cgroup.
In addition to cgroupfs, the kernel has a cgroup registry that tracks system-wide state related to cgroups such as active hierarchies and the controllers associated with them.
Since cgroupfs doesn't allow hardlinks, there is a unique mapping between cgroupfs dentries and inodes. Thus, cgroupfs inodes don't need to be ref counted and exist until they're unlinked once or the FS is destroyed.
Synchronization
Cgroup hierarchy creation and destruction is protected by the kernel.CgroupRegistry.mu. Once created, a hierarchy's set of controllers, the filesystem associated with it, and the root cgroup for the hierarchy are immutable.
Membership of tasks within cgroups is protected by cgroupfs.filesystem.tasksMu. Tasks also maintain a set of all cgroups they're in, and this list is protected by Task.mu.
Lock order:
kernel.CgroupRegistry.mu kernfs.filesystem.mu kernel.TaskSet.mu kernel.Task.mu cgroupfs.filesystem.tasksMu. cgroupfs.dir.OrderedChildren.mu
Index ¶
- Constants
- Variables
- type FilesystemType
- func (fsType FilesystemType) GetFilesystem(ctx context.Context, vfsObj *vfs.VirtualFilesystem, creds *auth.Credentials, source string, opts vfs.GetFilesystemOptions) (*vfs.Filesystem, *vfs.Dentry, error)
- func (FilesystemType) Name() string
- func (FilesystemType) Release(ctx context.Context)
- type InitialCgroup
- type InternalData
Constants ¶
const ( // Name is the default filesystem name. Name = "cgroup" )
Variables ¶
var SupportedMountOptions = []string{"all", "cpu", "cpuacct", "cpuset", "devices", "job", "memory", "pids"}
SupportedMountOptions is the set of supported mount options for cgroupfs.
Types ¶
type FilesystemType ¶
type FilesystemType struct{}
FilesystemType implements vfs.FilesystemType.
+stateify savable
func (FilesystemType) GetFilesystem ¶
func (fsType FilesystemType) GetFilesystem(ctx context.Context, vfsObj *vfs.VirtualFilesystem, creds *auth.Credentials, source string, opts vfs.GetFilesystemOptions) (*vfs.Filesystem, *vfs.Dentry, error)
GetFilesystem implements vfs.FilesystemType.GetFilesystem.
func (FilesystemType) Name ¶
func (FilesystemType) Name() string
Name implements vfs.FilesystemType.Name.
func (FilesystemType) Release ¶
func (FilesystemType) Release(ctx context.Context)
Release implements vfs.FilesystemType.Release.
type InitialCgroup ¶
type InitialCgroup struct { // Path is an absolute path relative to the root of a cgroupfs filesystem // that indicates where to place the init task. An empty string indicates // the root of the filesystem. Path string // SetOwner indicates the UID and GID fields contain valid values. If true, // Both UID and GID must be provided. SetOwner bool // UID of the initial cgroup path components, excluding the root cgroup. UID auth.KUID // GID of the initial cgroup path components, excluding the root cgroup. GID auth.KGID // SetMode indicates the Mode field contains a valid value. SetMode bool // Mode of the initial cgroup path components, excluding the root cgroup. Mode linux.FileMode }
InitialCgroup specifies properties of the cgroup for the init task.
+stateify savable
type InternalData ¶
type InternalData struct { DefaultControlValues map[string]int64 InitialCgroup InitialCgroup }
InternalData contains internal data passed in to the cgroupfs mount via vfs.GetFilesystemOptions.InternalData.
+stateify savable
Source Files ¶
base.go bitmap.go cgroupfs.go cpu.go cpuacct.go cpuset.go devices.go job.go memory.go pids.go
- Version
- v0.0.0-20250702182429-85e76111eb28 (latest)
- Published
- Jul 2, 2025
- Platform
- linux/amd64
- Imports
- 21 packages
- Last checked
- 1 hour ago –
Tools for package owners.