0

这里的Linux 内核代码提供了CPU 调度器,它具有多种调度算法来调度进程(包括 docker 容器进程)。


控制组是一种内核结构,它允许限制一组进程对主机系统物理资源的访问和计算。

控制组最初于 2007 年在 Linux 内核中实现。

此版本 1 实现已被 Linux 内核 4.5 中的版本 2 实现所取代。版本 2 修复了与版本 1 实施相关的一些限制。

Linux 内核中的六个 CGROUP 子系统中的两个是cpu 子系统cpuset 子系统

cpu 子系统通过调度程序控制对系统 CPU 的访问

cpuset 子系统将属于 CGROUPS 的进程固定到特定的 CPU 内核或内存节点。


CPU 调度程序与( CGROUPS的) cpu 子系统有何不同?与默认命名空间多个命名空间有关吗?

4

1 回答 1

2

很难在不过度简化的情况下给出一个“简短的答案”。可以写一本关于“CPU 调度”的书,另一本关于“Linux 控制组”的书。

与其说“CPU 调度程序与……Cgroups 有何不同?”,不如提出一个更好的问题:“Linux Cgroups 与 Linux 进程有何不同?”

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/resource_management_guide/ch01

控制组的组织方式

cgroups 是按层次组织的,就像进程一样,子 cgroups 继承了它们父母的一些属性。但是,两种模型之间存在差异。

Linux 进程模型

Linux 系统上的所有进程都是一个共同父进程的子进程:init 进程,它在启动时由内核执行并启动其他进程(这些进程可能反过来启动它们自己的子进程)。因为所有进程都来自一个父进程,所以 Linux 进程模型是一个单一的层次结构或树。

此外,除了 init 之外的每个 Linux 进程都继承其父进程的环境(例如 PATH 变量)[1] 和某些其他属性(例如打开的文件描述符)。

Cgroup 模型

Cgroups 与进程的相似之处在于:

  • 它们是分层的,并且
  • 子 cgroup 从其父 cgroup 继承某些属性。

根本区别在于,许多不同层次的 cgroup 可以同时存在于一个系统上。如果 Linux 进程模型是一棵进程树,那么 cgroup 模型是一个或多个独立的、未连接的任务树(即进程)。

多个单独的 cgroup 层次结构是必要的,因为每个层次结构都附加到一个或多个子系统。子系统[2] 表示单个资源,例如 CPU 时间或内存。

回到你最初的问题:

  • Linux CPU 调度程序为进程分配时间。

  • 组调度程序扩展允许对CONFIG_CGROUP_SCHED任务进行分组,并在这些组之间公平地分配 CPU 时间。

在这里查看更多信息:

于 2020-02-03T20:23:56.257 回答