容器学习笔记之CPU Cgroup
我们知道,Cgroups可以限制容器资源,比如CPU、Memory、Storage、Network等。最近学习了CPU Cgroup中三个重要的参数:cpu.cfs_quota_us,cpu.cfs_period_us和cpu.shares。在说明这几个参数的意义和作用之前,先了解一下CPU各种状态。1. 用户态与内核态我们通过top命令查看系统中的CPU占用情况,如下图:top结果中,红框框起来
我们知道,Cgroups可以限制容器资源,比如CPU、Memory、Storage、Network等。
最近学习了CPU Cgroup中三个重要的参数:cpu.cfs_quota_us,cpu.cfs_period_us和cpu.shares。在说明这几个参数的意义和作用之前,先了解一下CPU各种状态。
1. 用户态与内核态
我们通过top命令查看系统中的CPU占用情况,如下图:
top结果中,红框框起来的一行包括us,sy,ni,id,wa,hi,si,st这些字符,这些都是什么意思呢?具体含义,看下面这张表(来自极客时间,李程远,《容器实战高手课》):
us是user的缩写,代表Linux的用户态CPU usage,我们编写的程序代码中,只要不是调用系统函数,那么这些代码指令消耗的CPU就都属于us。
sy是system的缩写,表示内核态的CPU usage。如果程序代码中调用了系统函数,比如用read()去读取一个文件,那么进程就会从用户态切换到内核态,在真正去磁盘上读取文件之前,会先进行一些文件系统层的操作,这个阶段,代码指令执行属于sy。
id是idle的缩写,当用户程序执行完一个任务后,如果当前这个CPU没有其他任务需要做,就进入空闲状态了,也就是idle状态。
wa是iowait的缩写,代表等待I/O的时间,例如上面说的读取文件过程中,真正的磁盘读取操作是TASK_UNINTERRUPTIBLE的,等待这个Disk I/O的时间,就是wa。
hi是hardware irq的缩写,代表CPU处理硬中断的开销。
si是softirq的缩写,代表CPU处理软中断的开销。hi和si的CPU时间都不计入进程的CPU时间,因为它们本身在处理的时候就不属于任何一个进程。
ni是nice的缩写,如果进程的nice值是正值(1-19),代表优先级比较低的进程运行时所占用的用户态CPU时间。
st是steal的缩写,属于虚拟机里使用的一个CPU使用类型,表示有多少时间是被同一个宿主机上的其他虚拟机抢占的。
2. CPU Cgroup
好了,回到CPU Cgroup。CPU Cgroup是Cgroups的一个子系统,用来限制CPU的使用。CPU Cgroup只会限制用户态(us和ni)和内核态(sy)CPU的使用,而不会去限制wa、hi和si等I/O或中断相关的CPU使用。
每个Cgourps子系统都是通过一个虚拟文件系统挂载点的方式,挂载到一个缺省目录下,Linux系统中,CPU Cgroup一般放在/sys/fs/cgroup/cpu目录下。
在该目录下,每个控制组都是一个子目录,各控制组之间的关系就是一个树状层级关系。比如我们这个目录下,进入到docker目录,看到的目录图如下:
在该子目录下,又包括不同的容器目录,例如我们进入到其中的一个容器目录:
在普通调度(SCHED_NORMAL)类型进程中,调度算法是CFS(Completely Fair Scheduler,即完全公平调度器)。CPU Cgroup和CFS相关的参数,共有三个,也就是我们在本篇开头提到的三个参数:cpu.cfs_period_us,cpu.cfs_quota_us,和cpu.shares。
cpu.cfs_period_us是CFS算法的一个调度周期,一般它的值是100000us,即100ms。
cpu.cfs_quota_us表示在CFS算法中,在一个调度周期里该控制组被允许的运行时间,比如这个值为50000时,就是50ms。用这个值去除以调度周期cpu.cfs_period_us,即50ms/100ms=0.5,得到的值表示该控制组被允许使用的CPU最大配额是0.5个CPU。在我的系统里,这个值是-1,为默认值,表示不限制。
cpu.shares用于控制不同控制组之间的CPU分配比例,缺省值是1024,表示1个CPU。如果在树状结构的同一层中,一个控制组的cpu.shares是1024,另一个控制组的cpu.shares是3072,那么这两个控制组的CPU分配比例就是1:3。但这个值只有在系统上的CPU完全被占满的时候,才会起作用,在没有跑满的时候,各控制组仍然是按照cpu.cfs_quota_us与cpu.cfs_period_us比值所得到的CPU绝对值去运行的。
好了,说到这里,我们对如何限制容器CPU的使用已经有了一个大概的认识。更多学习笔记,稍后更新......
更多推荐
所有评论(0)