容器核心技术–CGroup
发布时间:2023-06-05 13:04:05 所属栏目:教程 来源:
导读:监控类服务不应占用大量资源,无论是什么原因引起的问题,都不应该影响宿主机的正常使用,否则容器的隔离就没有意义。Namespace 只能做到系统资源维度的隔离,无法做到硬件资源的控制。我们需要使用一种机制 Cgroup,
监控类服务不应占用大量资源,无论是什么原因引起的问题,都不应该影响宿主机的正常使用,否则容器的隔离就没有意义。Namespace 只能做到系统资源维度的隔离,无法做到硬件资源的控制。我们需要使用一种机制 Cgroup,指定容器应用最大占用多少资源。 Linux cgroups 的全称是 Linux Control Groups,它是 Linux 内核的特性,主要作用是限制、记录和隔离进程组(process groups)使用的物理资源(cpu、Memory、IO 等)。 CGroup 核心概念 前面说过 CGroup 是用来对进程进行资源管理的,因此 CGroup 需要考虑如何抽象这两种概念:进程和资源,同时如何组织自己的结构。CGroup 机制中有以下几个基本概念: task:任务,对应于系统中运行的一个实体,下文统称进程; subsystem:子系统,具体的资源控制器(resource class 或者 resource controller),控制某个特定的资源使用; cgroup:控制组,一组任务和子系统的关联关系,表示对这些任务进行怎样的资源管理策略; hierarchy:层级树,由一系列 CGroup 组成的树形结构。每个节点都是一个 CGroup ,CGroup 可以有多个子节点,子节点默认会继承父节点的属性。系统中可以有多个 hierarchy。 Cgroup 机制非常复杂,上面的名词了解就好,学习 Docker 暂时还不需要深入研究它。 在 Linux 环境中,我们可以执行 ls -al /sys/fs/cgroup/ 查看当前系统的 Cgroup: 我们看到目录中有若干个子目录,除了 systemd 目录,其他的一个子目录对应一个子系统,子系统功能如下所示。 子系统 功能 blkio 为块设备,如硬盘等设备,设定输入输出限制 cpu 设置 cgroup 中进程的 cpu 被调度的策略 cpuacct 统计 cgroup 中进程的 cpu 占用 cpuset 设置 cgroup 中进程可以使用的 cpu 和内存 devices 控制 cgroup 中进程对设备的访问 freezer 挂起或者恢复 cgroup 中的进程 hugetlb 用于控制 cgroup 中进程的内存占用,这是一个大页文件系统。 memory 控制 cgroup 中进程的内存占用,并统计内存资源使用情况。 net_cls 将 cgroup 中进程产生的网络包分类,允许 Linux 流量控制系统识别从具体 cgroup 中生成的数据包。 net_prio 控制 cgroup 中进程的网络流量的优先级 perf_event 识别任务的 cgroup 成员,可以用来做性能分析 pids 限制 cgroup 及其所有子孙 cgroup 里面能创建的总的进程数量 rdma 限制 RDMA/IB 资源 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |