专栏首页LINUX阅码场张义飞: Container技术之cgroup入门

张义飞: Container技术之cgroup入门

What is Cgroup?


Cgroups 是 control groups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如:cpu,memory,IO 等等)的机制。最初由 google 的工程师提出,后来被整合进 Linux 内核。Cgroups 也是 LXC 为实现虚拟化所使用的资源管理手段,可以说没有 cgroups 就没有 LXC。

摘自Linux Cgroups详解(王喆锋)

What Cgroup can do?

1.限制进程组可以使用的资源数量,限制进程最大使用的内存等 2.进程组的优先级控制,比如为某个进程组分配特定的cpu share 3.记录进程组使用的资源数量,比如记录某个进程CPU的使用时间 4.进程组隔离,比如通过namespace以达到隔离的目的 5.进程组控制,比如可以将进程组挂起或恢复

整理自linux Cgroup详解(王喆锋)

Cgroup Model


进程模型

在说Cgroup的模型之前,先回顾下进程模型,在linux系统上,所有的进程都有一个共同的父进程,叫做init进程,这个进程在内核启动的时候开始执行,然后通过init进程启动其他的进程,这些进程都是init的子进程。因为所有的进程都有一个共同的父进程。那么linux的进程模型就是一个单继承层次的模型,或者称之为树状模型。除此之外每一个linux进程但是除了init进程,都继承了一些环境变量(例如PATH环境变量)

Cgroup Model

Cgroup其实和进程类似: Cgroup也是继承体系,并且子cgroup继承其父cgroup的某些属性,两者最基本的差别在于,进程是单继承体系。而Cgroup可以存在多个不同的继承体系.(意思就是可以有多个单继承体系,每个单继承体系互不影响)

Some concepts of Cgroup


在Cgroup中有这样四个概念,可以说理解了这四个概念,那么对于如何使用cgroup,将会是如鱼得水。

  • Subsystems: 称之为子系统,一个子系统就是一个资源控制器,比如 cpu子系统就是控制cpu时间分配的一个控制器。
  • Hierarchies: 可以称之为层次体系也可以称之为继承体系,指的是Control Groups是按照层次体系的关系进行组织的。
  • Control Groups: 一组按照某种标准划分的进程。进程可以从一个Control Groups迁移到另外一个Control Groups中,同时Control Groups中的进程也会受到这个组的资源限制。
  • Tasks: 在cgroups中,Tasks就是系统的一个进程。

Subsystems


在Red_Hat_Enterprise_Linux-6系列的linux中,默认提供了如下子系统。

  • blkio这个子系统为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等等) 。
  • cpu这个子系统使用调度程序提供对 CPU 的 cgroup 任务访问。
  • cpuacct这个子系统自动生成 cgroup 中任务所使用的 CPU 报告。
  • cpuset这个子系统为 cgroup 中的任务分配独立 CPU(在多核系统)和内存节点。
  • devices这个子系统可允许或者拒绝 cgroup 中的任务访问设备。
  • freezer这个子系统挂起或者恢复 cgroup 中的任务。
  • memory这个子系统设定 cgroup 中任务使用的内存限制,并自动生成由那些任务使用的内存资源报告。
  • net_cls这个子系统使用等级识别符(classid)标记网络数据包,可允许 Linux 流量控制程序(tc)识别从具体 cgroup 中生成的数据包。
  • ns名称空间子系统。

Relationships Between Subsystems, Hierarchies, Control Groups and Tasks

这个部分恐怕是这篇文章的重点了吧,这个部分我主要参考红帽的关于资源管理的手册在这个部分通过引入4条规则,来帮助我们更好的去理解这个四者的关系。

  • 规则1,一个单继承体系(单层次体系)可以附加1个或者多个子系统

在上面的这个图中,Cpu和Memory两个子系统附加到了cpu_mem_cg的这个继承体系中cg1和cg2是两个Control Groups,但是需要注意的是,如果此前有Cpu或者Memory子系统附加到q其它继承体系中的,那么Cpu或者Memory就不能再次附加到cpu_mem_cg这个继承体系中了。

  • 规则2,一个子系统,不能被附加到多个继承体系中。

