Linux cgroup技术

news2024/11/23 23:59:54

cgroup 全称是 control group,顾名思义,它是用来做“控制”的。控制什么东西呢?当然是资源的使用了。

cgroup 定义了下面的一系列子系统,每个子系统用于控制某一类资源。

  • CPU 子系统,主要限制进程的 CPU 使用率。
  • cpuacct 子系统,可以统计 cgroup 中的进程的 CPU 使用报告。
  • cpuset 子系统,可以为 cgroup 中的进程分配单独的 CPU 节点或者内存节点。
  • memory 子系统,可以限制进程的 Memory 使用量。
  • blkio 子系统,可以限制进程的块设备 IO。
  • devices 子系统,可以控制进程能够访问某些设备。
  • net_cls 子系统,可以标记 cgroups 中进程的网络数据包,然后可以使用 tc 模块(traffic control)对数据包进行控制。
  • freezer 子系统,可以挂起或者恢复 cgroup 中的进程。

在 Linux 上,为了操作 cgroup,有一个专门的 cgroup 文件系统,我们运行 mount 命令可以查看。

# mount -t cgroup
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_prio,net_cls)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)

cgroup 文件系统多挂载到 /sys/fs/cgroup 下,通过上面的命令行,我们可以看到我们可以用 cgroup 控制哪些资源。

在 /sys/fs/cgroup/ 下面能看到下面的目录结构。

drwxr-xr-x 5 root root  0 May 30 17:00 blkio
lrwxrwxrwx 1 root root 11 May 30 17:00 cpu -> cpu,cpuacct
lrwxrwxrwx 1 root root 11 May 30 17:00 cpuacct -> cpu,cpuacct
drwxr-xr-x 5 root root  0 May 30 17:00 cpu,cpuacct
drwxr-xr-x 3 root root  0 May 30 17:00 cpuset
drwxr-xr-x 5 root root  0 May 30 17:00 devices
drwxr-xr-x 3 root root  0 May 30 17:00 freezer
drwxr-xr-x 3 root root  0 May 30 17:00 hugetlb
drwxr-xr-x 5 root root  0 May 30 17:00 memory
lrwxrwxrwx 1 root root 16 May 30 17:00 net_cls -> net_cls,net_prio
drwxr-xr-x 3 root root  0 May 30 17:00 net_cls,net_prio
lrwxrwxrwx 1 root root 16 May 30 17:00 net_prio -> net_cls,net_prio
drwxr-xr-x 3 root root  0 May 30 17:00 perf_event
drwxr-xr-x 5 root root  0 May 30 17:00 pids
drwxr-xr-x 5 root root  0 May 30 17:00 systemd

 cgroup 对于 Docker 资源的控制,在用户态的表现如下图所示:

cgroup 是一种特殊的文件系统。它的定义如下:

struct file_system_type cgroup_fs_type = {
  .name = "cgroup",
  .mount = cgroup_mount,
  .kill_sb = cgroup_kill_sb,
  .fs_flags = FS_USERNS_MOUNT,
};

内核中 cgroup 的工作机制:

第一步,系统初始化的时候,初始化 cgroup 的各个子系统的操作函数,分配各个子系统的数据结构。

第二步,mount cgroup 文件系统,创建文件系统的树形结构,以及操作函数。

第三步,写入 cgroup 文件,设置 cpu 或者 memory 的相关参数,这个时候文件系统的操作函数会调用到 cgroup 子系统的操作函数,从而将参数设置到 cgroup 子系统的数据结构中。

第四步,写入 tasks 文件,将进程交给某个 cgroup 进行管理,因为 tasks 文件也是一个 cgroup 文件,统一会调用文件系统的操作函数进而调用 cgroup 子系统的操作函数,将 cgroup 子系统的数据结构和进程关联起来。

第五步,对于 CPU 来讲,会修改 scheduled entity,放入相应的队列里面去,从而下次调度的时候就起作用了。对于内存的 cgroup 设定,只有在申请内存的时候才起作用。

此文章为12月Day5学习笔记,内容来源于极客时间《趣谈Linux操作系统》,推荐该课程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1288251.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

王道数据结构课后代码题p175 06.已知一棵树的层次序列及每个结点的度,编写算法构造此树的孩子-兄弟链表。(c语言代码实现)

