本文关键字:Linux、systemd、资源隔离
⼀、修改 systemd unit file
为了给程序配置资源隔离,通常我们会到 cgroup 层级树下的控制器⾥,创建或者修改控制组⽂件。
在 Linux7 中,如果为程序配置了 systemd 服务,除了直接修改控制组文件之外,还可以通过 systemd 相关命令对程序的资源隔离配置进行修改。
1.1 修改方法
有两种方法可以对配置了 systemd 的程序进行资源隔离:
1. 命令行修改:通过执行 systemctl set-property 命令实现,形式为 systemctl set-property name parameter=value;修改默认即时生效。
2. 手工修改文件:直接编辑程序的 systemd unit file 文件,完成之后需手工执行 systemctl daemon-reload 更新配置,并重启服务 systemctl restart name.service。
systemd unit file 里支持的资源隔离配置项,如常见的:
完整的配置项列表,请参考官方文档:2.3.2. Modifying Unit Files https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/resource_management_guide/sec-modifying_control_groups#sec-Modifying_Unit_Files
1.2 试验说明
以 MySQL CPU 资源管理为例。
环境信息:
二、简要原理说明
系统资源在 cgroup 里体现为资源控制器(resource controller/cgroup subsystem);每个controller 以层级目录结构的方式对系统资源进行管理。systemd 在系统开机时,默认自动将 cpu、blkio、memory 等控制器挂载到 /sys/fs/cgroup 路径下。
systemd 使⽤以下三种类型的 unit 来进⾏资源管理:
其中 scope 类型只能由程序自动创建;其他两种可程序⾃动创建,也可⼿动创建。系统在启动的时候将默认创建⼀系列运⾏时必要的 service,同时也会创建四种必要的 slice:
基于此,在 Linux 7 中,系统通过绑定程序的 systemd 层级树路径和 cgroup 资源控制器路径实现资源隔离(可使用命令 systemd-cgls 直观查看,见下文图片),具体表现为:
因此,通过修改程序的 systemd unit file 里与资源管理相关的参数,即可达到资源隔离配置的目的。