この記事は更新から24ヶ月以上経過しているため、最新の情報を別途確認することを推奨いたします。
はじめに
AzureポータルからVMを作成する際、高速ネットワークのオプション設定がありますが、既存VMの設定を有効化する為にはPowershellでの操作が必要です。
とにかく手順だけ知りたいという方は「既存の VM で高速ネットワークを有効にする」という手順の部分だけ参照してください。
本記事では高速ネットワークが有効でないWindows VMの高速ネットワークオプションを有効にする方法とその効果測定について記載しています。
高速ネットワークの概要
高速ネットワークについてはこちらのドキュメントに詳細が記載されています。
Azure PowerShell を使用して高速ネットワークが有効な Windows VM を作成する
高速ネットワークの有効化は無料です。料金はかかりません。
高速ネットワークとは端的にいうと、「仮想スイッチでの処理を無くして早くする」という仕組みです。
高速ネットワークを使用しない場合と使用した場合、2 台の VM 間の通信を比較すると以下のようになります。
URLに詳細な記載がありますが、以下理由によりネットワークが高速化されます。
1.待ち時間の短縮/1 秒あたりのパケット数 (pps) の向上
仮想マシンとの通信時、仮想スイッチを経由しなくなるため、パケットからホストでポリシー処理される時間がなくなります。
これにより、仮想マシン内で処理できるパケットの数が増加します。
2.ジッターの削減
ネットワーク遅延のジッター(揺らぎ)が解消されます。(遅いときと早いときの差が無くなる)仮想スイッチの処理は、適用する必要があるポリシーの量によって異なります。また、処理を行っている CPU のワークロードにも依存します。 ポリシーの適用をハードウェアにオフロードすると、パケットが VM に直接配信されるので、その変動が解消されます。 オフロードを行うと、ホストから VM への通信、すべてのソフトウェア割り込み、すべてのコンテキスト切り替えもなくなります。
3.CPU 使用率の削減
ホスト先の仮想スイッチをバイパスにすることで、ネットワークトラフィックを処理するために使用するCPUの使用率を削減することが可能です。
制限と制約
サポートされるオペレーティング システム
本記事ではWindowsのみに言及していますがLinuxでもサポートされています。
Windows
Linux
サポートされている VM インスタンス
vCPUの数によって高速ネットワークをサポートするかどうかが決まります。
サポートされている VM インスタンス
シリーズにもよりますが基本的には4つ以上のvCPUがサポート対象です。
2 つ以上の仮想 CPU (vCPU)・・・Dv2/DSv2 と F/Fs
4 つ以上の仮想 CPU (vCPU)・・・D/Dsv3、D/Dsv4、Da/Dasv4、E/Esv3、Ea/Easv4、Fsv2、Lsv2、Ms/Mms、および Ms/Mmsv2
高速ネットワークが有効になっていない仮想マシンの設定を変更する場合は、VM が停止されて、割り当てを解除されるときにだけ、機能を有効にできます。既存VMの機能を有効化する為にはVMを停止する必要がありますのでご注意ください。
今回は、「高速ネットワークオプションが既存で有効になっていない場合」を想定して、機能を有効にする方法について記載しています。
既存の VM で高速ネットワークを有効にする
高速ネットワークが有効になっていないVMの設定を変更することはAzurePortal上からの操作では実行できません。Powershellを使用する必要があります。手順については以下に記載があり、本記事でもこの手順を実行していきます。
個別の VM および可用性セット内の VM
1.仮想マシンの停止
VM (可用性セットの場合は、セット内のすべての VM) を停止するか、割り当てを解除します。
2.高速ネットワークの有効化
①~④までは事前準備です。設定の有効化コマンドは⑤~⑦です。
①Azure に接続します。
Connect-AzAccount
※事前にmoduleインストールが必要です
②サブスクリプション一覧表示
Get-AzSubscription
・表示された一覧から操作対象のサブスクリプションIDを確認し、③のコマンドで指定します
③サブスクリプション選択
Select-AzSubscription -SubscriptionId XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXXXXXXX
④仮想マシンのネットワークインターフェース情報が取得でいることを確認
※以降の手順でエラーとならないようにコマンド単体で確認しています
Get-AzNetworkInterface
⑤仮想マシンのNIC情報をセット
$nic = Get-AzNetworkInterface -ResourceGroupName “myResourceGroup” -Name “myNic“
・myResourceGroupには仮想マシンが所属するリソースグループ名を設定します。
・myNicには仮想マシンのネットワークインターフェース名を設定します。
⑥高速ネットワーク有効化
$nic.EnableAcceleratedNetworking = $true
⑦NIC設定の保存
$nic | Set-AzNetworkInterface
以上で高速ネットワークが有効となります。
GUI上のNIC設定からも有効ステータスが確認可能です。
効果測定
仮想マシン情報
以下2台の仮想マシン間でNW速度を測定しました。
サイズ :standard D4s v3 (4 vcpu 数、16 GiB メモリ)
OS :Windows Server 2016 Datacenter
ディスク: standard HDD (128GB)
NWの測定ツールには以下で紹介されているNTttcpを利用しました。
帯域幅/スループットのテスト (NTTTCP)
高速ネットワーク有効化前
有効化前の2台のVM間のNW帯域です。秒間221MB(1,768Mbps)という数値でした。
高速ネットワーク有効化後
有効化後の2台のVM間のNW帯域です。秒間603MB(4,824Mbps)という数値でした。
NWのスループットに注目すると確実に早くなっています。
補足:ディスク性能について
NW高速化前後でファイルコピー時間を計測して、高速化が確認できるかどうか試してみましたが、結論、NWスループットが問題となる領域のテストはできませんでした。ファイルコピーではディスク性能が先に問題となる為、NW高速化実施だけでは、ファイル転送時間は短縮できませんでした。
以下、細かいファイル1万個のコピーと、それと同じサイズのファイル1個のコピー時間を計測した結果です。
NW高速化前後ではコピー時間は変わらず(むしろ遅くなっていますが誤差だと思います。。)、ディスクをPremium SSDに変更すると顕著に性能が向上しました。
NW高速化 | ディスク | 9.76 GBのファイルコピー(ファイル数1万)時間 (単位:分) | 9.76 GBのファイルコピー(ファイル数1)時間 (単位:分) |
OFF | Standard HDD | 4:25 | 2:51 |
ON | Standard HDD | 4:43 | 2:40 |
ON | Premium SSD | 2:22 | 1:46 |
上記テストで使用したディスク情報は以下です。
Standard HDDのディスク性能
ディスクサイズ 128 GiB
IOPS 最大 500
ディスクスループット 最大 60 MB/秒
Premium SSDのディスク性能
ディスクサイズ 256 GiB
IOPS 1100
ディスクスループット 125 MB/秒
Premium SSD利用時の、NWスループットのグラフです。左のグラフの山がファイル1万個のコピー、右の山がファイル1個のコピーです。NWスループットの数値だけ見ると、理論値の上限にはまだまだ達していないように見えます。
一報ディスク観点で見てみると、大きいファイル1個をコピーする際のディスクスループットが頭打ちになっているように見えます。
ディスク性能観点で更に処理を向上させる余地があるように見えます。
※小さいファイル1万個のコピーの部分は、IOPSの問題だと思うのですが、IOPS自体は900ぐらい出ており、まだゆとりがありました。他部分(VMサイズなど)がボトルネックの可能性があります。
NW高速化については、NW以外(仮想マシンサイズ、ディスクなど)の部分でそのNW速度に見合うだけの性能を確保しないと、高速化の恩恵を得ることができないようです。