LWN:分层内存的主动回收及其他!
共 1879字,需浏览 4分钟
·
2022-06-07 22:29
关注了就能看到更多这么棒的文章哦~
Proactive reclaim for tiered memory and more
By Jonathan Corbet
May 13, 2022
LSFMM
DeepL assisted translation
https://lwn.net/Articles/894849/
Linux 中的内存回收(memory reclaim)基本上是采用一种很被动的策略:内核试图去寻找哪些内存是它可以重新利用的,从而来应对 free memory 太少的情况。开发人员经常想知道是否能够采用主动回收机制从而带来更好的性能,至少对某些 workload 来说应该是有好处的,而且 tiered-memory 系统的最佳使用方式也需要更主动地回收内存。在 2022 年的 Linux 存储、文件系统、内存管理和 BPF 峰会(LSFMM)上,Davidlohr Bueso 主持了关于这个主题的简短会议。
Bueso 先提出建议来增加一个 per-node 的开关来控制打开或者关闭主动回收。管理员可以写一个数字进去来表示应该回收的内存数量,内核会尽量试图满足这个需求。他说也有可能可以扩展由 multi-generational LRU patch 添加的 debugfs 开关,而不是添加一个新的开关。不过,Michal Hocko 反对后一种想法,他说他不希望把 debugfs 中的内容变成一个必须维护的 API。
Hocko 说,相反,这类开关都应该放在 sysfs 中。对于如何控制,有两个想法:可以是一个单一的开关,接受一个 mask 来指示哪些节点需要回收,或者像 Bueso 所描述的那样采用 per-node 的开关。Hocko 更喜欢 per-node 的开关方案,因为它为管理员提供了更好的控制。Johannes Weiner 说,他已经尝试在 cgroup 的 memory controller 里添加类似的开关,可以接受的参数是从相应的 group 中回收的 page 数量。他说,该控制器在 cgroup 内包含的进程中会轮流进行回收,这可能已经足够了。他建议在 tiered-memory system 上来对这种机制进行测试,看看工作得如何。
Bueso 问道,这种接口在未来是否也依然是可靠的?不是每个系统都会以这种方式来使用 cgroup,系统全局层面的控制可能会有不同的处理方式。Weiner 说,用户希望在全局和 cgroup 内部的设置中都有所有的功能,所以在这方面应该不会有任何分歧。
另一位与会者指出了 proactive reclaim 的其他几个用例。如果需要复制的 page 比较少的话,虚拟机的迁移动作会更迅速,所以管理员希望能够在迁移开始前先强制虚拟机来回收尽可能多的内存。虚拟机可以向 hypervisor 报告有哪些 page 已经被释放了,而这些 page 就可以不用被复制到 host 上了。一个类似的用例是 suspend-to-disk,如果可以让大量的空闲 page 不再需要写入持久性存储器,那么 suspend-to-disk 的动作就会更快速。
Bueso 把话题转向了主动回收机制的测试方面;他说,现在有很多想法,但没有多少数据可以展示这些方案的实际工作效果。例如,他喜欢 hot-page selection 算法,这是 tiered-memory 工作的一部分,但只有一个基准测试结果展示了性能变化。他说,使用这么少的 benchmark 来作为这类工作的验证标准,这让他很担心。
他继续说到,他希望有一种更容易的方法可以看出某个 patchset 对各种 workload 的影响。为此,他一直在研究 MMTests,试图了解这个 workload 里面什么时候会开始将 page 从 DRAM 中推到更慢的那层内存中。他说,这有助于了解 tiering 算法是否真的有效果。但他希望找到一种方法来增加测试,能够更好地利用内存管理子系统的相关机制,而不是完全依靠消耗大量的 RAM。
当会议结束时,他还说希望有一种方法可以将内核对各种 memory tier 的了解信息都输出到用户空间。大家似乎一致认为这个功能应该新增一个 sysfs 文件来完成。
全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。
长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~