cgroup,cpu.share参数,测试docker容器进程与系统进程CPU资源占用
测试机器1核,Fedora release 30 (Thirty)
根据进程id,查看进程所属cgroup
[username@localhost ~]$ cat /proc/1/cgroup
11:memory:/init.scope
10:pids:/init.scope
9:net_cls,net_prio:/
8:hugetlb:/
7:devices:/init.scope
6:perf_event:/
5:cpuset:/
4:blkio:/
3:cpu,cpuacct:/
2:freezer:/
1:name=systemd:/init.scope
0::/init.scope
cgroup根路径为/sys/fs/cgroup
系统进程与容器进程抢占CPU时,CPU资源是怎么分配的?
- 启动一个容器,运行两个进程
[username@localhost ~]$ sudo docker run -it --rm --cpu-shares=512 centos:7 /bin/bash
[root@74983a25bb02 /]# while : ; do : ; done &
[1] 14
[root@74983a25bb02 /]# while : ; do : ; done &
[2] 15
查看监控数据
4857 root 20 0 11836 392 0 R 49.5 0.0 0:23.35 bash
4858 root 20 0 11836 392 0 R 49.5 0.0 0:22.18 bash
容器中的两个进程CPU各占50%
- 启动一个容器,运行两个进程
[username@localhost ~]$ sudo docker run -it --rm --cpu-shares=2048 centos:7 /bin/bash
[root@3767226341e1 /]# while : ; do : ; done &
[1] 14
[root@3767226341e1 /]# while : ; do : ; done &
[2] 15
查看监控数据
5055 root 20 0 11836 404 0 R 39.5 0.0 0:31.67 bash
5056 root 20 0 11836 404 0 R 39.5 0.0 0:30.57 bash
4857 root 20 0 11836 392 0 R 9.6 0.0 1:35.79 bash
4858 root 20 0 11836 392 0 R 9.6 0.0 1:34.62 bash
两个容器进程的CPU占比为4:1,跟cpu.shares比值一样
查看容器进程所属cgroup
[username@localhost ~]$ cat /proc/5056/cgroup | grep cpuacct
3:cpu,cpuacct:/system.slice/docker-3767226341e186d3989278c344b89b3a63648aa9b5b3138061ef6d680503caa9.scope
实际路径为/sys/fs/cgroup/cpu/system.slice/docker-3767226341e186d3989278c344b89b3a63648aa9b5b3138061ef6d680503caa9.scope
- 启动2个进程,并设置cgroup为/sys/fs/cgroup/cpu/system.slice
[username@localhost system.slice]$ while : ; do : ; done &
[1] 5152
[username@localhost system.slice]$ while : ; do : ; done &
[2] 5153
echo "5152" | sudo tee -a /sys/fs/cgroup/cpu/system.slice/tasks
echo "5153" | sudo tee -a /sys/fs/cgroup/cpu/system.slice/tasks
[username@localhost system.slice]$ cat /sys/fs/cgroup/cpu/system.slice/tasks
5152
5153
查看监控数据
5055 root 20 0 11836 404 0 R 21.9 0.0 6:11.91 bash
5056 root 20 0 11836 404 0 R 21.9 0.0 6:10.80 bash
5152 lianglo+ 20 0 226752 2444 0 R 21.9 0.0 2:41.64 bash
5153 lianglo+ 20 0 226752 2444 0 R 21.9 0.0 2:43.19 bash
4857 root 20 0 11836 392 0 R 5.6 0.0 3:00.85 bash
4858 root 20 0 11836 392 0 R 5.3 0.0 2:59.68 bash
下面是cpu资源占用计算方式:
4857
4858
5.6%
5.6%
512
两个进程cpu.shares相加等于512
/sys/fs/cgroup/cpu/system.slice/docker-3767226341e186d3989278c344b89b3a63648aa9b5b3138061ef6d680503caa9.scope
容器进程
5055
5056
22%
22%
2048
两个进程cpu.shares相加等于2048
/sys/fs/cgroup/cpu/system.slice/docker-74983a25bb022d56f09de3cf09a7dfa8bccceffec3fb881678ce0f8f1a172c7d.scope
容器进程
5152
5153
22%
22%
1024
1024
每个进程cpu.shares都是1024
/sys/fs/cgroup/cpu/system.slice
系统进程,每个进程的cpu.shares值都是1024(相对值,同一层级进程或cgroup)
下面会验证,即使将/sys/fs/cgroup/cpu/system.slice/cpu.shares值改成2048,进程CPU使用率也没有变化。(前提条件:CPU使用率高的进程都在/sys/fs/cgroup/cpu/system.slice下面)
调大/sys/fs/cgroup/cpu/system.slice/cpu.shares对进程CPU占用有影响吗?
[username@localhost system.slice]$ cat /sys/fs/cgroup/cpu/system.slice/cpu.shares
1024
修改值
[username@localhost system.slice]$ echo 2048 | sudo tee /sys/fs/cgroup/cpu/system.slice/cpu.shares
2048
[username@localhost system.slice]$ cat /sys/fs/cgroup/cpu/system.slice/cpu.shares
2048
查看监控数据
5055 root 20 0 11836 404 0 R 22.3 0.0 7:56.26 bash
5056 root 20 0 11836 404 0 R 21.9 0.0 7:55.14 bash
5152 lianglo+ 20 0 226752 2444 0 R 21.9 0.0 4:25.98 bash
5153 lianglo+ 20 0 226752 2444 0 R 21.9 0.0 4:27.53 bash
4857 root 20 0 11836 392 0 R 5.6 0.0 3:26.94 bash
4858 root 20 0 11836 392 0 R 5.3 0.0 3:25.77 bash
监控数据没有变化
以上是 cgroup,cpu.share参数,测试docker容器进程与系统进程CPU资源占用 的全部内容, 来源链接: utcz.com/z/515629.html