Linux cgroup

Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等)。Linux CGroupCgroup 可让您为系统中所运行任务(进程)的用户定义组群分配资源 — 比如 CPU 时间、系统内存、网络带宽或者这些资源的组合。您可以监控您配置的 cgroup,拒绝 cgroup 访问某些资源,甚至在运行的系统中动态配置您的 cgroup。

主要功能

  • 限制资源使用:比如内存使用上限、文件系统的缓存限制
  • 优先级控制:CPU利用和磁盘IO
  • 挂起、恢复某些进程

相关概念

  • 任务:task,任务就是一个进程
  • 控制族群:control group,是一组按照某种标准划分的进程。cgroups中的资源控制都是以控制族群为单位实现。一个进程可以加入某个控制族群,也可以从一个进程组迁移到另一个控制族群。一个进程组的进程可以使用cgroups以控制族群为单位分配资源,同时受到cgroups以控制族群为单位设定的限制
  • 层级:hierarchy,控制族群可以组织成hierarchical的形式,即一棵控制族群树。控制族群树上的子节点控制族群是父节点控制族群的孩子,继承父控制族群的特定的属性
  • 子系统:subsystem,一个子系统就是一个资源控制器。子系统必须附加到一个层级上才能起作用,一个子系统附加到某个层级以后,这个层级上的所有控制族群都受到这个子系统的控制。

cgroup子系统

  • cpu子系统:限制进程的cpu使用率
  • cpuacct子系统:可以统计cgroup中的进程的cpu使用报告
  • cpuset子系统:可以限制进程的memory使用量
  • memory子系统:可以限制进程的块设备IO
  • blkio子系统:可以控制进程能够访问某些设备
  • devices子系统:可以控制进程能够访问某些设备
  • net_cls子系统:可以标记cgroup中进程的网络数据包,使用tc(traffic control)模块对数据包进行控制
  • net_prio子系统:设计网络流量的优先级
  • freezer子系统:挂起或恢复cgroup中的进程
  • ns子系统:使不同的cgroup下面的进程使用不同的namespace
  • hugetlb子系统:针对于HugeTLB系统进行限制,这是一个大页文件系统

相互关系

  1. 每次在系统中创建新层级时,该系统中的所有任务都是那个层级的默认cgroup(root cgroup,此cgroup在创建层级时自动创建,后面在该层级中创建的cgroup都是此cgroup的后代)的初始成员。
  2. 一个子系统最多只能附加到一个层级
  3. 一个层级可以附加多个子系统
  4. 一个任务可以是多个cgroup的成员,但是这些cgroup必须在不同的层级
  5. 系统中的进程(任务)创建子进程(任务)时,该子任务自动成为其父进程所在cgroup的成员。然后可根据需要将该子任务移动到不同的cgroup中,但开始时它总是继承其父任务的cgroup。

如图所示的 CGroup 层级关系显示,CPU 和 Memory 两个子系统有自己独立的层级系统,而又通过 Task Group 取得关联。

利用cgroup查看进程

cd /proc/XXXX(PID)
cat cgroup

如下图所示:

jyroy@server3:~$ cd /proc/12055
jyroy@server3:/proc/12055$ cat cgroup
12:hugetlb:/docker/c70bfdccf2cf8a5b9108a0d2ede079c7869e5e223ba410060a9064fc09d929a8
11:blkio:/docker/c70bfdccf2cf8a5b9108a0d2ede079c7869e5e223ba410060a9064fc09d929a8
10:perf_event:/docker/c70bfdccf2cf8a5b9108a0d2ede079c7869e5e223ba410060a9064fc09d929a8
9:rdma:/
8:devices:/docker/c70bfdccf2cf8a5b9108a0d2ede079c7869e5e223ba410060a9064fc09d929a8
7:freezer:/docker/c70bfdccf2cf8a5b9108a0d2ede079c7869e5e223ba410060a9064fc09d929a8
6:cpuset:/docker/c70bfdccf2cf8a5b9108a0d2ede079c7869e5e223ba410060a9064fc09d929a8
5:memory:/docker/c70bfdccf2cf8a5b9108a0d2ede079c7869e5e223ba410060a9064fc09d929a8
4:net_cls,net_prio:/docker/c70bfdccf2cf8a5b9108a0d2ede079c7869e5e223ba410060a9064fc09d929a8
3:cpu,cpuacct:/docker/c70bfdccf2cf8a5b9108a0d2ede079c7869e5e223ba410060a9064fc09d929a8
2:pids:/docker/c70bfdccf2cf8a5b9108a0d2ede079c7869e5e223ba410060a9064fc09d929a8
1:name=systemd:/docker/c70bfdccf2cf8a5b9108a0d2ede079c7869e5e223ba410060a9064fc09d929a8
0::/system.slice/containerd.service

然后就可以利用docker容器的id查看docker的情况

jyroy@server3:/proc/12055$ docker ps -a | grep c70bfdc
c70bfdccf2cf pytorch-orion-dev:cu10.0-torch1.5-py36 "bash" 4 days ago Up 4 days pytorch-dev-jyroy

