【Docker 内核详解】cgroups 资源限制(三):实现方式及工作原理简介

实现方式及工作原理简介

  • 1.cgroups 如何判断资源超限及超出限额之后的措施
  • 2.cgroup 与任务之间的关联关系
  • 3.Docker 在使用 cgroup 时的注意事项
  • 4./sys/fs/cgroup/cpu/docker/[container-ID] 下文件的作用

在对 cgroups 规则和子系统有了一定了解以后,下面简单介绍操作系统内核级别上 cgroups 的工作原理,希望能有助于大家理解 cgroups 如何对 Docker 容器中的进程产生作用。cgroups 的实现本质上是 给任务挂上钩子,当任务运行的过程中涉及某种资源时,就会触发钩子上所附带的子系统进行检测,根据资源类别的不同,使用对应的技术进行资源限制和优先级分配

1.cgroups 如何判断资源超限及超出限额之后的措施

对于不同的系统资源,cgroups 提供了统一的接口对资源进行控制和统计,但限制的具体方式则不尽相同。比如 memory 子系统,会在描述内存状态的 mm_struct 结构体中记录它所属的 cgroup,当进程需要申请更多内存时,就会触发 cgroup 用量检测,用量超过 cgroup 规定的限额,则拒绝用户的内存申请,否则就给予相应内存并在 cgroup 的统计信息中记录。实际实现要比以上描述复杂得多,不仅需考虑内存的分配与回收,还需考虑不同类型的内存如 cache(缓存)和 swap(交换区内存拓展)等。

进程所需的内存超过它所属的 cgroup 最大限额以后,如果设置了 OOM Control(内存超限控制),那么进程就会收到 OOM 信号并结束;否则进程就会被挂起,进入睡眠状态,直到 cgroup 中其他进程释放了足够的内存资源为止。Docker 中默认是开启 OOM Control 的。其他子系统的实现与此类似,cgroups 提供了多种资源限制的策略供用户选择。

2.cgroup 与任务之间的关联关系

实现上,cgroup 与任务之间是多对多的关系,所以它们并不直接关联,而是通过一个 中间结构 把双向的关联信息记录起来。每个任务结构体 task_struct 中都包含了一个指针,可以查询到对应 cgroup 的情况,同时也可以查询到各个子系统的状态,这些子系统状态中也包含了找到任务的指针,不同类型的子系统按需定义本身的控制信息结构体,最终在自定义的结构体中把子系统状态指针包含进去,然后内核通过 container_of(这个宏可以通过一个结构体的成员找到结构体自身)等宏定义来获取对应的结构体,关联到任务,以此达到资源限制的目的。

同时,为了让 cgroups 便于用户理解和使用,也为了用精简的内核代码为 cgroup 提供熟悉的权限和命名空间管理,内核开发者们按照 Linux 虚拟文件系统转换器Virtual Filesystem SwitchVFS)接口实现了一套名为 cgroup 的文件系统,非常巧妙地用来表示 cgroups 的层级概念,把各个子系统的实现都封装到文件系统的各项操作中。大家有兴趣可以查阅 VFS 的相关内容,在此就不赘述了。

3.Docker 在使用 cgroup 时的注意事项

在实际的使用过程中,Docker 需要通过挂载 cgroup 文件系统新建一个层级结构,挂载时指定要绑定的子系统。把 cgroup 文件系统挂载上以后,就可以像操作文件一样对 cgroups 的层级进行浏览和操作管理(包括权限管理、子文件管理等)。除了 cgroup 文件系统以外,内核没有为 cgroups 的访问和操作添加任何系统调用。

如果新建的层级结构要绑定的子系统与目前已经存在的层级结构完全相同,那么新的挂载会重用原来已经存在的那一套(指向相同的 css_set)。否则,如果要绑定的子系统已经被别的层级绑定,就会返回挂载失败的错误。如果一切顺利,挂载完成后层级就被激活并与相应子系统关联起来,可以开始使用了。

目前无法将一个新的子系统绑定到激活的层级上,或者从一个激活的层级中解除某个子系统的绑定。

当一个顶层的 cgroup 文件系统被卸载(umount)时,如果其中创建过深层次的后代 cgroup 目录,那么就算上层的 cgroup 被卸载了,层级也是激活状态,其后代 cgroup 中的配置依旧有效。只有递归式地卸载层级中的所有 cgroup,那个层级才会被真正删除。在创建的层级中创建文件夹,就类似于 fork 了一个后代 cgroup,后代 cgroup 中默认继承原有 cgroup 中的配置属性,但是可以根据需求对配置参数进行调整。这样就把一个大的 cgroup 系统分割成一个个嵌套的、可动态变化的 “软分区”。

