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

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

我正在尝试了解与 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

我的 MTU 目前为 8K

答案1

NFS {r,w}size 由客户端挂载选项和/或服务器功能定义。换句话说,您可以在命令行上定义它们,例如:

# mount -o rsize=1048576 .....

Linux 客户端对 v3 和 v4 具有不同的默认值 - 32k 和 1MB。nfs 服务器可能请求较小的大小,也可能支持较大的大小。您应该能够使用 wireshark 看到 FSINFO 调用 v3 或 FATTR4_MAXREAD/FATTR4_MAXWRITE 文件属性,这些属性是使用第一个 GETATTR 调用请求的。

RPC 层可以将单个读取或写入请求拆分为多个 RPC 片段。TCP 层可以将单个 RPC 片段拆分为多个 TCP 数据包。另一方面,如果多个 RPC 请求合适,TCP 层可以将多个 RPC 请求合并为单个 TCP 数据包。

有一份相当过时的文件优化 NFS 性能,但会知道如何调整数字。

相关内容