首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【技术原理】FamFS如何解锁CXL共享内存的文件系统语义

【技术原理】FamFS如何解锁CXL共享内存的文件系统语义

作者头像
数据存储前沿技术
发布2026-05-18 11:18:17
发布2026-05-18 11:18:17
1220
举报

阅读收获

  • 理解FamFS如何通过单写多读的仅追加日志机制,在分布式环境中突破传统文件系统的元数据一致性瓶颈,实现控制面与数据面的彻底分离
  • 掌握大页映射、DAX设备、虚拟内存缺页中断机制在共享内存场景中的协同运作,以及CXL DCD标记化资源调度的实现逻辑
  • 认知FamFS在存储生态中的独特生态位——它填补了从单机内存共享到多主机FAM之间的关键空白,但也面临应用场景限定的现实挑战
  • 洞察CXL内存共享在AI推理、大数据处理、数据库等场景的差异化价值,以及美光等芯片原厂推进内存可编程性的战略意图

全文概览

存储架构的演进始终围绕一个核心矛盾展开:应用需要海量、低延迟的数据访问,但传统的单机内存受限于物理容量,远端存储又难以提供内存级的性能保证。

CXL(Compute Express Link)的出现打破了这一僵局。通过DCD(Dynamic Capacity Device)机制,CXL实现了多主机间的内存共享——内存资源可以像云基础设施一样被动态调度和回收。但问题随之而来:现有文件系统体系(ext4、xfs、tmpfs)都是为单机架构设计的,它们缺乏对多主机共享内存池的原生支持。

美光开源的FamFS(Fabric-Attached Memory File System)正是对这一空白的填补。它采用极简的"仅追加日志"架构,将共享内存的物理特性与成熟的文件访问语义相融合,让应用能够透明地跨越物理边界,以接近缓存行级的延迟访问集群级的共享数据。

这不仅是一个存储系统的优化,更是对"内存即网络资源"这一新范式的具体化实现。 但FamFS的出现也引发了更深层的思考:在高性能场景和灵活性需求间的权衡、与既有生态的兼容性挑战、以及真正的应用场景在哪里——这些问题将决定CXL内存共享在工业界的落地速度。

👉 划线高亮 观点批注


  • 基于日志的轻量化分布式设计: Famfs 采用了极简的“单写多读”架构。通过将元数据统一维护在仅追加日志中,Master 节点负责序列化所有变更,而 Client 节点仅需同步日志流,这种设计极大地简化了跨 CXL 节点的元数据一致性难题。
  • 解耦元数据控制面与数据面: 架构实现了明显的层级分离——复杂的元数据逻辑留在用户空间以保持灵活性,而高性能的数据路径(如 I/O 和内存映射)则由内核直接承载。这确保了应用在访问共享内存时能够达到原生硬件的缓存行级延迟。
  • 支持非连续物理内存的虚拟化封装: 借助标准的文件系统抽象,Famfs 能够处理底层物理内存碎片(如 DCD 动态分配产生的非连续 Extents)。它将离散的物理内存块转化为应用可见的连续虚拟地址空间,使开发者无需关注复杂的内存地址对齐和 DPA 管理。

  • DCD 是 CXL 共享内存的基石: 区别于传统的固定容量内存,DCD 通过内置的分配机制实现了内存的“按需动态分配”。这种机制是实现多主机(Multi-host)共享内存的前提,使得内存资源可以像云资源一样被灵活调度和回收。
  • Fabric Manager 扮演关键协调角色: 在复杂的共享拓扑(如 MHD 或 Switch 架构)中,内存的可见性和访问权限不再由本地 BIOS 静态决定,而是由 Fabric Manager 动态控制。只有经过显式的分配指令,操作系统层(Linux)才能感知并挂载这些内存资源。
  • 统一的软件管理逻辑: 无论底层的物理拓扑是简单的直接连接还是复杂的交换网络,Linux 内核对其处理逻辑保持一致。通过将分配的内存抽象为 dax 设备,系统管理员可以灵活地将其作为原始块设备使用,或直接并入系统地址空间作为 RAM 使用,这为上层应用(如 famfs)提供了标准化的底层支撑。

文章中提到了核心的技术前提是CXL推出了DCD的功能实现。DCD通过为内存分配引入了标记的概念,也就是给内存空间打了一个标签。基于这些标签的字段和属性,就可以为上层文件系统,或者说功能层提供更多的API接口,从而实现更灵活的扩展和丰富的软件定义


  • 基于标记(Tag)的精细化资源调度: CXL DCD 通过为内存分配引入“标记”概念,实现了物理内存向虚拟 dax 设备的转化。这种命名空间设计允许系统在逻辑上隔离或共享特定的内存块,是实现多租户内存池化的关键技术手段。
  • 多主机并发共享能力: 架构图直观展示了 tag0tag3 等资源如何在多台主机(Host A/B/C)之间并发呈现。这种“一屏多显”的内存共享模式打破了传统服务器内存的物理边界,为大规模分布式协作和数据零拷贝提供了可能。
  • 软件定义的内存布局灵活性: famfs 能够跨越多个标记实例运行并支持复杂的文件交织(Interleaving)。这意味着上层软件可以不受物理地址限制,灵活地将分布在 DCD 不同部位的内存资源整合成一个高性能、大容量的逻辑文件系统。

