网站首页 > 技术文章 正文
本文对cgroup已期望说明以下内容:
- 什么是cgroups ?
- 为什么需要cgroups ?
- cgroups是怎么实现的?
- 如何使用cgroups ?
1 什么是cgroups ?
cgroups提供了一套管理进程(子进程)资源控制机制。
定义了以下专业术语: cgroup:使用一个或多个subsystems的参数集合来控制一组任务集合。 subsystem:subsystem是内核提供的管理特定资源的资源控制器。 hierarchy:hierarchy是一个逻辑概念,cgroup按照subsystem进行分类, 形成一系列cgroups,并以tree的结构组织,hierarchy这里指的是类似tree 层级。每个hierarchy层级可以映射到操作系统中的虚拟文件系统, 每个subsystem映射到一颗cgroup tree。
用户态程序会使用cgroup虚拟文件系统对应的名字来创建、删除cgroup实例、设置 或查询任务所在的cgroup。这些操作只影响cgroup文件系统中关联的cgroup实例所在的hierarchy。
2 为什么需要cgroups?
Linux内核为了使用了多种技术(cpusets, CKRM/ResGroups, UserBeanCounters, 以及virtual servernamespaces)管理进程。这些技术都需要对进程分组/分区。
内核提供的cgroup提供了一套内核机制。 举例来说:
echo pid > /sys/fs/cgroup/network/<new_class>/tasks
只需要把管理的任务写入,即可达到对某一资源的控制(如network)。
3 cgroup是如何实现的?
cgroups扩展了内核以下内容:
- 每个任务在系统中指向一个css_set结构体指针.
- 一个css_set 含有一系列指向 cgroup_subsys_state结构体的指针, 每个cgroup_subsys_state对应一个 cgroup subsystem.
- cgroup hierarchy 文件可以被挂载浏览、执行用户态操作.
- 查看cgroup下所有的任务PID.
具体在内核中如何通过css_set管理不在本文讨论范围之内。
在文件夹目录下,可以看到cgroup含有以下文件夹内容:
- tasks: 一系列的pids. 将进程ID写入这个文件会将其移动到这个cgroup.
- cgroup.procs: 一系列的进程组IDs.将进程组ID写入这个文件会将其移动到这个cgroup.
- notify_on_release flag: 是否运行release agent?
- release_agent: 用于发布通知的路径(此文件仅存在于顶级 cgroup)
cgroups可以使用mkdir系统调用或者shell命令创建,cgroup的属性则可以通过修改相应的 文件内容进行修改。
美团对这个架构图有一个绘制,如图1所示。
4 如何使用cgroups ?
以一个httpd程序pid=51656程序为例,需要限制httpd cpu使用2,3, mem使用1限制,net限制使用cg3中已有的配置内容。
## 限制cpu、mem使用
cd /sys/fs/cgroup/cpu_mem_cg
mkdir cg2
cd cg2
/bin/echo 2-3 > cpuset.cpus
/bin/echo 1 > cpuset.mems
/bin/echo 51565 > tasks
## 限制net使用
cd /sys/fs/cgroup/net/cg3
/bin/echo 51565 > tasks
参考文献
[linux资源管理之cgroups简介] https://tech.meituan.com/2015/03/31/cgroups.html
[Linux kernel cgroups-v1] https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt
猜你喜欢
- 2024-12-31 Redis 持久化策略浅析
- 2024-12-31 Kubernetes计算资源管理
- 2024-12-31 Netcat - 你需要知道的一切
- 2024-12-31 多通道输出可调的PCM信号源设计
- 2024-12-31 SDN、OpenFlow、OpenDaylight,到底是什么关系?
- 2024-12-31 极简的wrk安装和使用教程
- 2024-12-31 Systrace 的原理、流程及定制
- 2024-12-31 基于FIMC接口的CMOS摄像头驱动分析与设计
- 2024-12-31 Linux 内核中的 Device Mapper 机制
- 2024-12-31 如何利用 Docker 环境加速 Android 应用的构建
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)