文章目录
简介
Linux cgroups的全称Linux Control Group。它可以限制一个进程组能够使用的资源上限,包括CPU、内存、磁盘、网络带宽等等,还可以对进程进行优先级设置、审计,以及将进程挂起和恢复。
举一个例子,如果需要限制进程A、B一共可以使用第一个核的10%,和20%的内存,就可以使用cgroup技术来实现。
cgroup和namespace技术是linux容器技术的基石,cgroup被用来限制资源使用,namespace被用来隔离进行。它们被广泛用于容器化的场景,比如docker,k8s等。
cgroup以文件系统的方式暴露给用户使用,一般以文件和目录的方式组织在操作系统的/sys/fs/cgroup路径下。
cgroup分为不同的子系统,不同的子系统具有不同的功能,如果要某一个进程要使用某个子系统,只需要将进程id添加到对应的子系统的task文件中即可。
子系统
cgroup包括多个子系统
- cpu 子系统:限制cpu的使用
- memory 子系统:限制内存使用
- cpuset 子系统:可以为进程组分配单独的cpu或者内存节点
- cpuacct 子系统:统计cpu group的使用情况
- blkio 子系统:限制IO,一般用于磁盘
- devices 子系统:限制进程使用的设备
- freezer 子系统:可以挂起和恢复进程组
- net_cls 子系统,可以标记进程组的网络数据包,使用 tc 模块(traffic control)对数据包进行控制<