理解 famFS 的场景价值之前,一个核心的问题是:经典的 CXL 内存共享逻辑适用于什么场景?famFS 的文件系统挂载解决了什么问题,扩大了哪些应用场景,同时又带来了哪些问题?


  • 文件与内存访问的本质统一: 幻灯片阐明了现代操作系统中“内存映射文件”的核心逻辑:一旦数据加载进内存,对文件的访问即转化为指令级的内存拷贝(memcpy)。这种机制消除了用户态与内核态之间传统 I/O 调用的开销,是 famfs 能够通过文件接口提供内存级性能的理论基础。
  • 虚拟内存系统的关键角色: 强调了硬件层(TLB)和软件内核层(页表、文件系统 fault 函数)在地址解析中的协同工作。当请求的数据不在内存时,通过文件系统的介入实现自动调页,这使得大文件可以透明地映射到受限的虚拟地址空间内。
  • 从存储语义向内存语义的平滑过渡: 该图解旨在证明,通过标准文件系统接口(如 /data/set0)来利用 CXL 解耦内存池,在底层机制上与传统的内存映射技术是一脉相承的,这进一步验证了 famfs 对现有软件生态的友好性。

famFS的文件系统对应用层是透明的话,就有必要在虚拟内存中构建对famFS中数据的映射关系,否则在读取famFS中的数据过程中就势必有一个系统调用过程


  • 文件 I/O 向内存语义的转化: 幻灯片阐述了传统文件系统的 Page Cache 机制。当数据被加载到内存页后,原本的存储访问转化为了 CPU 指令级的内存操作(memcpy),这是实现 famfs 等高性能内存文件系统的理论根基。
  • 按需调页(On-demand Paging)的局限性: 示意图直观展示了“稀疏缓存”的现状。对于传统基于 SSD 的后端存储,当发生缺页(Page Fault)时,系统必须从慢速的块存储中检索数据,这会产生巨大的延迟抖动。
  • 为 CXL 共享内存铺平逻辑路径: 这一页通过回顾传统内存映射机制,旨在引出后续对比:如果后端存储不再是慢速 SSD,而是高性能的 CXL 共享内存池,这种 fault() 机制带来的性能损耗将大幅降低,从而实现真正意义上的大容量共享内存化访问。

这一页即在强调虚拟内存中构建对 CXL/famFS 中文件的虚拟映射关系该如何设计


  • 彻底的非稀疏全内存映射: 区别于传统文件系统的“按需调页(On-demand Paging)”和“稀疏缓存”,Famfs 确保文件始终完全映射在内存中。这种设计消除了传统文件系统在运行时频繁触发 fault() 调用带来的不确定性延迟,实现了极致的性能确定性。
  • 利用大页映射极大提升效率: 通过在 DAX 共享内存设备上采用大页映射技术,Famfs 成功将虚拟内存管理的软件开销降低了 512 倍。由于 CXL 等共享内存池通常是预先分配且非稀疏的,这使得大页映射带来的页表规模缩减和 TLB 效率提升成为了“无代价”的纯性能增益。
  • 构建在可共享 DAX 设备上的高性能接口: Famfs 的核心优势在于将共享内存的物理特性(dax 内存设备)与成熟的文件访问语义结合。它不仅仅是文件的内存化,更是通过底层架构的优化(如大页、消除稀疏性),让应用能够以最低的 CPU 开销访问跨主机共享的海量数据集。

  • 现有文件系统体系的功能缺失: 传统的持久化文件系统(如 ext4、xfs)和内存文件系统(如 tmpfs)在设计之初仅针对单机架构。即便具备 DAX 能力,它们也无法处理多主机环境下共享内存池(Multi-Host FAM)的分配、元数据一致性和路径权限分发。
  • famfs 的独特生态位: famfs 被定义为一种 fsdax 类型的文件系统,其核心使命是扩展 VFS(虚拟文件系统)的功能边界。它通过“仅追加日志(Append-only log)”机制,将原本局限于单机的内存管理能力延伸至多主机共享环境,实现了内存资源在集群维度的“文件化”访问。
  • 从内存管理向共享织网架构的跨越: 图片展示了技术演进的逻辑——从处理本地块设备的“存储语义”,进化到处理本地内存的“内存语义”,最终通过 famfs 演进为处理跨主机共享内存资源的“织网语义(Fabric-attached Memory)”。这标志着存储接口正在成为解耦架构下管理海量池化内存的关键控制平面。

