繁体   English   中英

Linux kernel - CPU 子系统(CGROUPS 的)与 CPU 调度程序有何不同?

[英]Linux kernel - How CPU subsystem(of CGROUPS) different from CPU scheduler?

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


控制组是一个 kernel 结构,它允许限制一组进程对主机系统物理资源的访问和使用。

对照组最初是在 Linux kernel 于 2007 年实施的。

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

Linux kernel 的六个 CGROUP 子系统中有两个是cpu subsystem & cpuset subsystem

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

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


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

如果不过于简单化,很难给出一个“简短的答案”。 可以写一本关于“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 进程 Model

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

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

C群 Model

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

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

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

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

回到你最初的问题:

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

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

在这里查看更多信息:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM