1. cgroups 的简介
cgroups (control groups) 是linux 内核提供的一种可以分配给单个进程和多个进程资源,并可以对cpu、mem(io、disk、traffic 现在应该还不支持)进行精细化控制。比如一台处理机有32core 128G内存;这台机器设置最多跑6个application(进程);1个进程申请 8core 20G;1个进程申请16core 64G;1个进程申请 2core 8G 等等,这些都可以通过cgroups 进行按需分配(前提是机器还有资源),如果这台机器没有那调度系统会分配其他的处理机器
2. cgroups 的概念和原理
cgroups 为每种可以精细化控制的资源定义了一个子系统,典型的子系统如下:
- cpu 子系统: 主要限制进程cpu的使用率(也可以理解为限制分配给cpu的core,最终限制是cpu 利用率的限制;比如一共32core 分配4core ,那这个进程cpu 最大占用率 = 12.5%,所以一个进程可以申请< 1core,因为最后是转换成比率来控制的
- cpuacct 子系统:统计每个进程cpu 使用率的报告,如果达到预定的上限,可以采取一定的措施
- cpuset 子系统:可以为进程分配单独的cpu节点或者mem节点,可以理解为为进程分配指定的额cpu占有率,就是精细化控制cpu资源
- memery 子系统:可以限制进程memery 最大的使用量
- blkio 子系统:可以限制进程访问的块设备io
- device 子系统:可以控制访问的设备
- net_cls 子系统:标记cg