CGroup系列一CGroup简介

Posted 高桐@BILL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CGroup系列一CGroup简介相关的知识,希望对你有一定的参考价值。

写在前面

        CGroup,Control Group,是Linux Kernel对物理资源进行管控配置的一种机制,该机制允许聚集或分割进程集,包括他们将来所有的子任务到一个层级中,并附加指定的规则到该层级。

        CGroup包含多个子系统(如CPU,Memory,IO等),我们可以根据需要按照预先配置的一定规则对其子系统进行合理管控分配,以达到系统资源的精细化管理。因为硬件资源永远是有限的的,对于一些上游厂商来说都是真金白银,更不用说当前缺芯的大背景下,资源都要用在刀刃上。

        本质上,CGroup就是内核附加在程序上的一系列钩子(Hook)。它,我们可以监控系统资源的使用情况,按照一定优先级顺序精细化分配资源,,拒绝指定进程或服务访问系统资源或者有限访问系统资源,以提高系统资源使用效率。这种管理甚至可以发生在系统运行时,也就是说我们可以动态配置CGroup规则。

使用场景案例

术语

  • 层级 Hierarchy,又称CGroup树

  • 子系统 Subsystem,又称CGroup控制器

  • 控制组 CGroup Group ,将多个进程,或任务进行分组管理。


一、CGroup子系统介绍

1.1CGroup V1

1.1.1 blkio - Block IO Controller

这​​​个​​​子​​​系​​​统​​​为​​​块​​​设​​​备​​​设​​​定​​​输​​​入​​​/输​​​出​​​限​​​制​​​,比​​​如​​​物​​​理​​​设​​​备​​​(磁​​​盘​​​,固​​​态​​​硬​​​盘​​​,USB 等​​​等​​​)。​​​

1.1.2 hugetlb - HugeTLB Controller 

该子系统允许限制大页(Huge Page)的使用,huge page常常通过共享内存mamp和shget进行申请。

1.1.3 cpuacct - CPU Accounting Controller

该子​​​系​​​统​​​会自​​​动​​​生​​​成​​​cgroup中​​​任​​​务​​​所​​​使​​​用​​​的​​​CPU报​​​告​​​。​​​

1.1.4 cpuset - CPUSETS

该子​​​系​​​统​​​通过调​​​度​​​程​​​序​​​来管理​​cgroup中任​​​务​​​对CPU访​​​问​​​。并为​​​ cgroup 中​​​的​​​任​​​务​​​分​​​配​​​独​​​立​​​ PU(在​​​多​​​核​​​系​​​统​​​)和​​​内​​​存​​​节​​​点​​​。​​​

1.1.5 devices - Device Whitelist Controller

该子​​​系​​​统​​​可​​​允​​​许​​​或​​​者​​​拒​​​绝​​​cgroup ​​​的​​​任​​​务​​​对指定设备的访问​​​。​​​

1.1.6 freezer - CGroup Freezer

该子​​​系​​​统​​​会挂​​​起​​​或​​​者​​​恢​​​复​​​cgroup中​​​的​​​任​​​务​​​。​​​

1.1.7 memory - Memory Resource Controller(Memcg) Implementation Memo && Memory Resource Controller

该子​​​系​​​统​​​设​​​定会对cgroup 中​​​任​​​务​​​使​​​用​​内​​​存​​​进行限​​​制​​​,并​​​自​​​动​​​生​​​成​​​由​​​那​​​些​​​任​​​务​​​使​​​用​​​的​​​内​​​存​​​资​​​源​​​报​​​告​​​。​​​

1.1.8 net_cls - Network classifier cgroup

该子​​​系​​​统​​​使​​​用​​​等​​​级​​​识​​​别​​​符​​​(classid)标​​​记​​​网​​​络​​​数​​​据​​​包​​​,可​​​允​​​许​​​ Linux 流​​​量​​​控​​​制​​​程​​​序​​​(tc)识​​​别​​​从​​​具​​​体​​​ cgroup 中​​​生​​​成​​​的​​​数​​​据​​​包​​​。​​​

1.1.9 net_prio - Network priority cgroup

该子系统提供了一种方法可以动态的设置每个网络接口的网络流量优先级。

1.1.10 process - Process Number Controller

该子系统允许一个层级停止新任务的创建(fork)和克隆(clone)。

1.1.11 misc - Miscellaneous controller

​​​该子系统为除了其他可以抽象之外的资源提供了资源限制和追踪机制。

1.2 CGroup V2

1.2.1 CPU

该子系统提供了对CPU时钟周期的管控。它实现了对CPU访问权重控制和绝对的带宽限制。

1.2.2 Memory

同上

1.2.3 IO

同上

1.2.4 PID

同上

1.2.5 Cpuset

同上

1.2.6 Device controller

同上

1.2.7 RDAM

该子系统提供了对RDMA资源的分配和统计能力。

1.2.8 HugeTLB

同上

1.2.9 Misc

同上

1.2.10 perf_event

该子系统可以识别任务的cgroup信息,并被用以性能分析。

1.2.11 ns

命名空间子系统

二、如何查询当前系统支持的子系统?

2.1 cgroup-bin

cgroup-bin(ubuntu)

2.2 /sys/fs/cgroup

也可以通过下面这种方式,前提是所有子系统已经被系统挂载;

2.3 /proc/cgroups

2.4 lssubsys

 

 

以上是关于CGroup系列一CGroup简介的主要内容,如果未能解决你的问题,请参考以下文章

CGroup系列九Devices子系统

Kubernetes_从Linux的cgroup配置到Kubernetes中的cgroup配置

CGroup系列六CPUACCT子系统

CGroup系列十四MISC子系统

深入理解 Linux Cgroup 系列:基本概念

CGroup系列十三RDMA子系统