2つの外向きの10Gbeアダプター(Intel 82599EB)と1つの内向きの10Gbeアダプター(Intel 82598EB)を備えたLinuxファイアウォールがあります。
私が経験している問題は、ファイアウォールがインバウンドトラフィックを非常に低いレート(約2 Mbps未満)でのみ転送することです。ただし、ファイアウォールから「内部」マシンへの直接接続は最大6 Gbpsを取得し、外部マシンからファイアウォールへの直接接続は最大1Gbpsを取得します。明確に行う必要のある調整がいくつかありますが、それらはGbpsの速度を示しています。
最近、2.1.4ドライバー(ロックアップ)の安定性に関する懸念から、Intel ixgbe
ドライバーをバージョン2.1.4から3.7.14に更新しました。これは、スループットの問題が始まったときのようです。
3.7.17リリースも試しましたが、これにより3.7.14と同様のパフォーマンスが得られました。 2.1.4ドライバー(IXGBE_NO_LROおよびIXGBE_NO_NAPIを使用して更新されたカーネル用に再コンパイル)に戻すと、〜Gbpsのスループットを得ることができました(iperf over TCP with 3スレッド)。
これで当面の問題は解決しますが、バグ修正などに遅れずについていきたいので、現在のバージョンのドライバーを使用したいので、私の質問は
具体的には、カーネル/ iptables /ネットワークドライバーなどがパケットの転送に時間を費やしている場所をどのように見つけることができますか?
関連するアドバイスをいただければ幸いです。
1 Gbpsのルーティングパフォーマンスしか得られないのは本当に奇妙です(厳しいフィルタリングでも、通常、同じデバイスのカーネルスペースから2つのコピー、おそらくルーティングの4倍を意味します)-1年前に120Gbpsのルーティングパフォーマンスを得ることができるLKMLの投稿がありましたixgbe
デバイスを備えた2.6.3Xシリーズ。私は主にIntel10GbE NICを使用しており、通常、スイッチドインフラストラクチャ上でiperf
を使用して1000MByte/s +を取得します。
最初に、システムがプレーンTCPで、エンドポイント間にiperfなどを使用してどのように動作するかを確認する必要があります。これでベースラインが得られるはずです。10Gbpsワイヤが必要な場合は、さまざまなことが関係することに注意してください。ネハレム以前のプラットフォームでは、これを達成することさえ不可能です。また、システム負荷はNUMAレイアウトと一致する必要があり、NICは同じPCIコンプレックスに接続する必要があります(これは、8 Gbps未満でスタックしている場合に重要です) .ixgbeソースディストリビューションにはIRQピン留めスクリプト(省電力やキャッシュを台無しにするだけでトポロジを認識しないirqbalancerなども無効にします)があり、RX-TXキューをすべてのコアに均等にレイアウトする必要があります(しばらくしてチェックしました)。
タイミングに関する質問に関しては、プロファイリングサポートでコンパイルされたカーネルとoprofile
のようなシステムレベルのプロファイラーが必要です。
パケットフィルタリングまたはルーティングを有効にして投稿する前に、エンドポイント間のパフォーマンスを改善してください。
数ヶ月前、私はたくさんの小さなパケットを使ったワイヤースピードギガビットルーティングのためにLinuxを最適化することに多大な努力を払いました。これはロードバランサー(IPVS)用であり、NATファイアウォールではありません。これに基づくヒントをいくつか示します。
スイッチング、ルーティング、ファイアウォールなど、カーネルネットワーク機能ごとに費やされた時間の内訳はまだ見ていません。
一方向の注入パフォーマンスは、NICのtcpセグメンテーションオフロードおよびその他の設定の問題が原因である可能性があります。多くの場合、それは発見されるかもしれません、例えば。 VMまたはVPNトラフィックが物理NICを通過します。ethtoolを使用して無効にしてパフォーマンスを確認するのは簡単なので、試す価値があります(テストのために両方のエンドポイントで無効にしてください)。
/usr/sbin/ethtool -K eth0 tso off
/usr/sbin/ethtool -K eth0 lro off
ここにもう少し背景があります:
http://www.peerwisdom.org/2013/04/03/large-send-offload-and-network-performance/https://social.technet.Microsoft.com/Forums/windowsserver/en-US/bdc40358-45c8-4c4b-883b-a695f382e01a/very-slow-network-performance-with-intel-nic-when-tcp-large-send-offload-is-enabled?forum = winserverhyperv
Iptablesは、Linuxシステムにとって本当に効率的なファイアウォールです。優れたルールセットを作成していれば、ボトルネックを開始することなく大量のトラフィックを処理できます。
できることの1つは、すべてのルールをフラッシュしてiptablesを無効にし、デフォルトのFORWARD
ポリシーをACCEPT
に設定することです。このようにして、iptablesの実装に関する懸念を排除できます。その後、ネットワークドライバーを確認し、問題が解決しない場合はデバッグを試みることができます。
アドバイスとして、自分が何をしているのかを理解していない限り、公的にアクセス可能なマシンでiptablesを無効にしないように注意してください。