zoukankan      html  css  js  c++  java
  • Docker 基础技术之 Linux Cgroup 详解

    简介

      Linux Cgroup 可​​​让​​​您​​​为​​​系​​​统​​​中​​​所​​​运​​​行​​​任​​​务​​​(进​​​程​​​)的​​​用​​​户​​​定​​​义​​​组​​​群​​​分​​​配​​​资​​​源​​​ — 比​​​如​​​ CPU 时​​​间​​​、​​​系​​​统​​​内​​​存​​​、​​​网​​​络​​​带​​​宽​​​或​​​者​​​这​​​些​​​资​​​源​​​的​​​组​​​合​​​。​​​您​​​可​​​以​​​监​​​控​​​您​​​配​​​置​​​的​​​ cgroup,拒​​​绝​​​ cgroup 访​​​问​​​某​​​些​​​资​​​源​​​,甚​​​至​​​在​​​运​​​行​​​的​​​系​​​统​​​中​​​动​​​态​​​配​​​置​​​您​​​的​​​ cgroup。所以,可以将 controll groups 理解为 controller (system resource) (for) (process)groups,也就是是说它以一组进程为目标进行系统资源分配和控制。

      cgroup是Linux下的一种将进程按组进行管理的机制,在用户层看来,cgroup技术就是把系统中的所有进程组织成一颗一颗独立的树,每棵树都包含系统的所有进程,树的每个节点是一个进程组,而每颗树又和一个或者多个subsystem关联,树的作用是将进程分组,而subsystem的作用就是对这些组进行操作。cgroup主要包括下面两部分:

    • task:任务就是系统的一个进程

    • control group:控制族群就是按照某种标准划分的进程。Cgroups 中的资源控制都是以控制族群为单位实现。一个进程可以加入到某个控制族群,也从一个进程组迁移到另一个控制族群。一个进程组的进程可以使用 cgroups 以控制族群为单位分配的资源,同时受到 cgroups 以控制族群为单位设定的限制;

    • hierarchy:控制族群可以组织成 hierarchical 的形式,既一颗控制族群树。控制族群树上的子节点控制族群是父节点控制族群的孩子,继承父控制族群的特定的属性;

    • subsystem:一个子系统就是一个资源控制器,比如 cpu 子系统就是控制 cpu 时间分配的一个控制器。子系统必须附加(attach)到一个层级上才能起作用,一个子系统附加到某个层级以后,这个层级上的所有控制族群都受到这个子系统的控制。

    CGroup 支持的文件种

    • Release_agent
      • 删除分组时执行的命令,这个文件只存在于根分组
    • Notify_on_release
      • 设置是否执行 release_agent。为 1 时执行
    • Tasks
      • 属于分组的线程 TID 列表
    • Cgroup.procs
      • 属于分组的进程 PID 列表。仅包括多线程进程的线程 leader 的 TID,这点与 tasks 不同
    • Cgroup.event_control
      • 监视状态变化和分组删除事件的配置文件

    特点

    控制族群(control group)。控制族群就是一组按照某种标准划分的进程。Cgroups
    中的资源控制都是以控制族群为单位实现。一个进程可以加入到某个控制族群,也从一个进程组迁移到另一个控制族群。一个进程组的进程可以使用
    cgroups 以控制族群为单位分配的资源,同时受到 cgroups 以控制族群为单位设定的限制。
    
    层级(hierarchy)。控制族群可以组织成 hierarchical
    的形式,既一颗控制族群树。控制族群树上的子节点控制族群是父节点控制族群的孩子,继承父控制族群的特定的属性。
    
    子系统(subsytem)。一个子系统就是一个资源控制器,比如 cpu 子系统就是控制 cpu
    时间分配的一个控制器。子系统必须附加(attach)到一个层级上才能起作用,一个子系统附加到某个层级以后,这个层级上的所有控制族群都受到这个子系统的控制。

    具体实现

    blkio: 块设备IO限制。
    CPU:使用调度程序为cgroup任务提供 CPU 的访问。
    cpuacct:产生cgroup任务的 CPU 资源报告。
    cpuset:如果是多核心的CPU,这个子系统会为cgroup任务分配单的CPU和内存。
    devices:允许或拒绝cgroup任务对设备的访问。
    freezer:暂停和恢复cgroup任务。
    memory:设置每个cgroup 的内存限制以及产生内存资源报告。
    net_cls:标记每个网络包以供 cgroup方便使用。
    ns:命名空间子系统。
    perf event:增加了对每个group的监测跟踪的能力,可以监测属于某个特定的group 的所有线程以及运行在特定CPU上的线程。:
    

    查看linux是否启用了linux cgroups

      Cgroup 在内核默认已经开启, 内核比较新的支持的功能也会更多。

    作者:闫世成

    出处:http://cnblogs.com/yanshicheng

    联系:yans121@sina.com

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题或建议,请联系上述邮箱,非常感谢。
  • 相关阅读:
    挖矿病毒 netstat与ss重要区别
    leetcode 正则表达式匹配
    DNS重新绑定攻击
    Mac OS ssh 禁用密码登陆
    linux alias 别名在Bash脚本内不起作用 远程执行alias 命令不工作
    centos 7 搭建 l2tp
    psacct 软件包工具监视所有用户执行的命令
    随机密码生成
    Linux 进程 cpu 使用排序 内存 使用排序
    nginx 反向代理 uri 重写
  • 原文地址:https://www.cnblogs.com/yanshicheng/p/15746521.html
Copyright © 2011-2022 走看看