我一直在testing,看看是否可以从启用巨型帧获得任何好处。 我已经build立了两台完全相同的戴尔R210服务器,包括至强四核E3122 CPU,8G内存和Broadcom NetXtreme II BCM5716千兆以太网卡。 我在两个系统上运行Debian Squeeze和bnx2networking驱动程序。 服务器在私有子网上各自连接一个网卡,并使用另一个网卡进行SSH和监控。 我已经添加了我知道的操作系统调优参数:
sysctl -w net.core.rmem_max=134217728 sysctl -w net.core.wmem_max=134217728 sysctl -w net.ipv4.tcp_rmem="4096 87380 134217728" sysctl -w net.ipv4.tcp_wmem="4096 65536 134217728" sysctl -w net.core.netdev_max_backlog=300000 sysctl -w net.ipv4.tcp_sack=0 sysctl -w net.ipv4.tcp_fin_timeout=15 sysctl -w net.ipv4.tcp_timestamps=0 ifconfig ethX txqueuelen 300000 ethtool -K eth1 gso on
Ethtool -k输出显示
rx-checksumming: on tx-checksumming: on scatter-gather: on tcp-segmentation-offload: on udp-fragmentation-offload: off generic-segmentation-offload: on generic-receive-offload: on large-receive-offload: off ntuple-filters: off receive-hashing: off
两台服务器都通过ifconfig( sudo /sbin/ifconfig eth1 mtu 9000 )为9000个字节的巨型帧configuration,并且通过ping确认两个系统上的MTU( ping -s 8972 -M do <other IP> )。 当我使用netperftesting批量传输时,tcpdump证实大多数数据包使用9000字节的完整MTU,帧大小为9014。
然而,当我testing一个“真正的”应用程序 – 我在一台服务器上设置Postgres,并使用另一台作为客户端,由tcpdump和tshark报告的最大MTU是2160,即使是非常大的select结果集运行到兆字节。 尽pipe在使用iproute2的路由上设置了advmss之类的诡计,但我还是无法让它走得更高。
思考?
TIA。
Postgres可能不是最好的“真正”的应用程序来充分包装巨型框架。 基于旧的列表线程 ,看起来开发人员尝试使用TCP_NODELAY和/或TCP_CORK(禁用Naglealgorithm)来提高性能。
尝试使用不同的应用程序,例如…