LWN:保证可以分到连续内存的分配器!

关注了就能看到更多这么棒的文章哦~

The guaranteed contiguous memory allocator

By Jonathan Corbet
March 21, 2025
Gemini-1.5-flash translation
https://lwn.net/Articles/1015000/

随着系统运行和内存碎片化,分配大片的物理连续的内存区域变得越来越困难。多年来,人们付出了许多努力来避免对这种分配的需求,但在某些时候,它们是不可避免的。内核的 contiguous memory allocator (CMA,连续内存分配器) 子系统试图使这种分配成为可能,但它从来都不是一个完美的解决方案。Suren Baghdasaryan 正在尝试改善这种情况,他提交了 guaranteed contiguous memory allocator (保证连续内存分配器) 补丁集,其中包括 Minchan Kim 的工作。

在遥远的过去,Dan Magenheimer 引入了 transcendent memory (超越内存) 的概念——这是一种不能直接寻址的内存,但内核可以机会主义地将其用于缓存或其他目的。此后,大多数超越内存的工作都未被使用并已从内核中删除,但这个想法仍然存在,并且此补丁系列利用它来提供有保证的 CMA。

具体来说,该补丁集包含一个名为 “cleancache” 的子系统,这是 Magenheimer 在 2012 年 提出 的一个概念。如果内核必须转储一个数据页,但希望尽可能保留该数据,它可以将其放入 cleancache,cleancache 会将其隐藏在某个地方。如果需要该数据,内核可以将其从 cleancache 中复制回来——如果它仍然存在的话。与此同时,最初包含该数据的页面可以被回收以供其他用途。

保证 CMA 建立在 cleancache 之上,方法是在启动时分配一个物理上连续的内存区域,此时这种分配相对容易。然后,该内存被转换为 cleancache 并提供给内核使用。每当内存管理系统回收文件支持内存页面时,它可以选择将这些页面的数据放入 cleancache 中。如果需要该数据,将尝试从 cleancache 中检索它,然后再从磁盘重新读取它。因此,保留用于 CMA 的内存可以在未分配给 CMA 用户时供内核使用,但受到限制。

在某个时候,某些内核子系统将需要一个大的、物理上连续的缓冲区。从保证 CMA 子系统请求该缓冲区将导致从保留内存中分配,之后会删除分配区域中可能存在的任何缓存数据。由于该数据已被缓存,并明确规定可以随时删除,因此可以快速进行此分配。Seongjae Park 和 Kim 在 2014 年 提出 了这种方法。

这个新的子系统与现有的 CMA API 集成,因此 CMA 用户无需更改即可使用它。保留区域通过显式请求 “guaranteed” 行为的 device tree 属性进行设置。

最终的结果是一个 CMA 版本,它可以保证成功,只要总分配不超过保留区域的大小;现有的 CMA 更有可能失败。由于 CMA 的使用通常仅限于一两个有已知需求的问题设备,因此为特定系统调整保留区域的大小应该很简单。

保证 CMA 的另一个优点是延迟;如果内存可用,则可以快速分配。当前内核中的 CMA 可能必须首先将数据移出分配区域,这需要时间。缺点是保留用于保证 CMA 的内存只能用于可以随意删除的数据;这将增加系统其余内存的压力。

此补丁系列发布于 2025 Linux Storage, Filesystem, Memory-Management, and BPF Summit (2025 年 Linux 存储、文件系统、内存管理和 BPF 峰会) 之前,目前计划在内存管理 track 中进行讨论。在讨论之前可能不会有很多评论。不过,这些补丁相对较小,并且不会侵入未使用 CMA 的系统上的内存管理子系统,因此我们可能会看到超越内存应用程序在首次提出该想法大约 15 年后真正向前发展。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值