摘要:2026年 Linux 社区最火的存储话题是什么?是 DAXFS。本文带你硬核拆解 DAX 技术,手把手教你在没有高性能硬件的情况下,用内存模拟出极致的 I/O 通道。
一、 引言:为什么我们需要 DAX?
在 Linux 的世界里,访问文件一直有个"潜规则":数据必须在磁盘、内核页缓存(Page Cache)和用户空间之间搬来搬去。
虽然页缓存提升了速度,但在高性能计算、AI 推理等场景下,这种**"二次拷贝"**带来的延迟和 CPU 损耗已经成了性能杀手。于是,DAX(Direct Access,直接访问)技术应运而生。
二、 什么是 DAX?绕过内核的"特权路"
简单来说,DAX 是一把开启存储硬件的"仓库钥匙"。
1. 传统 I/O 的"快递模式"
你读一个文件:硬盘 -> 内核缓冲区 -> 应用程序。
- 弊端:浪费内存空间,增加 CPU 拷贝开销。
2. DAX 的"面对面模式"
在支持 DAX 的硬件(如 NVDIMM、CXL 设备)上,内核不再充当搬运工。
-
原理:内核通过
mmap直接将硬件的物理地址映射到进程的虚拟地址空间。 -
结果:应用程序通过 CPU 指令(Load/Store)直接读写硬件,实现真正的零拷贝(Zero-copy)。
最新动态:在 2026 年第 4 周的 Linux 周报中,DAXFS的提议再次将这一技术推向高潮,旨在通过更灵活的文件接口管理大规模共享内存。2026年第4周(1月19日至25日) - Linux 和开源新闻周报
{#section path-to-node="18"}
三、 内核层是如何实现 DAX 的?
DAX 并不是一个简单的驱动,而是 Linux 内核多个子系统的"大合唱":
-
设备识别:内核通过
libnvdimm子系统识别出具有字节寻址能力的硬件(如/dev/pmem)。 -
缺页异常处理:这是最核心的一步。当程序访问数据时,内核触发缺页异常,但它不从磁盘读数据,而是直接修改进程页表,将硬件物理地址填进去。
-
文件系统配合:像 Ext4 或 XFS 这种支持 DAX 的文件系统,在挂载时会调用
dax_direct_access接口,彻底停用页缓存机制。
四、 硬核实操:没有硬件也能玩转 DAX
想在自己的电脑上体验 DAX?不需要昂贵的傲腾内存,我们可以用普通物理内存来模拟。
第一步:修改内核参数
编辑/etc/default/grub,在GRUB_CMDLINE_LINUX中添加:
[Bash]{ngcontent-ng-c2411640571=""}
# 模拟 1G 的持久内存,从物理地址 4G 处开始
memmap=1G!4G
更新 grub 并重启:sudo update-grub && reboot
第二步:检查设备
重启后,你应该能看到一个新的 pmem 设备:
[Bash]{ngcontent-ng-c2411640571=""}
ls /dev/pmem*
# 应该能看到 /dev/pmem0
```text
### 第三步:配置并挂载文件系统 {#第三步配置并挂载文件系统 path-to-node="31"}
使用`ndctl`{index-in-node="3" path-to-node="32"}工具(需安装)配置模式,并以 DAX 模式挂载:
[Bash]{ngcontent-ng-c2411640571=""}
设置为 fsdax 模式
sudo ndctl create-namespace -f -e namespace0.0 --mode=fsdax
格式化并挂载(关键点:-o dax)
sudo mkfs.xfs /dev/pmem0 sudo mount -o dax /dev/pmem0 /mnt/dax_test ```
第四步:验证零拷贝
你可以通过mount命令查看挂载选项,或者使用 C 语言编写一个简单的mmap程序,测试读写延迟。你会发现,这块"磁盘"的速度已经达到了内存级!
五、 总结与展望
DAX 技术是 Linux 向极致性能演进的关键一步。随着CXL和高性能 AI 算力的普及,DAX 将不再是少数专家的玩具,而是开发者必须掌握的底层基石。
想看更多关于 Linux 内核硬核技术的拆解?欢迎关注LeisureLinux公众号,同名B站频道更有详细的操作视频演示,带你领略 Linux 系统的底层之美!