• docker-容器实现核心技术:CGroups


    容器实现核心技术:CGroups

    1. CGroups 概念

    • Docker利用namespace实现了容器之间资源隔离,但是namespace不能对容器资源限制,比如CPU、内存。

    • 如果某一个容器属于CPU密集型任务,那么会影响其他容器使用CPU,导致多个容器相互影响并且抢占资源。

    • 如何对多个容器的资源使用进行限制就成了容器化的主要问题。

      ​ 答:引入Control Groups(简称CGroups),限制容器资源

    • CGroups:所有的任务就是运行在系统中的一个进程,而CGroups以某种标准将一组进程为目标进行资源分配和控制。例如CPU、内存、带宽等,并且可以动态配置。

    • CGroups主要功能:

      • 限制进程组使用的资源数量(Resourcelimitation):可以为进程组设定资源使用上限,例如内存
      • 进程组优先级控制(Prioritization):可以为进程组分配特定CPU、磁盘IO吞吐量
      • 记录进程组使用的资源数量(Accounting):例如使用记录某个进程组使用的CPU时间
      • 进程组控制(Control):可以将进程组挂起和恢复
    • ls/sys/fs/cgroup/-l查看cgroups可控制的资源:

      • blkio :对快设备的IO进行限制。
      • cpu:限制CPU时间片的分配,与cpuacct挂载同一目录。
      • cpuacct :生成cgroup中的任务占用CPU资源的报告,与cpu挂载同一目录。
      • cpuset :给cgroup中的任务分配独立的CPU(多核处理器)和内存节点。
      • devices :允许或者拒绝cgroup 中的任务访问设备。
      • freezer :暂停/恢复cgroup 中的任务。
      • hugetlb :限制使用的内存页数量。
      • memory :对cgroup 中任务的可用内存进行限制,并自动生成资源占用报告。
      • net_cls :使用等级识别符(classid)标记网络数据包,这让Linux 流量控制程序(tc)可以识别来自特定从cgroup 任务的数据包,并进行网络限制。
      • net_prio:允许基于cgroup设置网络流量的优先级。
      • perf_event:允许使用perf工具来监控cgroup。
      • pids:限制任务的数量。

    2. 容器实际资源限制位置

    /sys/fs/cgroup/<资源名>/docker/<容器ID>
    
  • 相关阅读:
    [读书笔记]黑客与画家[Hackers.and.Painters]
    android电池充电以及电量检测驱动分析
    LV在系统重启后不能自动激活(boot.lvm&after.loca)
    线段树菜鸟一题+归并排序【求逆序数】POJ2299
    【PAT】1035. Password (20)
    Android应用开发学习笔记之ContentProvider
    UVAlive 2322 Wooden Sticks(贪心)
    卸载QTP
    线段树模板
    2013 CSU校队选拔赛(1) 部分题解
  • 原文地址:https://www.cnblogs.com/scajy/p/13840151.html
Copyright © 2020-2023  润新知