Jmo*_*y38 7 networking nfs mtu
我试图了解与 NFS 和各种缓冲区大小相关的网络设置(并且有很多)。
我正在运行wireshark并检查到达NFS服务器的TCP数据包。Wireshark 在扩展写入操作(客户端-> 服务器)期间显示最大 32626 的数据包大小,假设我正确解释(“线路上的字节”,我认为包括所有网络层标头等)
导出存储的“rsize”和“wsize”NFS 设置在两个 C/S 上都设置为 32k,因此我认为上述结果是此设置的结果。但是,增加这些值不会增加 Wireshark 显示的数据包大小。
所以我的问题是,还有哪些其他限制可以到位?我已经做了大量的研究,这就是我迄今为止所遇到的。在我看来,以下网络限制都不会将传输大小限制为 32k:
从 sysctl:
net.ipv4.tcp_mem = 4096 87380 4194304
net.ipv4.tcp_{r,w}mem = 4096 87380 4194304
net.core.{r,w}mem_max = 131071
net.core.rmem_default = 229376
Run Code Online (Sandbox Code Playgroud)
我的 MTU 目前是 8K
由客户端安装选项和/或服务器功能定义的 NFS {r,w} 大小。IOW,您可以在命令行上定义它们,例如:
# mount -o rsize=1048576 .....
Run Code Online (Sandbox Code Playgroud)
Linux 客户端对 v3 和 v4 有不同的默认值 - 32k 和 1MB。nfs 服务器可能会请求更小的大小,也可能支持更大的大小。您应该能够看到,使用wireshark 作为 v3 或 FATTR4_MAXREAD/FATTR4_MAXWRITE 文件属性的 FSINFO 调用,这是在第一个 GETATTR 调用中请求的。
RPC 层可以将单个读或写请求拆分为多个 RPC 片段。TCP层可以将单个RPC片段分割成多个TCP数据包。另一方面,TCP 层可以将多个 RPC 请求合并到单个 TCP 数据包中(如果它们适合)。
有一个相当过时的文档Optimizing NFS Performance,但会了解如何调整数字。