持久内存(Persistent Memory, PM)因其低延迟和数据持久性,成为下一代存储技术的理想选择。然而,传统的块设备 I/O 软件栈冗长,限制了 PM 的访问效率。现有的解决方案大多采用内存映射(MMIO)的方式来访问 PM,虽然能缩短 I/O 路径、提高性能,但在多进程环境下,现有基于 MMIO 的文件系统面临诸多挑战,如重复缺页中断(每个进程访问 PM 需单独映射,导致成倍的缺页中断开销,且页表内存占用大)和多进程不一致性(进程对 PM 映射的更改互不可见,同步操作增加软件开销并阻塞并行读写)。同时由于现有内存保护机制存在局限性,跨进程共享持久内存文件系统还面临数据可靠性挑战,使得现有系统在多进程任务中受限,无法提供可扩展的性能。
在冯丹教授和童薇副教授的指导下,实验室博士生丁波设计并开发了一种名为 MPFS 的多进程用户态持久内存文件系统,致力于解决多进程场景下的用户态持久内存系统的性能与可靠性问题。
图1 MPFS架构图
MPFS 通过引入可共享页表,实现了多个进程间高效共享 PM 映射,减少了软件开销与内存占用。为构建此可共享页表,MPFS 采用设备粒度映射,将 PM 映射到用户空间大连续区域,并通过 PGD 对齐的映射方法,确保页表结构规整,便于跨进程共享,同时减少了页错误与地址转换开销。在持久化方面,MPFS 引入扁平转储区域,仅持久化共享页表的最后一级条目,加速了页表持久化过程。同时,原子pswap ()操作确保了系统崩溃时共享页表的一致性与并发安全性。
图2 MPFS页表共享管理方案和内存保护机制
针对数据可靠性问题,MPFS 采用内核态-用户态协同内存保护机制。在用户态,利用 Memory Protection Key (MPK) 进行进程内用户态内存保护,避免频繁进行核态权限管理所带来的额外开销;在内核态,管理页表结构权限位,实现进程间内存保护,有效防止恶意写操作,保障多进程场景下的数据可靠性,同时可利用PGD对齐操作优化权限位的覆盖范围,大幅度降低内核态权限管理开销。
图3 MPFS性能分析
通过实验对比,MPFS 在多进程场景下性能显著优于现有用户空间 PM 文件系统,性能提升高达 1560%。在单进程场景下,也比现有系统提高约 20%。在顺序写操作中,MPFS 带宽比部分竞争对手高出数倍,且在实际应用测试中,MPFS 表现出色,性能受并发访问影响小,而对比系统 ctFS-mp 性能下降明显。
该工作题为“MPFS: A Scalable User-space Persistent Memory File System for Multiple Processes”,现已被CCF B类会议DATE 2025(Design, Automation, and Test in Europe Conference)接收,并得到国家自然科学基金青年科学基金项目(62302182)的支持。