FBMM: Making Memory Management Extensible With Filesystems——论文泛读

ATC 2024 Paper 论文阅读笔记整理

问题

CXL这样的新内存技术实现了多种内存配置,如分层内存、远内存和内存处理。为了支持这些新的硬件配置,需要对操作系统进行大量修改。例如,Meta的TPP内核补丁对NUMA和页面回收策略进行了更改,对22个内核文件进行更改以实现分层内存系统[33]。然而,Linux的内存管理(MM)子系统使得为新的内存硬件添加软件支持变得更加困难:它是单一的,功能分布在数十个文件中,其中许多文件需要对每个扩展进行修改。

相比之下,文件系统和存储可以通过VFS和块层进行扩展,通过标准化的驱动程序接口进行驱动程序扩展,通过协议进行网络连接。这些组件都可以作为独立组件实现,而无需修改核心内核代码。

挑战

随着内存系统多样性和异构性的增加,操作系统内存管理必须具有可扩展性,以应对需求的快速增长。包括以下四个目标:

  • 表达性:可扩展性接口必须允许表达各种各样的MM行为。

  • 透明度:未经修改的应用程序应该能够使用MM扩展。

  • 控制:高级应用程序需要为特定区域指定内存行为。

  • 非侵入性:实施不应要求对现有的MM代码进行大量更改。

本文方法

本文使用Linux虚拟文件系统(VFS)提供的内存管理回调来编写内存管理器,称为内存管理文件系统(MFS),而不是为内存管理器创建一个全新的可扩展接口。通过在MFS的装载目录中创建和映射文件来分配内存,并通过删除文件来释放内存,称为基于文件的内存管理(FBMM)。

  • 表达性:VFS层提供的回调函数允许MFS控制如何处理MM事件,如页面错误。

  • 透明度:在内核的内存管理系统中添加了一个小的填充层,通过创建内存支持的文件并将分配请求分配给特定文件,将mmap等MM系统调用透明地转换为文件操作。

  • 控制:基于文件系统实现,文件系统为不同的MM实现提供了一种方便的命名机制。应用程序可以在MFS的装载目录中手动创建和映射文件,以提供特定内存区域所需的功能。

  • 非侵入性:方法基于现有的VFS回调,只需要添加填隙层。

FBMM用于分层内存、连续分配和内存带宽分配,每个管理器包含500-1500行代码。使用FBMM是,MFS可以与内核分开编译,并在需要时动态加载。

开源代码:GitHub - multifacet/fbmm

实验测量了使用文件系统进行内存管理的开销,发现当分配单个页面时,开销小于8%,而当分配128个页面时,开销则小于0.1%。

总结

针对适应新内存硬件的内存管理系统,原始方法适应新硬件需要大量内核程序的修改。本文提出基于文件的内存管理(FBMM),使用Linux虚拟文件系统(VFS)提供的内存管理回调来编写内存管理器,将其独立为内存管理文件系统(MFS),通过在MFS的装载目录中创建和映射文件来分配内存,并通过删除文件来释放内存。通过拦截内存管理系统调用并转换为MFS中的文件系统操作,对应用程序透明。也支持应用程序在MFS的装载目录中手动创建和映射文件,以提供特定内存区域所需的功能。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妙BOOK言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值