针对 NFS 性能的 TCP/IP 调整准则

NFS 使用 UDP 或 TCP 执行其网络 I/O。

确保已应用 TCP 和 UDP 性能调整调整 mbuf 池性能中描述的调整方法。 特别是应该执行以下操作:

  • 通过运行 errpt 命令并查找网络设备或网络介质问题的报告来检查系统错误日志项。
  • 确保 LAN 适配器的发送和接收队列都设置为最大值。 请参阅 调整适配器资源 以获取更多信息。
  • 使用 netstat -i 命令检查 Oerrs 。 这类错误很多可能表示相关网络设备的发送队列大小不够大。
  • 确保 TCP 和 UDP 套接字缓冲区大小已适当配置。 nfso 命令的 nfs_tcp_socketsize 可调参数控制由 NFS使用的 TCP 套接字缓冲区大小 tcp_sendspacetcp_recvspace。 同样,nfs_udp_socketsize 可调参数控制着由 NFS 使用的 UDP 套接字缓冲区大小 udp_sendspaceudp_recvspace。 请遵循 TCP 和 UDP 性能调整中描述的准则来设置套接字缓冲区大小可调参数。 与普通 TCP 和 UDP 调整一样, no 命令的 sb_max 可调参数的值必须大于 nfs_tcp_socketsizenfs_udp_socketsize 值。 通常,您应该发现 AIX 中使用的缺省值应该足够,但检查此值不会有任何影响。 要检查 UDP 套接字缓冲区是否超出限度,请运行 netstat –s –p udp 命令,并查找在 socket buffer overflows 字段中报告的大量丢弃的包。
  • 确保系统中配置了足够的网络内存。 运行 netstat –m 命令,并查看是否有任何针对已拒绝或已延迟 mbuf 的请求。 如果是的话,增加网络可用 mbuf 的数量。 有关调整系统以消除 mbuf 问题的更多信息,请参阅 调整 mbuf 池性能
  • 检查常规的路由问题。 使用 traceroute 命令来查看无法预料的路由转发或延迟。
  • 如果可能的话,增大局域网上的 MTU 大小。 例如在 16 Mb 千兆以太网上,MTU 大小从缺省的 1500 字节增加到 9000 字节(巨型帧)可允许发送完整的 8 KB NFS 读或写请求,而不用分段。 它还更为有效地利用了 mbuf 地址空间,减小了超载的可能性。
  • 检查是否有 MTU 大小不匹配。 运行 netstat -i 命令并检查客户机和服务器上的 MTU。 如果它们不同,那么试着将它们改成同一个数看问题能否消除。 还需要了解慢速或广域网设备(如机器之间的路由器或网桥)可能会对信息包进一步分段以遍历各网络段。 可能的一个解决方案是试着确定源和目标之间的最小 MTU,并将 NFS 加载的 rsizewsize 设置更改成某个小于 MTU 最小公分母的数。
  • 使用 TCP 运行 NFS Version 3 时,如果使用缺省值 32 KB 或更大的 RPC 大小,那么应该设置 nfso 命令的 nfs_rfc1323 选项。 这允许 TCP 窗口大小大于 64 KB,从而帮助最小化等待 TCP 应答的时间。 必须在 TCP 连接的每一侧(例如在 NFS 服务器和客户机上)都设置该选项。
  • 检查很小的信息包间的延迟。 很少有实例说明这样产生过问题。 如果服务器和客户机之间有路由器或其他硬件,那么可以检查硬件文档来查看是否可以配置信息包间的延迟。 如果可以,那么尝试加大延迟。
  • 检查是否有大量的介质速度不匹配。 当信息包在两种速度差别很大的介质上遍历上,如果它们减慢高速网络并尝试摆脱慢速网络,那么路由器可能会删除它们。 例如当路由器尝试从千兆以太网上的服务器获取信息包并将它们发送到 100 Mbps 以太网中的客户机上,可能会发生这种情况。 在 100 Mbps 以太网上可能无法发出足够快的信息包以跟上千兆以太网。 除了替换路由器外,另一个可能的解决方案是尝度减慢客户机请求速率和/或使用较小的读/写大小。
  • 允许进入服务器的最大 TCP 连接数可由新的 nfs_max_connections 选项控制。 缺省值是 0,表示没有限制。 客户机会关闭空闲时间超过五分钟的 TCP 连接,当用户授权时连接可以被重新建立。 服务器会关闭空闲时间超过六分钟的连接。
  • 操作系统提供了一个用于关闭 NFS 所独有的 UDP 和校验 (checksum) 功能的选项。 您可以使用称为 udpchecksumnfso 命令选项。 缺省值为 1,表示启用校验和。 关闭这个功能后性能会有轻微的提升,这是以数据毁坏的可能性增大为代价的。