Cgroup devices 子系统
本文是一系列对 cgroup 说明的文档,已期望说明 cgroup 子系统涉及的所有子系统,本文只对 CpusetGroup 进行说明,本文的目录如下
什么是 cgroup devices ?
cgroup devices 在运行时中是如何实现的 ?
1 什么是 cgroup devices ?
cgroup devices 子系统又称为 Device Whitelist Controller,通过为每个 cgroup 维护一个设备访问权限管理,控制进程对设备文件读写访问权限以及设备文件创建。
一个 cgroup 通常关联一个设备白名单,这个白名单每一条数据由 4 个属性构成
type:代表设备类型,a 代表所有类型设备,c 代表字符设备, b 代表块设备
major: 代表设备主要版本号
minor:代表设备次要版本号
access:r 代表读取,w 代表写入,m 带表在/dev 下创建字符、块设备
以使用为例,使用 linux cpuset 提供的文件系统方式为例
2 cgroup devices 在运行时中是如何实现的 ?
目前的常见的容器技术 docker 底层其实是 runc 的调用实现,
runc 对设备的限制正是通过 cgroup 来实现的,以容器运行时中 runc 中的设置 devices 权限逻辑为列:
查看是否为需要跳过的设备,不跳过进入 2
写入 cgroup.procs 文件 pid(pid=3179850),写入 pid 文件内容。
获取 config 文件对设备对控制权限,生成每个设备一份最小配置文件
在 devices.deny 或者 devices.allow 写入设备控制权限
相应的,查看对应的日志以及文件
运行时中对应的文件目录为/sys/fs/cgroup/devices/user.slice
docker 运行时有时会带上-v /dev:/dev,意思是映射主机所有的设备。
参考文献
https://www.kernel.org/doc/Documentation/cgroup-v1/devices.txt
https://www.slideshare.net/Docker/container-performance-analysis-brendan-gregg-netflix
版权声明: 本文为 InfoQ 作者【总想做点什么】的原创文章。
原文链接:【http://xie.infoq.cn/article/15fff320eb944d33475165790】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论