Azure VMの高速ネットワーク設定
1.はじめに
Azureにおける仮想マシン(VM)では、既定のネットワーク設定がありますが、Azure PowerShellを使用することでネットワークスループットを向上させて「高速ネットワーク」として最適化することが可能です。
当記事では、Azureの「Windows VM」と「Linux VM(Ubuntu、CentOS、Red Hat などの主要ディストリビューションを含む)」のネットワークスループットを最適化する方法とメリットおよび「Azure portal」を使用した高速ネットワークが有効なVMについてご紹介します。
2.高速ネットワークを使用する
1.メリット
- 1.待ち時間の短縮/1秒あたりのパケット数(pps)が向上する
- 2.ジッターの消滅
- 3.CPUの使用率の削減
データパスから仮想スイッチがなくなるため、パケットからホストでポリシー処理される時間がなくなります。これに付随して仮想マシン(VM)内で処理ができるパケット数が向上します。
仮想スイッチの処理は、適用の必要があるポリシーの量によって異なり、処理を行うCPUのワークロードにも依存します。ハードウェアをオフロードしてポリシーの適用をした場合、パケットが仮想マシンに直接送られるので、その変動が解消されます。また、オフロードを行うことで、ホスト先から仮想マシンへの通信、すべてのソフトウェアへの割り込み、加えてすべてのコンテキストの切り替えもなくなります。
ホスト先の仮想スイッチをバイパスにすることで、ネットワークトラフィックを処理するために使用するCPUの使用率を削減することが可能です。
2.使用するしないでは大きな違いがある
高速ネットワークを使用することで仮想マシンとの間で「シングルルート I/O仮想化(SR-IOV)」することが可能となり、ネットワークパフォーマンスが大幅に向上します。高いパフォーマンスのパスにより、データパスからホストがバイパスされ、サポートされている仮想マシンの種類において、最も要求が厳しい「ネットワークワークロード」での、待ち時間、ジッター、CPUの使用率が低下します。
また高速ネットワークを使用するしないとでは、仮想マシン間での通信状況が大きく事となります。
まず「高速ネットワークを使用する」場合、ネットワークトラフィックは、仮想マシンのネットワークインターフェイス(NIC)に到達して仮想マシンに転送されます。仮想スイッチによって、すべてのネットワークポリシーの適用内はオフロードされ、ハードウェアでの適用となります。ハードウェアに適用したポリシーは、ネットワークインターフェイスでネットワークトラフィックを仮想マシンに直接転送することができます。
一方で「高速ネットワークを使用しない」場合、ネットワークセキュリティグループ、アクセス制御リスト、分離、そのほかのネットワーク仮想サービスなどのポリシーが適用されている「仮想スイッチ」と「ホスト」を、仮想マシンを出入りするネットワークトラフィックがスキャンしていく必要があります。
3.サポートされているオペレーティングシステム
Azure ギャラリーにおける「Windows系」では、以下のディストリビューションが直接サポートされています。
- Windows Server 2019 Datacenter
- Windows Server 2016 Datacenter
- Windows Server 2012 R2 Datacenter
Azureギャラリーにおける「Linux系」では以下のディストリビューションが既定でサポートされています。
- Ubuntu 14.04 (linux-azure カーネルを含む)
- Ubuntu 16.04 以降
- SLES12 SP3 以降
- RHEL 7.4 以降
- CentOS 7.4 以降
- CoreOS Linux
- Debian “Stretch” (バックポート カーネルを含む)
- Oracle Linux 7.4 以降 (Red Hat Compatible Kernel (RHCK) を含む)
- Oracle Linux 7.5 以降 (UEK バージョン 5 を含む)
- FreeBSD 10.4、11.1、および 12.0
3.仮想マシンのネットワークスループットの最適化
1.Windows VM
「Windows」搭載の仮想マシンで「高速ネットワーク」のサポートが有効である場合、スループットにとって最適な構成となります。そのほかすべての「Windows VM」では、「Receive Side Scaling(RSS)」を使用すると、使用していない仮想マシンよりも高いスループットを実現できますが、既定により使用できない場合があります。RSSが有効になっているかを判断するには、「Azure PowerShell」を使用して確認していきます。
- Name:Ethernet
- InterfaceDescription:Microsoft Hyper-V Network Adapter
- Enabled:False
1.RSSが有効かを「Get-NetAdapterRss」PowerShellコマンドで確認
上記のようなコマンド出力例で返信された場合、RSSは無効になっています。
- Get-NetAdapter|%{Enable-NetAdapterRss-Name $_.Name}
2.RSSが無効の場合、以下のコマンドを入力します。
ただし、上記コマンドの出力はありません。このコマンドによつてネットワークインターフェイスの設定が更新され、一時的に接続が切断されます。接続が切断中は、再接続を示すダイアログボックスが表示されるほか、通常は3回目の試行後に再接続されます。
- Name:Ethernet
- InterfaceDescription:Microsoft Hyper-V Network Adapter
- Enabled:True
3.再度「Get-NetAdapterRss」コマンドを入力し、有効になっている場合は以下のコマンドで出力が返信されます。
2.Linux VM
「Azure Linux VM」は、「Windows VM」におけるRSSの既定とは異なり、RSSは既定で常に有効となっています。これは、2017年10月以降にリリースしたLinuxカーネルには、「Linux VM」がより高いネットワークスループットを実現できる新しいネットワーク最適化オプションが含まれているからです。
- 1.新規デプロイ用のUbuntu
「Ubuntu Azureカーネル」は2017年9月末以降、Azure上における最適なネットワークパフォーマンスを提供する既定のカーネルとなりました。このカーネルを入手するには以下のようにサポートされている「16.04-LTS」という最新のバージョンにする必要があります。
- “Publisher”:”Canonical”,
- “Offer”:”UbuntuServer”,
- “Sku”:”16.04-LTS”,
- “Version”:”latest”
JSON
上記のコマンドの入力が完了したら、以下のコマンドを入力して、更新プログラムを入手していきます。この手順は「Ubuntu Azureカーネル」を実行している仮想マシンでも使用することができます。
- #run as root or preface with sudo
- apt-get -y update
- apt-get -y upgrade
- apt-get -y dist-upgrade
Bash
次に以下の省略可能なコマンドセットは、既にAzureカーネルにありますが、エラーで更新に失敗している既存のUbuntuの展開に役立ちます。
- #optional steps may be helpful in existing deployments with the Azure kernel
- #run as root or preface with sudo
- apt-get -f install
- apt-get –fix-missing install
- apt-get clean
- apt-get -y update
- apt-get -y upgrade
- apt-get -y dist-upgrade
Bash
- 2.既存のVM用の「Ubuntu Azureカーネル」をアップグレード
「Azure Linuxカーネル」にアップグレードすることで、スループットのパフォーマンスは大きく向上する場合があります。このカーネルの有無を確認するには以下のコマンドを入力して調べる必要があります。
- #Azure kernel name ends with “-azure”
- uname -r
- #sample output on Azure kernel:
- #4.13.0-1007-azure
Bash
仮想マシンにカーネルが存在しない場合、通常は「4.4」というバージョン番号で始まります。Azureカーネルがない場合は、ルートとして以下のコマンドを実行します。
- #run as root or preface with sudo
- apt-get update
- apt-get upgrade -y
- apt-get dist-upgrade -y
- apt-get install “linux-azure”
- reboot
Bash
- 3.CentOS
最新バージョンの最適化には、以下のパラメーターを指定してサポートされている最新のバージョンを使用して仮想マシンを作成することが有効的です。
- “Publisher”: “OpenLogic”,
- “Offer”: “CentOS”,
- “Sku”: “7.4”,
- “Version”: “latest”
JSON
新規および既存の仮想マシンは、最新の「 Linux Integration Services (LIS)」をインストールすることで大きなメリットを得られます。スループットの最適化には、LISが「4.2.2-2」以降のバージョンに含まれていますが、新しいバージョンになるほど、より向上します。最新のLISのインストールは以下のコマンドでインストールすることができます。
- sudo yum update
- sudo reboot
- sudo yum install microsoft-hyper-v
Bash
- 4.Red Hat
最適化を得るには、以下のパラメーターを指定して、サポートされている最新バージョンを使用して仮想マシンを作成することが有効的です。
- “Publisher”: “RedHat”
- “Offer”: “RHEL”
- “Sku”: “7-RAW”
- “Version”: “latest”
JSON
新規および既存の仮想マシンは、最新の「 Linux Integration Services (LIS)」をインストールすることで大きなメリットを得られます。スループットの最適化には、LISが「4.2」以降のバージョンに含まれていますが、新しいバージョンになるほど、より向上します。最新のLISのインストールは以下のコマンドでインストールすることができます。
- wget https://aka.ms/lis
- tar xvf lis
- cd LISISO
- sudo ./install.sh #or upgrade.sh if prior LIS was previously installed
Bash
4.ポータルを使用したVMの作成
1.ポータルで作る高速ネットワークが有効な仮想マシン
「Azure portal」を使用することで高速ネットワークが有効な仮想マシンを作成することが可能です。以下はポータルで仮想マシンを作成するときの手順です。
- 1.[仮想マシンの作成]ページで[ネットワーク]タブを選択します。
- 2.[ネットワーク]タブの中には[高速ネットワーク]のオプションがあります。
- 3.サポートされているオペレーティングシステムとVMサイズを選択した場合、[高速ネットワーク]のオプションは自動的に[オン]となります。
- 4.それ以外の場合、オプションは[オフ]設定となり、有効にできない理由が表示されます。
[注意]
ポータルからは、サポートされているオペレーティングシステムのみを有効にすることが可能です。カスタムイメージを使用して、そのイメージで高速ネットワークがサポートされている場合は、CLIもしくはPowerShellのいずれかを使用して仮想マシンを作成します。
VMを作成した後、高速ネットワークが有効であるかを以下の手順で確認します。
- 1.Azure portalに移動をして、VMを管理します。この場合、[仮想マシン]を検索して選択を行います。
- 2.仮想マシン一覧で、新しいVMを選択します。
- 3.VMのメニューバーで[ネットワーク]を選択します。
ネットワークインターフェイスの情報で、[高速ネットワーク]というラベルの横に高速ネットワークが[有効]か[無効]であるかの状態が表示されます。
2.既存の仮想マシンの高速ネットワークの有効化
既存の仮想マシンでネットワークの「高速」設定をしていないものでもあとからその機能を有効かすることは可能です。ただし、以下の前提条件を満たしているうえで高速ネットワークがサポートされているものに限ります。
- 1.仮想マシンは高速ネットワークに対してサポートされているサイズであること。
- 2.仮想マシンはサポートされている「Azureギャラリーイメージ(および「Linuxのカーネルバージョン)」であること。
- 3.NIC上で高速ネットワークの有効を設定する前には、可用性セットもしくは仮想マシンスケールケースセットのすべてのVMを停止するか、割り当てを解除しておく必要があります。
5.まとめ
「Windows」「Linux」のいずれかを搭載した仮想マシンの高速ネットワークを有効するかしないかでは全体的なパフォーマンスと得られるメリットには大きな差があります。もっとも、大きな結果を得る場合であるならば、同一のAzure仮想ネットワークに接続された2台以上の仮想マシンで高速ネットワーク設定を有効にしておくことです。高速ネットワークが設定できるVMは「Azure portal」を用いて作成することが可能です。
また、他にもVMを作成する方法は存在します。それは「Azure PowerShell」を使用して「高速ネットワークを使用するWindows VM」の作成ができ、逆に「高速ネットワークを使用するLinux VM」の作成には「Azure CLI」を使用して作成を行います。また、高速ネットワークを有効にしていない既存のVMを、有効にすることは「Windows VM」「Linux VM」でも可能ですが、前提条件を満たしておくことと高速ネットワークをサポートしている必要があります。