===

  • Conventional file systems(传统文件系统): 跨越了从底层存储到单机内存共享的范围,但无法触及 DAX 和多机共享。
  • Anon. mmap(匿名映射): 专注于本地内存分配。
  • Fsdax (xfs, ext4, etc.): 跨越了单机内存共享与直接/DAX 内存分配。
  • Ramfs, tmpfs, hugetlbfs: 覆盖了本地分配到单机共享,具有无后端存储、延迟或立即分配(Eager allocation)的特性。
  • Needed: fsdax famfs(需求项:fsdax famfs): 图中底部的蓝色双箭头明确指出,famfs 旨在填补从“单机内存共享”到“多主机共享内存 (FAM)”这一关键空白。

这张图有巨大的信息量在其中。它解释了从非易失性存储到内存,不同中间态存储语义实现逻辑,以及在系统交互中的调用方式,最终强调了 famFS 实现的中间件价值


  • 极简的一致性控制平面: Famfs 采用了基于“仅追加日志”的单写多读架构。通过将 Master 写入的元数据流实时同步给多个 Client,并暂时牺牲删除/截断功能,它成功绕过了分布式环境下复杂的缓存一致性协议难题。
  • 高性能数据面通路: 架构实现了控制面(用户空间处理元数据)与数据面(内核处理 I/O)的分离。由于数据映射基于 DAX 设备,应用访问延迟被压缩至缓存行级,真正发挥了共享内存的硬件优势。
  • 内存碎片的透明封装: 借助文件系统抽象,Famfs 能够将物理上离散的 CXL 内存块(由 DCD 动态分配产生)转化为应用友好的连续虚拟地址空间,降低了开发人员管理异构内存池的复杂度。

  • 实现内存级的并行 I/O 性能: 通过支持条带化,Famfs 能够将单一文件的数据流分布到多个独立的 CXL 内存设备上。这种机制类似于磁盘时代的 RAID 0,但作用于内存总线,极大地提升了大规模数据集的吞吐能力。
  • 极低开销的地址转换: 采用固定大小的数据块和条带设计,使得复杂的跨设备地址映射被简化为简单的数学计算(O(1) 复杂度)。这意味着在享受多设备并行带宽的同时,系统不会产生明显的 CPU 计算负担或元数据查询延迟。
  • 透明的内存碎片管理: Famfs 利用文件系统抽象,将分布在不同物理设备、可能并不连续的内存块,封装成应用可见的连续文件空间。这种“免费”的隐藏不连续性能力,解决了 CXL 动态容量设备(DCD)分配过程中常见的物理地址空间碎片化问题。

Note

这张图给未来软件定义内存预留了更多想象空间。底层 CXL 实现的内存共享,本质上是物理链路的直接访问,它提供了分离内存的最高性能保障(带宽和时延)。随着应用场景的拓展,基于软件定义的灵活和扩展性将促使内存的可编程性呈现出更多的需求,这时候类似 famFS 的架构实现能为上层系统提供更灵活的接入方式

美光作为内存颗粒原厂,促成自身产品的场景丰富度,在这个背景下,famFS是满足美光的主航道的。但也存在一些风险,这个风险是CXL的落地进展。目前来看,行业内对CXL最大的期望是扩展AI推理场景的KV cache卸载。但这个场景其实是一个高性能场景,并不适合famFS这种灵活、文件系统语义实现的功能。

通常来讲,大内存场景,比方说数据库和大数据处理,上层应用也都具备原生内存语义的访问实现。那么留给famFS的到底是哪些应用场景?这些场景有多大的空间,其实是需要去思考的

相关阅读

  1. FAM与CXL:HPC存储架构的未来机遇
  2. 从CXL路标,看数据中心再解耦
  3. H3:CXL内存池化:架构演进与实践挑战
  4. CXL内存池化:K8s调度实战指南
  5. INTEL:FMM CXL内存扩展

延伸思考

这次分享的内容就到这里了,或许以下几个问题,能够启发你更多的思考,欢迎留言,说说你的想法~

Q1 | 应用场景的真实约束

FamFS提供的是灵活的文件系统语义和跨主机透明访问,但高性能场景(如AI推理的KV cache卸载)通常需要细粒度的内存语义控制。那么FamFS真正适配的应用场景边界在哪里?这些场景的市场规模是否足以支撑CXL在数据中心的广泛部署?

Q2 | 一致性与性能的权衡

FamFS通过牺牲删除/截断功能来简化一致性控制。这种设计在追求"足够好"时做出了何种取舍?对于需要频繁修改元数据的应用(如数据库的B树索引更新),FamFS的仅追加日志机制是否会成为新的性能瓶颈?

Q3 | 生态兼容性的长期风险

美光将FamFS开源,旨在构建CXL内存共享的标准化接口。但如果NVIDIA、Intel等其他生态玩家各自推出竞争方案,FamFS如何在"事实标准"竞争中保持影响力?开源方案与商业芯片厂商利益的冲突点何在?

原文标题:Famfs: Open Source Scale-Out Shared Memory File System Notice:Human's prompt, Datasets by Gemini-3-Pro

#FMS25 #CXL内存扩展 ---【本文完】---

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 王知鱼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档