58 | cgroup技术:内部创业公司应该独立核算成本
刘超
该思维导图由 AI 生成,仅供参考
我们前面说了,容器实现封闭的环境主要靠两种技术,一种是“看起来是隔离”的技术 Namespace,另一种是用起来是隔离的技术 cgroup。
上一节我们讲了“看起来隔离“的技术 Namespace,这一节我们就来看一下“用起来隔离“的技术 cgroup。
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 中的进程。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了cgroup在内核中的工作机制,重点关注了其在容器环境中的重要资源控制作用。通过验证Docker参数与cgroup的映射关系,展示了在Linux上操作cgroup的专门文件系统。文章详细解释了如何通过cgroup文件系统控制各种资源的使用,包括CPU和内存的限制效果。此外,还介绍了cgroup对Docker资源的控制方式,以及在内核中cgroup的实现机制。通过对cgroup_subsys数组的循环和cgroup_init_subsys的调用,阐述了cgroup在系统初始化时的初始化过程。整体而言,本文通过深入的技术分析,为读者提供了对cgroup技术在容器环境中的重要作用和实现原理的全面了解。文章内容涵盖了cgroup在内核中的初始化过程、文件系统的创建、资源控制的实现以及与Docker资源控制的关联,为读者呈现了cgroup技术的全貌。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《趣谈 Linux 操作系统》,新⼈⾸单¥68
《趣谈 Linux 操作系统》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(13)
- 最新
- 精选
- 安排Cgroup文件系统是只存在内存中吗?每一次设置之后在掉电后是不是就消失了?
作者回复: 掉电后,进程都挂了,pid都变了,cgroup还有啥用
2019-08-095 - 刘桢二十天闭关冲北邮
作者回复: 加油
2019-08-0964 - 行者老师,麻烦讲下华为鸿蒙系统,它和linux区别与联系是什么?2019-08-1018
- fhchinacpu.cfs_period_us的单位是us, 微秒不是毫秒2019-11-233
- 张亚琛补充一些背景: Cgroup是Linux系统内核提供的一种机制,它是在Linux 内核版本 2.6.24中引入的,来解决资源管理和隔离的问题。在它出现之前,Linux只能对单个进程进行资源限制,例如通过sched_setaffinity设置进程CPU亲和性,使用ulimit限制进程打开文件上限、栈大小等。 在这个时代,有一些早期的容器技术,如Chroot和Linux VServer。 Chroot 可以将进程及其子进程与操作系统的其余部分隔离开来,但是,对于 root process,却可以任意退出 chroot。 Linux VServer 是一种基于 Security Contexts 的软分区技术,可以做到虚拟服务器隔离,共享相同的硬件资源。主要问题是 VServer 应用程序针对 "chroot-again" 类型的攻击没有很好的进行安全保护,攻击者可以利用这个漏洞脱离限制环境,访问限制目录之外的任意文件。 虽然在没有 Cgroup 技术的情况下,还有其他的方法可以实现一定程度的资源隔离和管理,但是这些方法在处理多进程或者进程组的资源管理时显得力不从心,而且在安全性和功能性方面也存在一些问题。 随着容器技术的发展,Docker的开发者在了解并掌握了 Cgroup 技术之后,应用这项技术去实现Docker 的资源管理和隔离功能。因此,Cgroup 不仅解决了 Linux 系统的资源管理问题,也为容器技术的发展提供了基础。2024-02-23归属地:上海2
- 羊仔爸比老师: 请教一下docker 里面我设置了 内存的limit是2g,cgroup 文件中memory.usage_in_bytes这个文件是是包含memory.stat中的total_rss 和total_cache 相加的大小,oom kill的时候会根据memory.usage_in_bytes的值kill吗,如果不是根据这个文件的值kill是根据哪个值进行kill的?2020-05-2911
- Bravery168容器从概念上就是通过各种数据结构的定义建构了一个模型,从执行层面,本质上是对进程资源和行为的定义和控制。牛2022-12-15归属地:广东
- 幼儿编程教学>第五步,对于 CPU 来讲,会修改 scheduled entity,放入相应的队列里面去,从而下次调度的时候就起作用了。对于内存的 cgroup 设定,只有在申请内存的时候才起作用。 请教老师,2个我比较非常的问题。 * 设置 cgroup cpu后,极端情况下,是否会突发cpu超过限制? 文章中说”对于 CPU 来讲,会修改 scheduled entity,放入相应的队列里面去,从而下次调度的时候就起作用了“。如果1个进程,占用时间太长,或者短时间内,耗费了很多cpu,是否会引发cpu超量使用,导致系统卡死?k8s中,如果cpu设置的不好(配置大于宿主机实际量),是会引发宿主机卡死的情况。这时候,只能重启宿主机 * 设置 cgroup memory后,极端情况下,是否会突发memory超过限制? 内存好像会?因为上面说,”只有在申请内存的时候才起作用“。那之前申请的内存呢?申请内存的时候,申请的都是虚拟内存。假设宿主机只有1g内存。2个进程a,b,都申请内存1g。内存应该是在实际使用时,才会去分配。所以,进程a,b运行起来,可以超过宿主机实际1g内存。这时,操作系统会oom。应该是这样吧?2022-11-02归属地:浙江
- Sudouble这么多篇深度文章,很好的诠释了十几年前的一个疑问,为什么不让电脑突然断电!内存、缓存里存的大量数据,操作系统还没有触发写,这时突然断电,这部分数据全都丢了。2022-06-19
- EST4What为什么我mount -t cgroup会显示,而切换到/sys/fs/cgroup时,文件却不见了呢 [root@jenkins cgroup]# mount -t cgroup cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd) cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,memory) cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,devices) cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuacct,cpu) cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,hugetlb) cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuset) cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,freezer) cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,perf_event) cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,blkio) cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,net_prio,net_cls) cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,pids) [root@jenkins cgroup]# ls [root@jenkins cgroup]# ll total 02022-03-02
收起评论