このエントリは2020/05/22現在の情報に基づいています。将来の機能追加や変更に伴い、記載内容との乖離が発生する可能性があります。
VM間の通信レイテンシやスループットは、VMの配置や機能で改善できる場合がある。
VMの機能
この内容は以下のドキュメントに記載がある。
Azure 仮想マシンのネットワーク スループットの最適化 / Optimize network throughput for Azure virtual machines
https://docs.microsoft.com/azure/virtual-network/virtual-network-optimize-network-bandwidth
高速ネットワーク (Accelerated networking)
VMによっては高速ネットワーク (Accelerated networking) が使えるものがある。
高速ネットワークによって、VM との間でシングル ルート I/O 仮想化 (SR-IOV) が可能になり、ネットワークのパフォーマンスが大幅に向上します。 この高パフォーマンスのパスによってデータパスからホストがバイパスされ、サポートされる VM タイプの最も要件の厳しいネットワーク ワークロードで使用した場合でも、待ち時間、ジッター、CPU 使用率が軽減されます。
Create a Windows virtual machine with Accelerated Networking using Azure PowerShell
https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-powershell
Create a Linux virtual machine with Accelerated Networking using Azure CLI
https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli
間に入るものがないので高速になるよね、ということ。以下の図がわかりやすい。全てのVMで高速ネットワークを有効にすることで最大の効果を得られる。

Azure PowerShell を使用して高速ネットワークを備えた Windows 仮想マシンを作成する
Create a Windows virtual machine with Accelerated Networking using Azure PowerShell
https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-powershell
Azure CLI で、高速ネットワークを使用する Linux 仮想マシンを作成する
Create a Linux virtual machine with Accelerated Networking using Azure CLI
https://docs.microsoft.com/azure/virtual-network/create-vm-accelerated-networking-cli
RSS (Receive Side Scaling)
Windowsで高速ネットワークが使えないVMで、RSS(Receive Side Scaling)が無効になっている場合、有効化するとスループットが増すことがある(Linuxではデフォルトで有効)。これは、受信側がマルチプロセッサの場合に複数のCPUを使って効率よく受信することを可能にするドライバーのテクノロジーを使って受信を並列処理してスループットを向上しよう、というもの。
Receive Side Scaling の概要 / Introduction to Receive Side Scaling
https://docs.microsoft.com/windows-hardware/drivers/network/introduction-to-receive-side-scaling
VMの配置
この内容は以下のドキュメントに記載がある。
リソースの併置による待機時間の短縮 / Co-locate resources for improved latency
https://docs.microsoft.com/azure/virtual-machines/linux/co-location
https://docs.microsoft.com/azure/virtual-machines/windows/co-location
近接通信配置グループ (Proximity placement groups、以下PPG)
PPGとは、物理的に近い場所にVMを配置できるようにするもの。
近接通信配置グループは、Azure コンピューティング リソースが互いに物理的に近くに配置されるようにするために使用される論理的なグループ化です。 近接通信配置グループは、短い待ち時間が要件であるワークロードに役立ちます。
近接通信配置グループ / Proximity placement groups
A proximity placement group is a logical grouping used to make sure that Azure compute resources are physically located close to each other. Proximity placement groups are useful for workloads where low latency is a requirement.
https://docs.microsoft.com/azure/virtual-machines/linux/co-location#proximity-placement-groups
https://docs.microsoft.com/azure/virtual-machines/windows/co-location#proximity-placement-groups
PPGはスケールセット(Virtual Machine Scale Set、VMSS)でも利用可能。また、PPGは可用性セット(Availability set、以下AS)と組み合わせることができるが、可用性ゾーン(Availability zone、以下AZ)を跨いだPPGは構成できない。データセンターを跨いだPPGはあり得ないので、それは当然といえば当然。

近接通信配置グループ / Proximity placement groups
https://docs.microsoft.com/azure/virtual-machines/windows/co-location#proximity-placement-groups
https://docs.microsoft.com/azure/virtual-machines/linux/co-location#proximity-placement-groups
リージョン内にAZがある場合、ASやPPGは下図のような構成をとり得る(AZに含まれないVMはAZ指定されていないもの)。
