#やりたかったこと
以下の条件のもと、Azure 上の Ubuntu 18.04 LTS の仮想マシンと、外部の端末(今回は自宅のパソコン)のスループットを計りたい。
- 出来るだけ Firewall に穴をあけたくない。
- 自宅のネットワークのルーターの静的 NAT の設定を変えたくない。
- IP 制限のような形はとりたくない。
##ちょっとハマったところ
Azure の NSG の設定と、iPerf3 の通信の方向について。
#手順
##まずは Azure の仮想マシンを立てる
手順については割愛。下記ドキュメントを参照ください。
クイック スタート:Azure portal で Linux 仮想マシンを作成する
##ネットワークセキュリティグループの設定
Azure Portal から iPerf3 が使うポートで通信が可能になるような設定を行う。
- まずは「ネットワーク」タブを開く
- 「受信ポートの規則を追加する」ボタンを押して、受信ポートの規則を追加。
- 設定項目としては以下の通り。
- ソース : 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 使ってみてください!
パフォーマンスが気になったら、この記事を参考にして、スループットとかも計ってみてくださいませ!