docker原理讲解2-Cgroups

  linux namespace技术用于帮助进程隔离出自己单独的空间,但是为了对容器进行管理,还需要对每个容器的资源进行限制,保证他们不会互相争夺资源,这就需要用到linux中的Ggroups技术。
Cgroups定义
  linux Cgroups(Control Groups)提供了对一组进程及将来子进程的资源限制、控制和统计的能力,这些资源包括CPU、内存、存储、网络等。通过Cgroups,可以方便地限制某个进程地资源占用,并且可以实时地监控进程地监控和统计信息。
Cgroups组件
  Cgroups主要由以下三个组件组成:

  • cgroup 该组件用于对一组进程进行管理,可以在这个cgroup基础上增加linux subsystem的各种参数配置。将一组进程和一组subsystem的配置关联起来
  • subsystem subsystem是一组资源控制模块,包含下面这些项:
  • blkio 对块设备输入输出的访问
  • cpu 设置一组cgroup中进程cpu被调度的策略
  • cpuacct 可以统计cgroup中进程cpu的占用
  • cpuset 在多核机器上设置cgroup可以使用的cpu和内存
  • devices 控制cgroup中进程对设备的访问
  • freezer 用于挂起和恢复cgroup中的进程
  • memory 用于控制cgroup中进程的内存占用
  • net_cls 用于将cgroup中进程产生的网络包分类,便于linux的tc根据分类进行限流或监控
  • ns 使cgroup中的新进程在新的namespace中fork新进程时,创建出一个新的cgroup。
  • hierarchy 把一组cgroup串成一个树状的结构,通过这种树状结构,Cgroups可以做到集成。docker的继承时通过他来实现的。
    三个组件之间的关系
      一个hierarchy创建后,会有一个cgroup生成,系统中所有的进程都会加入到这个新的cgroup中。一个subsystem只能附加到一个hierarchy上面,但一个hierarchy可以附加多个subsystem。ige进程可以作为多个cgroup的成员,但这些group必须在不同的hierarchy中。一个进程fork出一个子进程时,子进程和父进程都在同一个cgroup中,也可以根据需要将其移动到其他cgroup中。
原文地址:https://www.cnblogs.com/Rostov/p/13544744.html