ジャンボフレームを有効にすることでメリットが得られるかどうかをテストしてきました。 XeonクアッドコアE3122CPU、8GのRAMおよびBroadcomNetXtreme IIBCM5716ギガビットイーサネットカードを搭載した2台の同一のDellR210サーバーをセットアップしました。bnx2ネットワークドライバーをオンにしてDebianSqueezeを実行しています両方のシステム。サーバーは、プライベートサブネット上の一方のNICに接続されており、SSHと両方にもう一方のNIC監視:私が知っているOSチューニングパラメータを追加しました:
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を介して9000バイトのジャンボフレーム用に構成されています(Sudo /sbin/ifconfig eth1 mtu 9000
)そして私はpingを介して両方のシステムのMTUを確認しました(ping -s 8972 -M do <other IP>
)。 netperfを使用して一括転送をテストすると、tcpdumpは、データパケットの大部分がフレームサイズ9014で9000バイトの完全なMTUを使用していることを確認します。
ただし、「実際の」アプリケーションでテストする場合、一方のサーバーにPostgresを設定し、もう一方をクライアントとして使用すると、結果セットがメガバイトに達する非常に大きな選択の場合でも、tcpdumpとtsharkによって報告される最大MTUは2160です。 iproute2を使用してルートにadvmssを設定するなどのいんちきを試したにもかかわらず、それを高くすることができません。
考え?
TIA。
Postgresは、ジャンボフレームを完全にパックするための最良の「実際の」アプリケーションではない可能性があります。 古いリストスレッド に基づくと、開発者はTCP_NODELAYやTCP_CORK(Nagleアルゴリズムを無効にする)を使用してパフォーマンスを改善しようとしたようです。
次のような別のアプリケーションを使用してみてください...