4./sys/fs/cgroup/cpu/docker/[container-ID] 下文件的作用

前面已经说过,以资源开头(比如 cpu.shares)的文件都是用来限制这个 cgroup 下任务的可用的配置文件。一个 cgroup 创建完成,不管绑定了何种子系统,其目录下都会生成以下几个文件,用来描述 cgroup 的相应信息。同样,把相应信息写入这些配置文件就可以生效,内容如下。

  • tasks:这个文件中罗列了所有在该 cgroup 中任务的 TID,即所有进程或线程的 ID。该文件并不保证任务的 TID 有序,把一个任务的 TID 写到这个文件中就意味着把这个任务加入这个 cgroup 中,如果这个任务所在的任务组与其不在同一个 cgroup,那么会在 cgroup.procs 文件里记录一个该任务所在任务组的 TGID 值,但是该任务组的其他任务并不受影响。
  • cgroup.procs:这个文件罗列所有在该 cgroup 中的 TGID(线程组 ID),即线程组中第一个进程的 PID。该文件并不保证 TGID 有序和无重复。写一个 TGID 到这个文件就意味着把与其相关的线程都加到这个 cgroup 中。
  • notify_on_release:填 0 0 0 1 1 1,表示是否在 cgroup 中最后一个任务退出时通知运行 release agent,默认情况下是 0 0 0,表示不运行。
  • release_agent:指定 release agent 执行脚本的文件路径(该文件在最顶层 cgroup 目录中存在),这个脚本通常用于自动化卸载无用的 cgroup。

本系列由浅入深地讲解了 cgroups,从 cgroups 是什么,到 cgroups 该怎么用,最后对大量的 cgroup 子系统配置参数进行了梳理。可以看到,内核对 cgroups 的支持已经较多,但是依旧有许多工作需要完善。如网络方面目前通过 TC(Traffic Controller)来控制,未来需要统一整合;优先级调度方面依旧有很大的改进空间。

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

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

相关文章

图解刘润2023年度演讲--进化的力量思维导图精华

大家好,我是老原。 周末,商业顾问刘润发表了年度演讲:《进化的力量:寒武纪大爆发》。 这两天出差期间,陆陆续续看完了这个长达4小时的演讲,梳理了2023年到底发生了些什么,现在的环境如何…… …

splice,slice,split傻傻分不清?

做个笔记📒 一、splice数组方法,更改原数组 使用方法: splice(start) splice(start, deleteCount) splice(start, deleteCount, item1) splice(start, deleteCount, item1, item2, itemN) start: 开始索引 deleteCount:需要删除的…

深入理解强化学习——强化学习的历史:时序差分学习

分类目录:《深入理解强化学习》总目录 相关文章: 强化学习的历史:最优控制 强化学习的历史:试错学习 强化学习的历史:试错学习的发展 强化学习的历史:K臂赌博机、统计学习理论和自适应系统 强化学习的…

如何使用 Docker 搭建 Jenkins 环境?从安装到精通

不少兄弟搭 jenkins 环境有问题,有的同学用 window, 有的同学用 mac, 有的同学用 linux。 还有的同学公司用 window, 家里用 mac,搭个环境头发掉了一地。。。 这回我们用 docker 去搭建 jenkins 环境,不管你是用的是什么系统&…

opencv在linux上调用usb摄像头进行拍照

功能 1.按照指定的文件名创建文件夹,创建之前判断该文件夹是否存在 2.调用摄像头按可调整窗口大小的方式显示 3.按esc退出摄像头画面 4.按p保存当前摄像头的画面,并按当前时间为照片的名字进行保存打开终端查看是否有摄像头 ls /dev/video*一般video1就…

面试了字节、美团、腾讯等30几家公司后,才知道软件测试面试全是这个套路......

一、Linux系统应用和环境配置: 1、Linux系统的操作命令给我说10个,一般用什么工具远程连接Linux服务器? 2、Linux中的日志存储在哪里?怎么查看日志内容? 3、Linux中top和ps命令的区别? 4、Linux命令运行…

从前序与中序遍历序列构造二叉树

代码如下&#xff0c;开袋即食 class Solution {private Map<Integer,Integer> map;public TreeNode buildTree(int[] preorder, int[] inorder) {map new HashMap<>();for(int i 0;i<preorder.length;i){map.put(inorder[i],i);}return build(preorder,inord…

Qt5 安装 phonon

