- stretch 232-25+deb9u11
- testing 241-5
- stretch-backports 241-3~bpo9+1
- unstable 241-5
- experimental 242-2
SYSTEMD.RESOURCE-CONTROL(5) | systemd.resource-control | SYSTEMD.RESOURCE-CONTROL(5) |
NAME¶
systemd.resource-control - Resource control unit settingsSYNOPSIS¶
slice.slice, scope.scope, service.service, socket.socket, mount.mount, swap.swapDESCRIPTION¶
Unit configuration files for services, slices, scopes, sockets, mount points, and swap devices share a subset of configuration options for resource control of spawned processes. Internally, this relies on the Linux Control Groups (cgroups) kernel concept for organizing processes in a hierarchical tree of named groups for the purpose of resource management.This man page lists the configuration options shared by those six unit types. See systemd.unit(5) for the common options of all unit configuration files, and systemd.slice(5), systemd.scope(5), systemd.service(5), systemd.socket(5), systemd.mount(5), and systemd.swap(5) for more information on the specific unit configuration files. The resource control configuration options are configured in the [Slice], [Scope], [Service], [Socket], [Mount], or [Swap] sections, depending on the unit type.
In addition, options which control resources available to programs executed by systemd are listed in systemd.exec(5). Those options complement options listed here.
See the New Control Group Interfaces[1] for an introduction on how to make use of resource control APIs from programs.
AUTOMATIC DEPENDENCIES¶
Units with the Slice= setting set automatically acquire Requires= and After= dependencies on the specified slice unit.UNIFIED AND LEGACY CONTROL GROUP HIERARCHIES¶
The unified control group hierarchy is the new version of kernel control group interface, see cgroup-v2.txt[2]. Depending on the resource type, there are differences in resource control capabilities. Also, because of interface changes, some resource types have separate set of options on the unified hierarchy.CPU
CPUWeight= and StartupCPUWeight= replace CPUShares= and StartupCPUShares=, respectively.
The "cpuacct" controller does not exist separately on the unified hierarchy.
Memory
IO
To ease the transition, there is best-effort translation between the two versions of settings. For each controller, if any of the settings for the unified hierarchy are present, all settings for the legacy hierarchy are ignored. If the resulting settings are for the other type of hierarchy, the configurations are translated before application.
Legacy control group hierarchy (see cgroups.txt[4]), also called cgroup-v1, doesn't allow safe delegation of controllers to unprivileged processes. If the system uses the legacy control group hierarchy, resource control is disabled for systemd user instance, see systemd(1).
OPTIONS¶
Units of the types listed above can have settings for resource control configuration:CPUAccounting=
CPUWeight=weight, StartupCPUWeight= weight
While StartupCPUWeight= only applies to the startup phase of the system, CPUWeight= applies to normal runtime of the system, and if the former is not set also to the startup phase. Using StartupCPUWeight= allows prioritizing specific services at boot-up differently than during normal runtime.
Implies "CPUAccounting=true".
These settings replace CPUShares= and StartupCPUShares=.
CPUQuota=
Example: CPUQuota=20% ensures that the executed processes will never get more than 20% CPU time on one CPU.
Implies "CPUAccounting=true".
MemoryAccounting=
MemoryLow=bytes
Takes a memory size in bytes. If the value is suffixed with K, M, G or T, the specified memory size is parsed as Kilobytes, Megabytes, Gigabytes, or Terabytes (with the base 1024), respectively. Alternatively, a percentage value may be specified, which is taken relative to the installed physical memory on the system. This controls the "memory.low" control group attribute. For details about this control group attribute, see cgroup-v2.txt[2].
Implies "MemoryAccounting=true".
This setting is supported only if the unified control group hierarchy is used and disables MemoryLimit=.
MemoryHigh=bytes
Takes a memory size in bytes. If the value is suffixed with K, M, G or T, the specified memory size is parsed as Kilobytes, Megabytes, Gigabytes, or Terabytes (with the base 1024), respectively. Alternatively, a percentage value may be specified, which is taken relative to the installed physical memory on the system. If assigned the special value "infinity", no memory limit is applied. This controls the "memory.high" control group attribute. For details about this control group attribute, see cgroup-v2.txt[2].
Implies "MemoryAccounting=true".
This setting is supported only if the unified control group hierarchy is used and disables MemoryLimit=.
MemoryMax=bytes
Takes a memory size in bytes. If the value is suffixed with K, M, G or T, the specified memory size is parsed as Kilobytes, Megabytes, Gigabytes, or Terabytes (with the base 1024), respectively. Alternatively, a percentage value may be specified, which is taken relative to the installed physical memory on the system. If assigned the special value "infinity", no memory limit is applied. This controls the "memory.max" control group attribute. For details about this control group attribute, see cgroup-v2.txt[2].
Implies "MemoryAccounting=true".
This setting replaces MemoryLimit=.
MemorySwapMax=bytes
Takes a swap size in bytes. If the value is suffixed with K, M, G or T, the specified swap size is parsed as Kilobytes, Megabytes, Gigabytes, or Terabytes (with the base 1024), respectively. If assigned the special value "infinity", no swap limit is applied. This controls the "memory.swap.max" control group attribute. For details about this control group attribute, see cgroup-v2.txt[2].
Implies "MemoryAccounting=true".
This setting is supported only if the unified control group hierarchy is used and disables MemoryLimit=.
TasksAccounting=
TasksMax=N
Implies "TasksAccounting=true". The system default for this setting may be controlled with DefaultTasksMax= in systemd-system.conf(5).
IOAccounting=
This setting replaces BlockIOAccounting= and disables settings prefixed with BlockIO or StartupBlockIO.
IOWeight=weight, StartupIOWeight= weight
While StartupIOWeight= only applies to the startup phase of the system, IOWeight= applies to the later runtime of the system, and if the former is not set also to the startup phase. This allows prioritizing specific services at boot-up differently than during runtime.
Implies "IOAccounting=true".
These settings replace BlockIOWeight= and StartupBlockIOWeight= and disable settings prefixed with BlockIO or StartupBlockIO.
IODeviceWeight=device weight
Implies "IOAccounting=true".
This setting replaces BlockIODeviceWeight= and disables settings prefixed with BlockIO or StartupBlockIO.
IOReadBandwidthMax=device bytes, IOWriteBandwidthMax=device bytes
Implies "IOAccounting=true".
These settings replace BlockIOReadBandwidth= and BlockIOWriteBandwidth= and disable settings prefixed with BlockIO or StartupBlockIO.
IOReadIOPSMax=device IOPS, IOWriteIOPSMax=device IOPS
Implies "IOAccounting=true".
These settings are supported only if the unified control group hierarchy is used and disable settings prefixed with BlockIO or StartupBlockIO.
DeviceAllow=
The device node specifier is either a path to a device node in the file system, starting with /dev/, or a string starting with either "char-" or "block-" followed by a device group name, as listed in /proc/devices. The latter is useful to whitelist all current and future devices belonging to a specific device group at once. The device group is matched according to file name globbing rules, you may hence use the "*" and "?" wildcards. Examples: /dev/sda5 is a path to a device node, referring to an ATA or SCSI block device. "char-pts" and "char-alsa" are specifiers for all pseudo TTYs and all ALSA sound devices, respectively. "char-cpu/*" is a specifier matching all CPU related device groups.
DevicePolicy=auto|closed|strict
strict
closed
auto
Slice=
This option may be used to arrange systemd units in a hierarchy of slices each of which might have resource settings applied.
For units of type slice, the only accepted value for this setting is the parent slice. Since the name of a slice unit implies the parent slice, it is hence redundant to ever set this parameter directly for slice units.
Special care should be taken when relying on the default slice assignment in templated service units that have DefaultDependencies=no set, see systemd.service(5), section "Automatic Dependencies" for details.
Delegate=
DEPRECATED OPTIONS¶
The following options are deprecated. Use the indicated superseding options instead:CPUShares=weight, StartupCPUShares= weight
While StartupCPUShares= only applies to the startup phase of the system, CPUShares= applies to normal runtime of the system, and if the former is not set also to the startup phase. Using StartupCPUShares= allows prioritizing specific services at boot-up differently than during normal runtime.
Implies "CPUAccounting=true".
These settings are deprecated. Use CPUWeight= and StartupCPUWeight= instead.
MemoryLimit=bytes
Implies "MemoryAccounting=true".
This setting is deprecated. Use MemoryMax= instead.
BlockIOAccounting=
This setting is deprecated. Use IOAccounting= instead.
BlockIOWeight=weight, StartupBlockIOWeight=weight
While StartupBlockIOWeight= only applies to the startup phase of the system, BlockIOWeight= applies to the later runtime of the system, and if the former is not set also to the startup phase. This allows prioritizing specific services at boot-up differently than during runtime.
Implies "BlockIOAccounting=true".
These settings are deprecated. Use IOWeight= and StartupIOWeight= instead.
BlockIODeviceWeight=device weight
Implies "BlockIOAccounting=true".
This setting is deprecated. Use IODeviceWeight= instead.
BlockIOReadBandwidth=device bytes, BlockIOWriteBandwidth=device bytes
Implies "BlockIOAccounting=true".
These settings are deprecated. Use IOReadBandwidthMax= and IOWriteBandwidthMax= instead.
SEE ALSO¶
systemd(1), systemd.unit(5), systemd.service(5), systemd.slice(5), systemd.scope(5), systemd.socket(5), systemd.mount(5), systemd.swap(5), systemd.exec(5), systemd.directives(7), systemd.special(7), The documentation for control groups and specific controllers in the Linux kernel: cgroups.txt[4], cpuacct.txt[10], memory.txt[8], blkio-controller.txt[9].NOTES¶
- 1.
- New Control Group Interfaces
- 2.
- cgroup-v2.txt
- 3.
- cgroup-v2-cpu.txt
- 4.
- cgroups.txt
- 5.
- sched-design-CFS.txt
- 6.
- pids.txt
- 7.
- devices.txt
- 8.
- memory.txt
- 9.
- blkio-controller.txt
- 10.
- cpuacct.txt
systemd 232 |