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

我试图了解与NFS和各种缓冲区大小有关的networking设置(并且有不less)。

我正在运行wireshark并检查到达NFS服务器的TCP数据包。 Wireshark在扩展写入操作(客户端 – >服务器)期间显示最大数据包大小32626,假设我解释正确(“我认为networking上的字节包含所有networking层头等)

导出存储的“rsize”和“wsize”NFS设置在C / S上都设置为32k,所以我想上面的结果是这个设置的结果。 但是,增加这些值不会增加Wireshark显示的数据包大小。

所以我的问题是,还有什么其他的限制? 我做了相当多的研究,这是我到目前为止所遇到的。 在我看来,下面的networking限制都不会限制传输大小为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

由客户端安装选项和/或服务器function定义的NFS {r,w}大小。 IOW,你可以在命令行上定义它们,如:

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

Linux客户端对于v3和v4具有不同的默认值 – 32k和1MB。 nfs服务器可能要求更小或者可以支持更大的尺寸。 你应该可以看到,使用wireshark作为FSINFO调用v3或FATTR4_MAXREAD / FATTR4_MAXWRITE文件属性,这是第一个GETATTR调用请求的。

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

有一个相当过时的文件优化NFS性能 ,但会得到一个想法如何调整数字。