我正在尝试通过 10Gbps 链路最大化 Linux 客户端和单个 NFS 服务器之间的 NFS/TCP 带宽。尽管每个 NFS 挂载都有自己的设备(主要/次要),但一切都归结为单个 TCP 连接,这是一个瓶颈。
使用 iperf 和多个 TCP 连接,我可以达到~8Gbps,但 NFS 卡在单个 TCP 流上并限制为~2Gbps(尚未进行 TCP 调整)。
在 Solaris 上,系统设置rpcmod:clnt_max_conns
允许设置系统能够与单个 NFS 服务器建立多少个并发 TCP 连接。
是否有 Linux 等效物或方法可以做到这一点?
作为一种解决方法,我知道我可以在 NFS 服务器上设置许多 IP,然后在它们上对挂载点进行负载平衡,但这不是最佳的。
答案1
从...开始Linux 内核 5.3新的挂载选项“nconnect=X”可用,其中 X 指定要使用的服务器的 TCP 连接数。
答案2
您可以切换回 UDP 并使用巨型数据包(例如 4k 数据报)。让整个网络支持巨型帧可能会有很大帮助,这样您就不必在每一端重新组装 IP 数据包。
答案3
如果您使用的是 NFS v4.1 或更高版本,您可能能够使用 pNFS(并行 NFS)。根据 Red Hat 的以下发布信息,它在 RHEL 6.4 中可用,但我没有看到任何更新表明它在其他 Linux 发行版中可用。
pNFS 在 2010 年的 RFC5661 中定义。您可能需要调查您的存储设备是否完全支持 pNFS。