/* 此树为 A B C D E F G 孩子-兄弟链表为 A B E C F G D */ 本题代码如下 void createtree(tree* t, char a[], int degree[], int n) {// 为B数组分配内存tree* B (tree*)malloc(sizeof(tree) * n);int i 0;i…

CENTOS 7 添加黑名单禁止IP访问服务器

一、通过 firewall 添加单个黑名单 只需要把ip添加到 /etc/hosts.deny 文件即可,格式 sshd:$IP:deny vim /etc/hosts.deny# 禁止访问sshd:*.*.*.*:deny# 允许的访问sshd:.*.*.*:allowsshd:.*.*.*:allow 二、多次失败登录即封掉IP,防止暴力破解的脚本…

搞程序权益系统v1.1

继1.0出来后我就把antdui换成elem 新增号卡功能现在只支持对接号氪系统 大家问我这个程序到底有什么用,我这边已经在写和WordPress对接文件,到时候在WordPress网站打开该程序就可以把订单同步到你的程序里面去,当然自己有集成能力也可以到小…

FairGuard无缝兼容小米澎湃OS、ColorOS 14 、鸿蒙4!

随着移动互联网时代的发展,各大手机厂商为打造生态系统、构建自身的技术壁垒,纷纷投身自研操作系统。 而对于一款游戏安全产品,在不同操作系统下,是否能够无缝兼容并且提供稳定的、高强度的加密保护,成了行业的一大痛…

python笔记:dtaidistance

1 介绍 用于DTW的库纯Python实现和更快的C语言实现 2 DTW举例 2.1 绘制warping 路径 from dtaidistance import dtw from dtaidistance import dtw_visualisation as dtwvis import numpy as np import matplotlib.pyplot as plts1 np.array([0., 0, 1, 2, 1, 0, 1, 0, 0…

Redis 命令全解析之 String类型

文章目录 ⛄String 介绍⛄命令⛄对应 RedisTemplate API⛄应用场景 ⛄String 介绍 String 类型,也就是字符串类型,是Redis中最简单的存储类型。 其value是字符串,不过根据字符串的格式不同,又可以分为3类: ● string&…

javaScript(四):函数和常用对象

文章目录 1、函数介绍2、函数的作用3、函数语法4、常用对象:数组5、常用对象:String6、常用对象:自定义对象 1、函数介绍 函数是一段可重复使用的代码块,用于执行特定任务或计算并返回结果。 函数由以下几个要素组成: …

2024最新电脑系统清理软件哪个好用?

基本上,不管是win版还是Mac版的电脑,其装机必备就是一款电脑系统清理软件,就比如Mac,目前在市面上,电脑系统清理软件是非常多的。 对于不熟悉系统的用户来说,使用一些小众工具,往往很多用户都不…

Flask项目Day1,Flask常见第三方拓展包

拉项目 git clone https://gitee.com/hahaguai007/python-flask-mysql.git git clone 项目地址运行后即可获取项目 2.创建数据库 在MySQL中创建一个数据库,名字自己定,然后修改RealProject\settings.py里的SQLALCHEMY_DATABASE_URI,格式为 …

一部,即全部,十年超越之作一加12售价4299元起

2023 年 12 月 5 日,一加正式发布十年旗舰一加 12。作为一加十年超越之作,一加 12 秉持「产品力优先」理念,带来多项领先行业的首创技术。一加 12 全球首发拥有医疗级护眼方案和行业第一 4500nit 峰值亮度的 2K 东方屏,完整搭载 F…

【Intel/Altera】 全系列FPGA最新汇总说明,持续更新中

前言 2023年11月14日英特尔 FPGA中国技术日,Intel刚发布了新的FPGA系列,官网信息太多,我这里结合以前的信息,简单汇总更新一下,方便大家快速了解Intel/Altera FPGA家族。 目录 前言 Altera和Intel 型号汇总 1. Agi…

【五分钟】学会利用cv2.resize()函数实现图像缩放

引言 在numpy知识库:深入理解numpy.resize函数和数组的resize方法中,小编较为详细地探讨了numpy的resize函数背后的机理。从结果来看,numpy.resize函数并不适合对图像进行缩放操作。而opencv中的resize函数虽然和numpy的resize函数同名&…

Python爬虫技术:如何利用ip地址爬取动态网页

目录 一、引言 二、Python爬虫基础 三、动态网页结构分析 四、利用ip地址爬取动态网页 1、找到需要爬取的动态网页的URL结构 2、构造请求参数 3、发送请求并获取响应 4、解析响应内容 五、实例代码 六、注意事项 七、总结 一、引言 随着互联网的快速发展&#xff0…

调研37位程序员后,我不再因为AI而焦虑 feat.脑放电波

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 杜1- 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo Nixon 的毕业论文研究了37位程序员使用GPT 写代码的状态,我们邀请了懂编程 且 具备一定技术团队管理经验的科技乱炖朱峰、小…

数据结构第二次作业——递归、树、图【考点罗列//错题正解//题目解析】

目录 一、选择题 ——递归—— 1.【单选题】 ——递归的相关知识点 2.【单选题】——递归的应用 3.【单选题】——递归的实现结构 4.【单选题】——递归的执行与实现 5.【单选题】 ——递归算法 ——树—— 6.【单选题】 ——树的结构 *7.【单选题】——树的知识点 …

【Unity3D】Android打包报错AAPT2:xxx Linkxxx

Gradle Plugin 与Gradle版本不匹配问题 或 相关依赖库下载不完全问题; 使用镜像即可解决 也可以离线(离线过于复杂 你能找到方法那最好是离线Maven) 仓库服务 找最新可用的镜像url,替换google()和jcenter(), 可以直接使用publ…

Ant Design、Element组件:时间日期选择器限制选择范围的几种场景及区别

目录 第一章 Ant Design时间日期选择器限制选择范围的几种场景 需求一:选择今天之前的日期(分为包括今天以及不包括今天) 需求二:设置选择今天之后的日期(分为今天以及今天之后) 需求三:设置…

Temu发货数据:了解拼多多旗下跨境电商平台的物流方式和发货量

作为拼多多旗下的跨境电商平台,Temu通过全托管模式将卖家的货品把控权集中在平台买手身上。本文将为您揭示Temu的发货方式以及每天的出口包裹量,帮助您更好地了解这一平台的物流运作。 先给大家推荐一款拼多多/temu运营工具——多多情报通 多多情报通是拼…

数学建模-基于机器学习的家政行业整体素质提升因素分析

基于机器学习的家政行业整体素质提升因素分析 整体求解过程概述(摘要) 家政服务业即为家庭提供多种类服务的专门行业,在第三产业中占有重要地位。但近年来,由于人工智能家居产业的发展与客户对家政从业者的要求水平不断提高,家政行业仍面对较…

【TiDB理论知识04】TiKV-分布式事务与MVCC

分布式事务 下面一个事务 里面有两个更新,分别将id1的Tom改为Jack,将id2的zhangsan 改为 lisi。在MySQL中这个事务很普通,但是在分布式数据库TiDB 中的会遇到什么问题呢? begin; (1,Tom) --> (1,Jack) (2,zhangsan) --> (2,lisi) commit; 比如(…