systemd与cgroup
systemd是系统自带的cgroup管理器, 系统初始化就存在的, 和cgroups联系紧密,为每一个进程分配
cgroups, 用它管理就行了. 如果设置成cgroupfs就存在2个cgroup控制管理器, 实验证明在资源有压力的
情况下,会存在不稳定的情况.(cgroupfs是docker自带的)
systemd依赖cgroups
要理解systemd与cgroups的关系,我们需要先区分cgroups的两个方面:层级结构(A)和资源控制
(B)。首先cgroups是以层级结构组织并标识进程的一种方式,同时它也是在该层级结构上执行资源限
制的一种方式。我们简单的把cgroups的层级结构称为A,把cgroups的资源控制能力称为B。对于
systemd来说,A是必须的,如果没有A,systemd将不能很好的工作。而B是可选的。
Systemd默认挂载的cgroups系统
除了systemd目录外,其他目录都是对应的subsystem。
/sys/fs/cgroup/systemd 目录是 systemd 维护的自己使用的非 subsystem 的 cgroups 层级结构。这玩
意儿是 systemd 自己使用的,换句话说就是,并不允许其它的程序动这个目录下的内容。其实
/sys/fs/cgroup/systemd 目录对应的 cgroups 层级结构就是 systemd 用来使用 cgoups 中 feature A
的。
Cgroup 的默认层级
通过将 cgroup 层级系统与 systemd unit 树绑定,systemd 可以把资源管理的设置从进程级别移至应
用程序级别。因此,我们可以使用 systemctl 指令,或者通过修改 systemd unit 的配置文件来管理 unit
相关的资源。
默认情况下,systemd 会自动创建 slice**、scope 和 service** unit 的层级(slice、scope 和 service
都是 systemd 的 unit 类型,参考《初识 systemd》),来为 cgroup 树提供统一的层级结构。
系统中运行的所有进程,都是 systemd init 进程的子进程。在资源管控方面,systemd 提供了三种 unit
类型:
service**: 一个或一组进程,由 systemd 依据 unit 配置文件启动。service 对指定进程进行封装,这
样进程可以作为一个整体被启动或终止。**
评论