cgroup是control group的简称,称为控制组,主要是为系统用户提供不同类型的资源分配和限制功能,是实现docker的基础。
cgroup主要的功能可以归纳如下:
1、资源限制:资源限制主要体现在进程运行过程中所需要的资源,例如cpu使用配额、内存大小、磁盘访问等
2、设置程序的优先级: 程序的执行优先级可以通过对cpu的使用以及I/O带宽的限制
3、系统资源使用统计:统计cpu运行时间,统计内存使用,统计程序wakeup次数等。
4、进程控制:对cpu进行带宽限制,可以控制进程的运行和挂起。
cgroup支持的子系统
cgroup子系统目前有下列几种: 1. devices 进程范围设备权限 2. cpuset 分配进程可使用的 CPU数和内存节点 3. cpu 控制CPU占有率 4. cpuacct 统计CPU使用情况,例如运行时间,throttled时间 5. memory 限制内存的使用上限 6. freezer 暂停 Cgroup 中的进程 7. net_cls 配合 tc(traffic controller)限制网络带宽 8. net_prio 设置进程的网络流量优先级 9. huge_tlb 限制 HugeTLB 的使用 10. perf_event 允许 Perf 工具基于 Cgroup 分组做性能检测
对于本人来说,本人最关注是红色标记的三点,因为此处本人因为项目开发,涉及到了cgroup这三种子系统,并对其进行了较为深入的分析。
在学习cgroup的时候,本人认为可以分为如下几个阶段:
1、学会使用它,知道怎么挂载、卸载,怎么创建子系统、怎么设置参数。
2、知道每个子系统参数设置的意义,并能熟练修改并且了解修改后发生的变化
3、分析cgroup框架,分析出cgroup之间错综复杂的调用流程,关键结构体之间是怎么联系起来的
4、结合源码分析各子系统各参数的设置的调用流程,并能说明其是怎么实现资源限制的。
5、熟悉cgroup v1和cgroup v2的区别,对比起优劣,并能对cgroup v2中好的方面进行借鉴和改造。
6、发现cgroup在使用中带来的问题,分析原因并优化之。
来源:https://www.cnblogs.com/haoxing990/p/12154414.html