容器学习笔记之CPU Cgroup

我们知道,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的使用已经有了一个大概的认识。更多学习笔记,稍后更新......

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值