当前位置: 首页 > news >正文

Cgroup 控制组学习(一)

一 、cgroup

①  CGroups概述

CGroups 全称为 'Linux Control Group',其作用是'限制'一组'进程'使用的'资源'上限思考1:既然是限制'进程'使用的'资源',为什么又说CGroups是容器技术'核心实现'原理之一思考2:限制哪些'资源'? 备注:后续性能'优化'会用到这些'资源指标'+++++++++++++++++++++++  "分割线"   +++++++++++++++++++++++引出:容器'本质'或者说对外表现,本身就是所寄托'宿主机'的一个'进程[process]'引申:容器中的'资源管理'是通过'cgroup'实现的  --> '怎么管理的?'

②  CGroups 的四个基本概念

(0) 'CGroup' 即'控制组'1、一个控制组就是一组'按照某种标准划分'的 Tasks2、可以理解为资源限制是以'进程组'为单位实现的3、一个进程'加入'到某个控制组后,就会受到'相应配置'的资源限制(1) '子系统'1、cgroups中最关键的是一个概念就是到'子系统 subsystem'2、每一个subsystem代表一种'资源的控制能力'3、每个subsystem下可以建立'cgroups控制组',并写入'进程号',以起到对进行'限制资源'的作用(2) 'Task'在 cgroup 中,task 可以理解为一个进程,实际上是'进程 ID' 和'线程 ID 列表'(3) Hierarchy  '层级结构'1、cgroup 的'层级'组织关系,cgroup 以'树形'层级组织2、每个 cgroup 子节点'默认继承'其父 cgroup 节点的配置属性   --> '继承'3、这样每个 Hierarchy 在'初始化'会有 root cgroup

一文搞懂ss/css/css_set/cgroup/hierarchy的关系

③  cgroup的工作原理

++++++++++++++++++++++++++++++++++"三步走原理"++++++++++++++++++++++++++++++++++1、创建'控制组'1) 在 Linux 中,通过在文件系统'/sys/fs/cgroup'中创建'目录'来创建'控制组'2) 每个目录对应'一个'控制组2、进行资源'限制'1) 每个 Cgroup 目录下都会有一些'文件',这些文件对应于'不同资源'的限制2) 管理员可以通过'echo 写入'这些文件来控制资源备注:无法通过'vi/vim'方式进行编辑3) 例如:[1]、通过 'memory.limit_in_bytes' 文件可以设置'内存'的限制[2]、通过 'cpu.cfs_quota_us' 文件可以限制 'CPU' 使用的'时间'3、进程加入 Cgroup '控制组'[1]、可以通过将'进程的 PID' 写入到 Cgroup 目录控制组的 'tasks' 文件中[2]、将该进程'加入'到相应的 Cgroup 中,之后'进程的资源'使用将受到该 Cgroup 配置的限制

④  SubSystem 子系统

问题:查看'当前机器'的cgroup都支持对'哪些资源'进行控制? 查看cgroup 能限制哪些资源?需求0:查看当前'支持的所有subsys 子系统'lssubsys -a

需求1:查看'单个subsys'挂载的hierarchylssubsys –m cpu需求2:查看当前'所有subsys'与对应的'挂载点'lssubsys -am

hugetlb和hugepage技术分析   使用 hugetlb 提升性能

说明: cgroup 'v1'和'v2'版本限制的资源不同
​
1、查看'cgroups 版本' --> 'cgroup v1'

cgroup v1和v2的区别

cgroup v1和v2的区别    判断cgroup是v1还是v2

cat /proc/cgroups说明:在/proc/cgroups中可以看见'被编译进当前内核'的所有'subsystem'

需求:查看当前'所有'cgroup   --> 'lscgroup'  --> 这里只过滤'mysqld'服务

输出格式:'subsystem:/*/*'   --> 与'层级目录'的关系

⑤  CGroups特点

在'使用 CGroups' 时需要'先挂载',我们可以使用 'df -h | grep cgroup' 命令进行查看

 

cgroup 其实是一种'文件系统'类型,所有的操作都是通过'文件'来完成的备注:可以使用 'mount --type cgroup'命令查看当前系统'挂载了'哪些 cgroup:

http://www.xdnf.cn/news/1188775.html

相关文章:

  • 基于深度学习的图像分类:使用Inception-v3实现高效分类
  • 前端基础知识Vue系列 - 29(怎么处理vue项目中的错误)
  • vue 脚手架配置代理
  • RS485转Profinet网关配置指南:高效启动JRT激光测距传感器测量模式
  • 深入解析三大Web安全威胁:文件上传漏洞、SQL注入漏洞与WebShell
  • Qt 线程池设计与实现
  • HTML 音频/视频
  • 从一个“诡异“的C++程序理解状态机、防抖与系统交互
  • 2025年02月11日 Go生态洞察:Go 1.24 发布亮点全面剖析
  • 二叉搜索树(Binary Search Tree)详解与java实现
  • 【RK3568 PWM 子系统(SG90)驱动开发详解】
  • 记录和分享抓取的数字货币和大A时序数据
  • k8s:将打包好的 Kubernetes 集群镜像推送到Harbor私有镜像仓库
  • 容器化成本优化:K8s资源请求与限制的黄金法则——从资源画像分析到25%成本削减的实战指南
  • python面向对象编程详解
  • k8s之控制器详解
  • Go语言unsafe包深度解析
  • Go 多模块仓库标签管理教程
  • 嵌入式硬件篇---zigbee无线串口通信问题解决方法
  • Android 修改系统时间源码阅读
  • Linux的生态与软件安装
  • 主要分布在腹侧海马体(vHPC)CA1区域(vCA1)的混合调谐细胞(mixed-tuning cells)对NLP中的深层语义分析的积极影响和启示
  • 车载诊断刷写 --- Flash关于擦除和写入大小
  • 【MySQL】深入浅出事务:保证数据一致性的核心武器
  • 深度解析 noisereduce:开源音频降噪库实践
  • 【影刀RPA_初级课程_我的第一个机器人】
  • LeetCode|Day26|191. 位 1 的个数|Python刷题笔记
  • 像素、视野、光源,都有哪些因素影响测量精度?
  • DSP在CCS中实现双核在线仿真调试及下载的方法(以TMS320F28x为例)
  • 【Redis】 Redis 基础命令和原理