![如何实现与同一服务器的多个 NFS/TCP 连接?](https://linux22.com/image/618511/%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E4%B8%8E%E5%90%8C%E4%B8%80%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E5%A4%9A%E4%B8%AA%20NFS%2FTCP%20%E8%BF%9E%E6%8E%A5%EF%BC%9F.png)
我正在尝试通过 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。