Linux CGroup入门
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系统进行限制,这是一个大页文件系统
相互关系
- 每次在系统中创建新层级时,该系统中的所有任务都是那个层级的默认cgroup(root cgroup,此cgroup在创建层级时自动创建,后面在该层级中创建的cgroup都是此cgroup的后代)的初始成员。
- 一个子系统最多只能附加到一个层级
- 一个层级可以附加多个子系统
- 一个任务可以是多个cgroup的成员,但是这些cgroup必须在不同的层级
- 系统中的进程(任务)创建子进程(任务)时,该子任务自动成为其父进程所在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入门的更多相关文章
- Linux Cgroup 入门教程:cpuset
这是 Cgroup 系列的第四篇,往期回顾: Linux Cgroup 入门教程:基本概念 Linux Cgroup 入门教程:CPU Linux Cgroup 入门教程:内存 通过上篇文章的学习,我 ...
- IT技术学习指导之Linux系统入门的4个阶段(纯干货带图)
IT技术学习指导之Linux系统入门的4个阶段(纯干货带图) 全世界60%的人都在使用Linux.几乎没有人没有受到Linux系统的"恩惠",我们享受的大量服务(包括网页服务.聊天 ...
- Linux 基础入门(新版)”实验报告一~十二
实验报告 日期: 2015年9月15日 一.实验的目的与要求 熟练地使用 Linux,本实验介绍 Linux 基本操作,shell 环境下的常用命令. 二.主要内容 1.Linux 基础入门& ...
- Linux基础入门学习笔记20135227黄晓妍
学习计时:共24小时 读书:1小时 代码:8小时 作业:3小时 博客:12小时 一.学习目标 1. 能够独立安装Linux操作系统 2. 能够熟练使用Linux系统的基本命令 3. 熟练使用L ...
- Linux 基础入门 第二周9.21~9.27
一.学习内容 本周主要学习内容主要贴合: 在进行<深入理解计算机系统>这门课的实验中没有遇到什么大问题,学习内容与上周实验<linux基础入门>有相似之处.本实验中的内容比较贴 ...
- [转载] linux cgroup
原文: http://coolshell.cn/articles/17049.html 感谢左耳朵耗子的精彩文章. 前面,我们介绍了Linux Namespace,但是Namespace解决的问题主要 ...
- Docker基础技术:Linux CGroup
前面,我们介绍了Linux Namespace,但是Namespace解决的问题主要是环境隔离的问题,这只是虚拟化中最最基础的一步,我们还需要解决对计算机资源使用上的隔离.也就是说,虽然你通过Name ...
- 【转载】茶叶蛋干货!《超容易的Linux系统管理入门书》(连载十)进行动态主机配置DHCP
使用动态主机配置协议DHCP(Dynamic Host Configuration Protocol)则可以避免网络参数变化后一些繁琐的配置,客户端可以从DHCP服务端检索相关信息并完成相关网络配置, ...
- 【转载】绝对干货!Linux小白最佳实践:《超容易的Linux系统管理入门书》(连载九)如何通过源代码安装软件
除了使用Linux的包管理机制进行软件的安装.更新和卸载,从源代码进行软件的安装也是非常常见的,开源软件提供了源代码包,开发者可以方便的通过源代码进行安装.从源码安装软件一般经过软件配置.编译软件.执 ...
随机推荐
- WIN10系统下静态编译Qt4.8.7
qt-everywhere-opensource-src-4.8.7.tar.gz http://download.qt.io/archive/qt/4.8/4.8.7/qt-everywhere- ...
- C++作用域限定符:private/public与protected
C++的作用域限定符其实涉及到了C++特性中的封装和继承. public/private:涉及类的封装特性.对于一个类需要对外展示的部分,我们可以将其声明为public,对于不希望对外展示的,我们将其 ...
- AjaxControlToolKit CalendarExtender(日历扩展控件)的使用方法
设置CalendarExtender的TargetControlID为需要显示日期的TextBox的ID,textBox控件的readOnly属性设置为 false ,这样就可以点击textbox控件 ...
- 深入了解MySQL主从复制的原理
欢迎微信关注「SH的全栈笔记」 0. 主从复制 首先主从复制是什么?简单来说是让一台MySQL服务器去复制另一台MySQL的数据,使两个服务器的数据保持一致. 这种方式与Redis的主从复制的思路没有 ...
- WPF APP 启动时增加特殊逻辑
public partial class App : Application { public App() { this.Startup += (o1, e1)=>{ string comman ...
- dhcp分发地址以及静态路由设置
路由器R1配置: system-view [Huawei]sysname R1 [R1]user-interface console 0 [R1-ui-console0]idle-timeout 0 ...
- k8s之RBAC授权模式
导读 上一篇说了k8s的授权管理,这一篇就来详细看一下RBAC授权模式的使用 RBAC授权模式 基于角色的访问控制,启用此模式,需要在API Server的启动参数上添加如下配置,(k8s默然采用此授 ...
- 九:APP及其他资产
APP提取一键反编译提取 APP抓数据包进行工具配合 各种第三方应用相关探针技术 各种服务器接口相关探针技术 APP提取及抓包及后续配合 某APK一键提取反编译 利用burp历史抓更多URL 某IP无 ...
- 安装Tomcat 9
文章目录 访问Tomcat官网 选择下载所需的软件包 安装Tomcat 测试安装 访问Tomcat官网 Tomcat官方的下载地址为:https://tomcat.apache.org/downloa ...
- 【Oracle】查看哪些用户被授予了DBA权限
查看哪些用户被授予了DBA权限 select * from dba_role_privs where granted_role='DBA'; 回收权限: revoke dba from xxx;