1. 背景
在测试 NFS Over RDMA 的性能时,发现 4M 的文件的读取性能竟然能达到 45GB/s。
|
|
而磁盘的 4M 多线程读取性能只有 6 GB/s
|
|
2. NFS Over RDMA VS NFS
3. 数据拷贝路径比较
3.1 NFS
传输路径:
磁盘 -> 内核页缓存 -> 用户态内存 (read) -> 内核态网络缓冲区 (send) -> 协议栈处理 -> 网卡 -> 网络 -> 网卡 -> 协议栈处理 -> 内核态网络缓冲区 (receive) -> 用户态内存 (write) -> 磁盘
3.2 NFS Over RDMA
传输路径:
磁盘 -> 内核页缓存 -> RDMA 网卡 -> 网络 -> RDMA 网卡 -> 内核页缓存(绕过内核网络协议栈)-> 用户态内存 (write) -> 磁盘
3.3 比较
对比项 | NFS (基于 TCP/IP) | NFS Over RDMA |
---|---|---|
数据拷贝 | 需要多次拷贝(用户态 ↔ 内核态,网络缓冲区等) | 采用 RDMA 直接访问内存,减少拷贝 |
CPU 占用 | 高,CPU 需处理协议栈和数据拷贝 | 低,RDMA 硬件卸载传输,减少 CPU 负担 |
延迟 | 较高,TCP/IP 处理增加开销 | 低,绕过协议栈,直接 DMA 访问 |
吞吐量 | 受限于 TCP/IP 和 CPU 处理能力 | 高,RDMA 提供更高的带宽 |
网络协议 | 依赖 TCP/UDP 传输协议 | 使用 RDMA 直接访问远程内存 |
适用场景 | 适用于一般网络环境,对低成本存储共享适用 | 适用于高性能计算(HPC)、大规模分布式存储 |
部署复杂度 | 易于部署,适用于标准以太网 | 需支持 RDMA(RoCE 或 InfiniBand),部署较复杂 |
硬件依赖 | 只需要标准网卡 | 需要 RDMA 兼容网卡(如 RoCE、InfiniBand) |
4. 传输路径逐步分析
FIO 测试的传输路径:
内核页缓存 -> RDMA 网卡 -> 网络 -> RDMA 网卡 -> 内核页缓存(绕过内核网络协议栈)-> FIO 用户态内存
从监控中,可以看到,在测试期间只有前一次测试的磁盘操作,后面就都没有经过磁盘。fio 的 direct=1 参数只能控制客户端是否使用缓存,不能控制 NFS 服务端。
但 RDMA 的速度跑满了,能达到 45 GB/s。
测试一下内存的读写速度:
|
|
|
|
内存的读写速度分别达到 145 GB/s 和 79.9 GB/s,远高于单个 RDMA 网卡的 45 GB/s。
这样看,fio 测试大文件读取时的瓶颈,确实就是 RDMA 网络传输速度。