Qt5 安装 phonon Qt5 安装 phonon问题描述安装组件 Qt5 安装 phonon 开发环境&#xff1a;Qt Creator 4.6.2 Based on Qt 5.9.6 问题描述 在运行 Qt5 项目时&#xff0c;显示错误&#xff1a; error: Unknown module(s) in QT: phonon这是缺少组件的原因&#xff0c;QT: pho…

解析mfc100u.dll文件丢失的修复方法,快速解决mfc100u.dll问题

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中最常见的就是“缺少某个文件”的错误。最近&#xff0c;我也遇到了一个这样的问题&#xff0c;那就是“mfc100u.dll丢失”。这个问题可能会导致某些应用程序无法正常运行&#xff0c;给我们带来困扰。…

Chatgpt的嵌入

1.前言 最近两年的ai发展迅速&#xff0c;更加智能的ai对话出现可以解决人们在生活中的问题。 2.使用场景 1&#xff09;编码中 在编码中难免会出现突然忘记的关键词或关键字&#xff0c;可以根据自身需求去询问对应的问题。 2&#xff09;未知的领域 领导提出需求需要用…

【广州华锐互动】VR虚拟现实旅游:改变游客旅游方式,提升旅游体验

虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;是一种利用电脑模拟产生一个三维的虚拟世界&#xff0c;提供用户关于视觉、听觉、触觉等感官的模拟体验。随着科技的进步&#xff0c;VR虚拟现实技术已逐渐进入各行各业&#xff0c;尤其在旅游行业中的应用&…

陪诊系统|挂号陪护搭建二开陪诊师入驻就医小程序

我们的陪诊小程序拥有丰富多样的功能&#xff0c;旨在最大程度满足现代人的需求。首先&#xff0c;我们采用了智能排队系统&#xff0c;通过扫描二维码获取排号信息&#xff0c;让您从繁琐的排队过程中解放出来。其次&#xff0c;我们提供了多种支付方式&#xff0c;不仅可以实…

1985-2020年我国30m土地利用覆盖数据介绍

土地覆盖(LC)决定了地球各圈层之间的能量交换、水和碳循环。准确的 LC 信息是环境和气候研究的基本参数。考虑到在过去几十年中&#xff0c;随着经济建设的发展&#xff0c;中国发生了巨大的变化&#xff0c;连续和精细的 LC 监测是迫切需要的。然而&#xff0c;目前&#xff0…

【Python爬虫】selenium4新版本使用指南

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持的浏览器包括IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Google Chrome&#xff0c;Opera&am…

真实经历分享:性能测试需求分析详解

在实际的工作中系统的性能需求通常是一个笼统的需求&#xff0c;而且有可能给提需求的人并不知道具体的性能需要&#xff0c;所以只能含糊的列出。如果测试人员不搞清楚&#xff0c;就会出现实际要把杀猪刀&#xff0c;需求标明能屠龙&#xff01;&#xff01;&#xff01; 下面…

【烧火柴问题】奇思妙想火柴

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

坚持#第420天~阿里云轻量服务器内存受AliYunDunMonito影响占用解决方法

阿里云轻量服务器内存受AliYunDunMonito影响占用解决方法&#xff0c;亲测有效&#xff1a; Mobax好卡啊&#xff0c;那就直接在阿里云后台操作即可&#xff0c;阿里云后台也可以上传文件。 Navicat mysql好卡啊&#xff0c;那就直接在阿里云后台最上面帮助的右边有个数据库&…

前端基础之JavaScript

JavaScript是一种能够在网页上添加交互效果的脚本语言&#xff0c;也被称为客户端语言。它可以在网页中操作HTML元素、改变CSS样式&#xff0c;以及处理用户的交互事件等。 以下是JavaScript的常见基础知识点&#xff1a; 变量和数据类型&#xff1a;JavaScript中的变量可以存…

如何使用查看器筛选、搜索功能进行数据定位?

前言 我们曾探讨过观测云如何通过将内置视图与查看器相联结&#xff0c;实现更全面的数据关联分析。&#xff08;参见《内置视图联动查看器&#xff0c;实现数据关联分析》&#xff09;这里提到的查看器&#xff0c;实际是一个功能全面且强大的数据查看分析工具。其提供多种搜…

软考中项集成如何画图?计算题怎么考的?

2023下半年软考集成一共考6个批次&#xff0c;10月28日、29日软考集成考了第一、二、三、四批次&#xff0c;11月4日软考集成再考第五批和第六批。 先说一下通过10.28-29得出的软考机考注意事项&#xff1a; 1、草稿纸不能自带&#xff0c;考试现场会发放草稿纸&#xff0c;草…