参考文献

CGroup介绍、应用实例及原理描述:https://www.ibm.com/developerworks/cn/linux/1506_cgroup/index.html

Linux cgroup总结:https://www.cnblogs.com/menkeyi/p/10941843.html

Linux CGroup入门的更多相关文章

  1. Linux Cgroup 入门教程:cpuset

    这是 Cgroup 系列的第四篇,往期回顾: Linux Cgroup 入门教程:基本概念 Linux Cgroup 入门教程:CPU Linux Cgroup 入门教程:内存 通过上篇文章的学习,我 ...

  2. IT技术学习指导之Linux系统入门的4个阶段(纯干货带图)

    IT技术学习指导之Linux系统入门的4个阶段(纯干货带图) 全世界60%的人都在使用Linux.几乎没有人没有受到Linux系统的"恩惠",我们享受的大量服务(包括网页服务.聊天 ...

  3. Linux 基础入门(新版)”实验报告一~十二

    实验报告 日期: 2015年9月15日 一.实验的目的与要求 熟练地使用 Linux,本实验介绍 Linux 基本操作,shell 环境下的常用命令. 二.主要内容 1.Linux 基础入门& ...

  4. Linux基础入门学习笔记20135227黄晓妍

    学习计时:共24小时 读书:1小时 代码:8小时 作业:3小时 博客:12小时 一.学习目标 1. 能够独立安装Linux操作系统   2. 能够熟练使用Linux系统的基本命令   3. 熟练使用L ...

  5. Linux 基础入门 第二周9.21~9.27

    一.学习内容 本周主要学习内容主要贴合: 在进行<深入理解计算机系统>这门课的实验中没有遇到什么大问题,学习内容与上周实验<linux基础入门>有相似之处.本实验中的内容比较贴 ...

  6. [转载] linux cgroup

    原文: http://coolshell.cn/articles/17049.html 感谢左耳朵耗子的精彩文章. 前面,我们介绍了Linux Namespace,但是Namespace解决的问题主要 ...

  7. Docker基础技术:Linux CGroup

    前面,我们介绍了Linux Namespace,但是Namespace解决的问题主要是环境隔离的问题,这只是虚拟化中最最基础的一步,我们还需要解决对计算机资源使用上的隔离.也就是说,虽然你通过Name ...

  8. 【转载】茶叶蛋干货!《超容易的Linux系统管理入门书》(连载十)进行动态主机配置DHCP

    使用动态主机配置协议DHCP(Dynamic Host Configuration Protocol)则可以避免网络参数变化后一些繁琐的配置,客户端可以从DHCP服务端检索相关信息并完成相关网络配置, ...

  9. 【转载】绝对干货!Linux小白最佳实践:《超容易的Linux系统管理入门书》(连载九)如何通过源代码安装软件

    除了使用Linux的包管理机制进行软件的安装.更新和卸载,从源代码进行软件的安装也是非常常见的,开源软件提供了源代码包,开发者可以方便的通过源代码进行安装.从源码安装软件一般经过软件配置.编译软件.执 ...

随机推荐

  1. java上下分页窗口流动布局

    上下分页要用到 JSplitPane jSplitPane =new JSplitPane();//设定为拆分布局 效果图: show me code: import java.awt.event.C ...

  2. Java学习日报7.7

    今天进一步学习了eclipse软件,遇到了几次程序运行不成功的问题,检查之后运行成功!明天继续学习程序逻辑控制!

  3. JVM 分代GC策略分析

    JVM 分代GC策略分析   我们以Sun HotSpot VM来进行分析,首先应该知道,如果我们没有指定任何GC策略的时候,JVM默认使用的GC策略.Java虚拟机是按照分代的方式来回收垃圾空间,我 ...

  4. el-input限制只能输入数字(开发小记)

    输入框中限制通常有三种处理方法 第一种:设置type属性(不推荐) 设置type属性为number,text等等,此方法输入框的后面会有不必要样式出现 <el-input type=" ...

  5. java interface和class中的协变

    协变 Java中的协变是指,当发生继承时,子类中重写父类的方法时,可以返回父类方法返回类型的子类型.比如: class SuperClass{} class SubClass extends Supe ...

  6. Elasticsearch java api操作(二)(Java High Level Rest Client)

    一.说明: 一.Elasticsearch提供了两个JAVA REST Client版本: 1.java low level rest client: 低级别的rest客户端,通过http与集群交互, ...

  7. Solon rpc 之 SocketD 协议 - 消息订阅模式

    Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 Soc ...

  8. 集成spring框架的web.xml

    <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" ...

  9. 【Spring】Spring IOC

    Spring IOC IOC 的常用注解 小节源码 之前的 XML 配置: <bean id="accountService" class="cn.parzulpa ...

  10. SWPU2019

    一.题目打开介绍 这是题目本身打开的样子,继续进入题目 二.做题 简单的登陆界面和注册界面,没有sql注入已经尝试 申请发布广告 习惯性的测试 然后开始尝试注入,抓包, 两个都要,经过union注入判 ...