上一篇:Docker的那些事儿—Docker使用的核心底层技术(5)
Control groups
Control groups(Cgroups)中文称为控制组。Docker利用Cgroups实现了对资源的配额和度量。Cgroups可以限制CPU、内存、磁盘读写速率、网络带宽等系统资源。Linux使用文件系统来实现Cgroups,我们可以直接使用下面的命令查看当前的Cgroups中有哪些子系统:
以下是每个子系统的说明:
Blkio:这个子系统设置限制每个块设备的输入输出控制。例如:磁盘,光盘以及usb等等。
Cpu:这个子系统使用调度程序为cgroup任务提供cpu的访问。
Cpuacct:产生cgroup任务的cpu资源报告。
Cpuset:如果是多核的cpu,这个子系统会为cgroup任务分配单独的cpu和内存。
Devices:允许或拒绝cgroup任务对设备的访问。
Freezer:暂停和恢复cgroup任务。
Memory:设置每个cgroup的内存限制以及产生内存资源报告。
net_cls:标记每个网络包以供cgroup方便使用。
Cgroup的使用非常简单,如果想要创建一个新的cgroup,只需要在想要分配或者限制资源的子系统下面创建一个新的文件夹,然后cgroup会在这个文件夹下自创建很多内容。当然如果在Linux上安装了Docker,会发现所有子系统的目录下都有一个名为 Docker 的文件夹:
或许你可能发现存在两个文件夹:
3498d766e1axxx和7078ee1f4cb79xxx,这两个文件夹名字其实就是我们之前启动的两个容器的ID号。Cgroup是层级结构,父子继承关系,当你打开上述两个文件夹可以看到拥有类似的目录结构。
另外,每个子系统下面都有一个tasks文件,这个文件记录了所有加入这个资源组的进程号。
这些进程号恰巧是PID=2173的docker-containerd-shim进程的所有子进程,这说明和这个容器7078ee1f4cbxx相关的进程都被限制在这个以容器ID为名的子系统中。
下一篇:Docker的那些事儿—Docker使用的核心底层技术(7)
网友评论