MTU 和 NFS rsize/wsize 选项之间的关系

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

kof*_*ann 3

由客户端安装选项和/或服务器功能定义的 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,但会了解如何调整数字。