其实这条规则我已经在规则1中简单的进行了阐述,上面的这副图中,可以看出CPU子系统已经被附加到左侧的cpu_cg这个继承体系中了,当cpu子系统要再次被附加到cpu_mem_cg的时候,会发生附加失败。

  • 规则3,每当在系统中创建一个继承体系的时候,会默认再创建一个control groups,并且这个control groups被称之为root cgroup,此时整个系统中的tasks(进程)都属于这个root cgroup。系统中的进程,在一个继承体系中都明确的属于一个control groups,并且这个进程可以从一个control groups移动到另外一个control groups中,但是需要主要的是,在一个继承体系中一个进程是没办法同时属于两个control groups的,但是一个进程可以同时属于两个不同的继承体系中的control groups。

在上面的这副图中可以看出httpd这个进程无法同时属于A继承体系中的cg1和cg2这两个control groups,但是httpd进程却可以同时属于A继承体系中的cg1和B继承体系中的cg3。

  • 规则4,系统上的任何task(进程)通过fork创建子task(进程)的时候,这个子task(进程),自动继承其父task(进程)的control groups,成为这个control groups的一员。此后这个子task(进程)可以移动到其他control groups中,父task(进程)和子task(进程)完全独立。

在上面的这副图中,可以看出httpd进程fork出来的子进程仍然是属于cg1这个control group的。

Reference


本文主要参考红帽关于资源管理的红皮书。和王喆锋的Linux Cgroups详解 Red_Hat_Enterprise_Linux-6-Resource_Management_Guide-en-US Linux Cgroups详解

本文分享自微信公众号 - Linux阅码场(LinuxDev),作者:张义飞

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 4分钟理解Linux为什么不是一个硬实时的操作系统

    下面的一段小视频用最短时间解释了Linux为什么不能硬实时,哪几类区间里面不能抢占:

    Linux阅码场
  • Fork三部曲之clone的诞生

    在本文中,传统UNIX fork之后,我给出传统的UNIX fork在Linux内核中的变体clone系统调用的精彩。

    Linux阅码场
  • 无锁队列的实现

    关于无锁队列的实现,网上有很多文章,虽然本文可能和那些文章有所重复,但是我还是想以我自己的方式把这些文章中的重要的知识点串起来和大家讲一讲这个技术。下面开始正文...

    Linux阅码场
  • 被做空五次的跟谁学,到底跟谁有仇?

    在瑞幸惨遭做空自爆财务造假之后,众多做空机构像饿狼一样死死盯着小绵羊般瑟瑟发抖的中概股,想尽办法找出漏洞,争做合格的“空军”。

    金融外参
  • MySQL 数据库锁定机制

    1. MySQL 锁定机制简介 各存储引擎使用三种类型锁定机制 行级锁定(row-level) 表级锁定(table-level) 页级锁定(page...

    wangxl
  • 伯克利用120万美元设备24分钟训练ImageNet,刷新Facebook成绩

    李林 编译整理 量子位 报道 | 公众号 QbitAI 最近,加州大学伯克利分校的研究人员用120万美元的设备,24分钟完成了ImageNet的训练。 ? 在最...

    量子位
  • Jetpack:Lifecycle

    通常我们都会用MVP模式把业务逻辑和数据处理分开,但是这样做有个小问题:如果在某个生命周期还有别的类要监听 Activity 生命周期变化,那也需要添加许多生命...

    提莫队长
  • (译)不要被锁定在反锁定的路上

    架构师的主要职责之一就是提供选择。这些选项让系统能够容忍变化,有了选择的自由,我们可以耐心的等待信息完整之后才作出决定,以及应对一些预计外的事件。锁定的含义则刚...

    崔秀龙
  • Python Socket传输图片

    我们在传输数据时,经常使用tcp/ip的服务器和客户端模型,很多设备也经常将网口作为硬件接口预留出来。可以使用tcp/ip传输图像、大的文件等,如果图片过大,还...

    用户5908113
  • 在 k8s集群中安装 metrics-server

    keepyan

扫码关注云+社区

领取腾讯云代金券