1

cgroup有 2 个内存控制选项:

  • memory.use_hierarchy = 1: 使用层次结构
  • memory.use_hierarchy = 0:使用平面层次结构,根据这个答案

两者有什么区别?我想,层次就是层次,这里的“扁平”是什么意思?

编辑:我在这里阅读了 cgroup 文档,解释了分层支持:

在上图中,启用分层记帐后,e 的所有内存使用量都计入其祖先,直到启用了 memory.use_hierarchy 的根(即 c 和根)。如果祖先之一超过其限制,则回收算法从祖先中的任务和祖先的子代中回收。

  • 这是什么意思accounted to its ancestors up until the root
  • 祖先怎么能超过它的极限,因为它的孩子的能力被分配给祖先的能力?
  • 为什么任务在祖先和孩子中都被回收?我认为任务只分配给孩子,这些任务自动属于祖先。即“WWW 浏览”有 20% 的容量;它的孩子是分别有15%和5%的“教授”和“学生”。最大值永远不能超过 20%。为什么文件中有一个案例说:

如果祖先之一超过其限制,则回收算法从祖先中的任务和祖先的子代中回收。

4

1 回答 1

2

这里的分层意味着有内存 cgroups 嵌套在 cgroups 中。例如。您可以创建一个父 cgroup P,它可以有一个子 cgroup C。P(比如 p1 和 p2)和 C(c1,c2)中可以有进程。当 use_hierarchy=1 时,P 的内存统计数据将显示 C 的使用总量以及 P 中所有进程的使用量。它还将考虑 P 中的任何 tmpfs。

如果 cgroup P 超出限制,它可以从 p1、p2 和子 cgroup C 回收内存。如果 C 超出限制,它将从 c1 和 c2 回收。

我认为文档中不清楚的一点是,可能存在直接在 P 下而不是在其子 cgroup 之一下的任务。

于 2014-04-01T20:28:14.517 回答