内存交换和cgroup

内存交换和cgroup

我想知道内存cgroup v1下的交换机制是如何实现的?

大多数现有书籍(了解linux内核,专业的linux内核架构,了解Linux虚拟内存管理器)完全不提cgroup,仍然引用2.6.x内核中的旧数据结构。我也在网上搜索过,但没有找到有关 cgroup 实现的任何细节。

具体来说,LRU在内存cgroup存在的情况下是如何工作的呢?是否存在全局 LRU,即全局活动/非活动列表?我怀疑情况确实如此。直观上,每个内存控制器应该有一对单独的 in/active 列表。但这还不清楚。例如,在以下情况下,

    [cgroup1]
      /   \
 [cgroup2] pid1
   /   \
 pid2 pid3

cgroup1 和 cgroup2 分别有两对活动/非活动列表吗?如果是这种情况,如果 cgroup1 面临内存压力并且需要将一些匿名内存换出到交换区域,则 cgroup1 的 kswapd 很可能会换出一些属于 cgroup2 的页面。因此,cgroup2 的活动/非活动列表也应该修改以反映页面调出。

尽管如此,如果层次结构变深,顶层的交换将需要修改所有子列表。这不会导致一些性能问题吗?

相关内容