70 lines
2.8 KiB
Plaintext
70 lines
2.8 KiB
Plaintext
|
Integration with systemd
|
||
|
========================
|
||
|
|
||
|
systemd is a system and service manager for Linux, compatible with SysV
|
||
|
and LSB init scripts. systemd heavily uses control groups to manage and control
|
||
|
services.
|
||
|
|
||
|
Most of the libcgroup tools and APIs can be safely used on systems with systemd
|
||
|
without any problems. This document attempts to describe the configuration of
|
||
|
systemd and libcgroup so they can safely co-exist and mutually benefit each
|
||
|
other.
|
||
|
|
||
|
References
|
||
|
==========
|
||
|
[1] http://www.freedesktop.org/wiki/Software/systemd
|
||
|
Systemd home page.
|
||
|
|
||
|
[2] http://www.freedesktop.org/wiki/Software/systemd/PaxControlGroups
|
||
|
This is the most useful document describing systemd expectations on applications
|
||
|
(incl. libcgroup tools).
|
||
|
|
||
|
|
||
|
Compilation
|
||
|
===========
|
||
|
As stated in [2], libcgroup should not interact with the 'name=systemd'
|
||
|
hierarchy. Compile libcgroup with the --enable-opaque-hierarchy configure option
|
||
|
to do so:
|
||
|
|
||
|
./configure --enable-opaque-hierarchy=name=systemd
|
||
|
|
||
|
Consequently, the 'name=systemd' hierarchy will not be visible to libcgroup and
|
||
|
all of its tools. For example, the lscgroup command will not list systemd
|
||
|
cgroups and the cgclear command will not remove them.
|
||
|
|
||
|
Start-up and services
|
||
|
====================
|
||
|
|
||
|
Systemd automatically mounts all available controllers on system boot ('cpu' and
|
||
|
'cpuacct' together in one hierarchy by default) and can automatically put
|
||
|
service processes into control groups with configured parameters — by default,
|
||
|
each service is automatically put into the 'cpu,cpuacct:/system/$service_name'
|
||
|
control group. The System Administrator has full control of parameters in each
|
||
|
control group and of which controllers are used. Consult systemd
|
||
|
documentation, mainly systemd.conf(5) and systemd.exec(5) man pages, for
|
||
|
details.
|
||
|
|
||
|
In the vast majority of use cases, this behavior is sufficient and libcgroup
|
||
|
does not need to be used.
|
||
|
|
||
|
For specific use cases, e.g. when a different tree of control groups is needed,
|
||
|
libcgroup provides cgconfig service. This service can create arbitrary control
|
||
|
group hierarchies. In this case, follow these steps:
|
||
|
|
||
|
1. Set 'DefaultControllers=' in /etc/systemd/system.conf so that systemd does
|
||
|
not create control groups for services automatically.
|
||
|
|
||
|
2. Prepare /etc/cgconfig.conf and enable the cgconfig service. The service will
|
||
|
parse the /etc/cgconfig.conf file during machine boot and create all control
|
||
|
groups which are defined in it. The service automatically sets '+t' ("sticky")
|
||
|
bit on the tasks files as recommended in [2].
|
||
|
|
||
|
3. For each service that should start in a specific control group, add the
|
||
|
following lines into its unit file:
|
||
|
After=cgconfig.service
|
||
|
ControlGroup=<name of the control group(s)>
|
||
|
|
||
|
This ensures the service is started only after cgconfig creates the necessary
|
||
|
hierarchy for it. It also tells systemd which control group it should use to
|
||
|
start the service.
|