web-dev-qa-db-ja.com

Amazon EC2 VPC:NATインスタンスのダウンロード速度のパフォーマンス低下

VPCのAmazon EC2内にサーバーのセットがあります。このVPC内には、プライベートサブネットとパブリックサブネットがあります。パブリックサブネットで、基本的に実行されるt2.microインスタンスにNATマシンをセットアップしました このNATスクリプト 起動時にルールをiptablesに注入します。プライベートサブネット内のマシンからインターネットからファイルをダウンロードすることは正常に機能します。

ただし、外部の高帯域幅FTPサーバー上のファイルのダウンロード速度をNATマシンから直接、プライベートサブネット内のマシンからのダウンロード速度と比較しました(同じNATを介して)機械)。本当に大きな違いがありました:プライベートサブネット内のマシンからダウンロードする場合、NATマシンから約10MB/s対1MB/s。

NATマシンではCPU使用率がないため、これがボトルネックになることはありません。より大きなマシン(「中程度のネットワークパフォーマンス」を備えたm3.mediumおよび「高いネットワークパフォーマンス」を備えたm3.xlarge)で同じテストを試みると、2.5MB /秒を超えるダウンロード速度も得られませんでした。

これは、チューニング可能な一般的なNAT問題ですか?パフォーマンスの低下はどこから発生しますか?

更新

いくつかのテストで、この問題を絞り込むことができました。 2013年からUbuntu 12.04またはAmazon Linux NATマシンを使用している場合、すべてがスムーズに実行され、最小のt2.microインスタンスでも完全なダウンロード速度が得られます。 PVマシンとHVMマシンのどちらを使用するかは関係ありません。問題はカーネルに関連しているようです。これらの古いマシンにはカーネルバージョン3.4.xがありますが、新しいAmazon Linux NATマシンまたはUbunut 14.XXにはカーネルバージョン3.14.XXがあります。新しいマシンを調整する方法はありますか?

7
j0nes

ようやく解決策を見つけました。 NATマシン(ルートとして)で実行することにより、ダウンロード速度を修正できます。

ethtool -K eth0 sg off

これにより、スキャッターギャザーモードが無効になり、(私が理解している限り)ネットワークカード自体の一部のネットワーク作業のオフロードが停止します。このオプションを無効にすると、CPU自体が処理を実行する必要があるため、クライアントでのCPU使用率が高くなります。ただし、t2.microマシンでは、DVDイメージをダウンロードするときにCPU使用率の約5%しか確認できませんでした。

これは再起動に耐えられないことに注意してください。したがって、これをrc.localに設定するか、少なくともNATを設定する前に設定してください。

6
j0nes

私もNATボックスを本番環境で同様の設定で使用しているため、調査結果に非常に興味があります。製作前に同様の調査結果がありませんでしたが、おそらく私が注意を払っていなかった問題です。前。

科学しましょう!

================================================== ==========================

理論:NATボックスは、NATを使用しているクライアントよりも速くダウンロードおよびアップロードできます。

実験:質問者の実験と一致させます。 Amazonのt2.micros NAT 2014.09 2つのサブネットNAT IGWに移動し、プライベートサブネットがNATを指しています。(共有テナンシー。汎用SSD)

手順:

# install speedtest
$ Sudo yum install python-pip -y --enablerepo=epel; Sudo pip install speedtest-cli
# run against the same server
$ speedtest-cli --server 935 --simple
# run it many times
$ for ((n=0;n<10;n++)); do speedtest-cli --simple --server 935; done

データ:

          Nat:     Client
Download  727.38   157.99
Upload    250.50   138.91

結論:OPは嘘をついていません。

================================================== ==========================

理論:カーネルのバージョンが異なると、結果も異なります。

実験:それぞれ磁気SSD、m3.medium(バーストなし)、専用テナンシーを備えた3つのNATボックスをセットアップします。速度テストを実行します。

手順:最後の実験を参照してください。また、NATボックスごとにルーティングテーブルを設定します。ルーティングテーブルを交換したときに変更が伝播されたことを証明するために、ブラックホールルーティングテーブルを使用しました。

  1. NATの使用。
  2. curl google.comは機能します。
  3. ブラックホールに切り替えます。
  4. クライアントでcurl google.comが失敗するまで待ちます。
  5. 新しいNATに切り替えます。
  6. curl google.comは機能します。

これが私の3つのnatボックスです:2014.09 3.14.20-20.44.amzn1.x86_64 2014.03 3.10.42-52.145.amzn1.x86_64 2013.09 3.4.62-53.42.amzn1.x86_64

データ:

speedtest-cli --server 935を実行すると、3つのボックスすべてで非常に類似した結果が得られます

09/14   03/14   09/13
355.51, 356.55, 364.04
222.59, 212.45, 252.69

クライアントから:

09/14   03/14   09/13
351.18, 364.85, 363.69
186.96, 257.58, 248.04

結論:劣化はありますか?いいえ。カーネルのバージョンに違いはありますか?番号。

================================================== ==========================

理論:専用テナンシーと共有テナンシーは違いをもたらします。

実験:2 NATボックス。両方ともNAT 2014.09を使用。1つは共有テナンシー、もう1つは専用テナンシー。

データ:どちらのボックスも同様のパフォーマンスです。

Shared Nat   Dedicated Nat
387.67       387.26
296.27       336.89

また、標準偏差も同様です。

$ python3
>>> import statistics
>>> shared_download = [388.25, 333.66, 337.44, 334.72, 338.38, 335.52, 333.73, 333.28, 334.43, 335.60]
>>> statistics.stdev(shared_download)
16.858005318937742
>>> dedicated_download = [388.59, 338.68, 333.97, 337.42, 326.77, 346.87, 336.74, 345.52, 362.75, 336.77]
>>> statistics.stdev(dedicated_download)
17.96480002671891

そして、2x2の組み合わせを実行すると:

      Shared Client/Sh. NAT  Sh. Client/Dedicated Nat  Ded. Client/Sh. Nat  Ded. Client/Ded. NAT
Upload       290.83                      288.17                283.13              340.94
Download     260.01                      250.75                248.05              236.06

結論:共有か専用かがはっきりしない場合でも、大きな違いはないようです。

メタ結論:

おそらくやり直す価値があるテストは、m3.mediumsを使用したOPのテストです。 t2.microの結果を複製することはできましたが、私のm3.mediumはOPのm3.mediumの結果と競合するようです。

カーネルバージョンに関するデータも確認してください。

おそらく、最も興味深い部分は、m3.medium NATをすばやく取得することができなかったことです。

3
Liyan Chang

私のテストでは、これによりダウンロードが悪化したことがわかりました。

m3.large speedtestサーバーm3.medium専用NATサーバー。

この環境では他のトラフィックはありません。

平均ダウンロード速度のsg:292.19平均ダウンロード速度のsgオフ:259.21

私のテストは:((n = 0; n <10; n ++)); speedtest-cli --simpleを実行します。できた

0
Magd