Azure 仮想マシンと外部の端末とのスループットを測定する


やりたかったこと

以下の条件のもと、Azure 上の Ubuntu 18.04 LTS の仮想マシンと、外部の端末(今回は自宅のパソコン)のスループットを計りたい。

  • 出来るだけ Firewall に穴をあけたくない。
  • 自宅のネットワークのルーターの静的 NAT の設定を変えたくない。
  • IP 制限のような形はとりたくない。

ちょっとハマったところ

Azure の NSG の設定と、iPerf3 の通信の方向について。

手順

まずは Azure の仮想マシンを立てる

手順については割愛。下記ドキュメントを参照ください。
クイック スタート:Azure portal で Linux 仮想マシンを作成する

ネットワークセキュリティグループの設定

Azure Portal から iPerf3 が使うポートで通信が可能になるような設定を行う。

  1. まずは「ネットワーク」タブを開く
  2. 「受信ポートの規則を追加する」ボタンを押して、受信ポートの規則を追加。
  3. 設定項目としては以下の通り。
    • ソース : Any
    • ソースポート範囲 : *
    • 宛先 : Any
    • 宛先ポート範囲 : 5201
    • プロトコル : Any
    • アクション : 許可
    • 優先度 : 任意で設定
    • 名前 : 任意で設定

iPerf3 をインストール

おなじみの apt でどうぞ。サーバー側、クライアント側、両方にセットアップする必要があります。

sudo apt install iperf3

クライアント側が Windows 10 端末だとしたら、WSL を使うのが便利だと思います。
Windows 10 用 Windows Subsystem for Linux のインストール ガイド
※近々、WSL2 が正式リリースされる見込みなので、この辺の手順は変わるかもしれません。

測定!

Azure の VM 側では iPerf3 をサーバーモードで実行します。

iperf3 -s

画面表示に Port 5201 で待ち受けてる旨表示されれば準備完了。
こんな感じ。

-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

そしたら、例えばクライアント側で以下のコマンドを実行。
一番重要なのは、"-R" オプションで、これをつけ忘れると、Azure VM 側からデータを送ろうとして NSG の設定や、自宅のファイアウォールやルーターの NAT に阻まれて失敗します。

iperf3 -c <AzureVM の Global IP アドレス> -R -t 60 -P 5 --logfile ログファイル名

上記のコマンドの場合、TCP のスループットを 60 秒間、5 スレッドで測定、となっているはず。
細かい iPerf3 の使い方については、ネットを見れば色々あると思うので、自分の好きな設定でやってください。

参考までに測定結果抜粋

家の 300-500Mbps くらい出る光回線で TCP を使って転送速度を計ってみた結果こんな感じ。
Azure VM のサイズも "Standard D2s v3 (2 vcpu 数、8 GiB メモリ)" ということでそこまで大きくないやつ。

もっと速い環境とか、もっとでかい VM サイズを使えば、もっと速くなるかも。

[ ID] Interval           Transfer     Bandwidth       Retr
[  5]   0.00-60.00  sec   494 MBytes  69.1 Mbits/sec  1899             sender
[  5]   0.00-60.00  sec   493 MBytes  69.0 Mbits/sec                  receiver
[  7]   0.00-60.00  sec   474 MBytes  66.3 Mbits/sec  2085             sender
[  7]   0.00-60.00  sec   473 MBytes  66.2 Mbits/sec                  receiver
[  9]   0.00-60.00  sec   644 MBytes  90.0 Mbits/sec  1469             sender
[  9]   0.00-60.00  sec   643 MBytes  89.9 Mbits/sec                  receiver
[ 11]   0.00-60.00  sec   337 MBytes  47.1 Mbits/sec  2194             sender
[ 11]   0.00-60.00  sec   336 MBytes  47.0 Mbits/sec                  receiver
[ 13]   0.00-60.00  sec   450 MBytes  62.9 Mbits/sec  2440             sender
[ 13]   0.00-60.00  sec   449 MBytes  62.7 Mbits/sec                  receiver
[SUM]   0.00-60.00  sec  2.34 GBytes   335 Mbits/sec  10087             sender
[SUM]   0.00-60.00  sec  2.34 GBytes   335 Mbits/sec                  receiver

まとめ

割とでかいデータをサクサクとやり取りできる環境があると思うので、是非 Azure 使ってみてください!
パフォーマンスが気になったら、この記事を参考にして、スループットとかも計ってみてくださいませ!