Edited at

Azure と AWS のインスタンス性能比較

More than 1 year has passed since last update.


概要

クラウドプラットフォームの選択においてコンピュート性能と価格の正しい選定が重要となってきます。このコンピュート性能を表す指標として、Microsoft Azure では ACU (Azure Compute Unit)、Amazon Web Services では ECU (EC2 Compute Unit) という論理的指標を公開しています。今回はこの指標を用いて、Azure VM と AWS EC2 のインスタンス性能の比較をしてみたいと思います。


Azure と AWS コア数の考え方

一般的に Azure の物理ホストサーバーはハイパースレッディングがオフ(一部 Dv3 インスタンス等で例外あり)、AWS のホストサーバーはオン(一部 HPC インスタンス等で例外あり)となっています。ハイパースレッディングがオフの場合、物理コア 1 に対して論理コアは1となりますが、ハイパースレッディングがオンの場合、物理コア 1 に対して論理コアは2となります。すなわち Azure の仮想マシンで2コアのインスタンスは、物理コア2個にマップされますが、AWS EC2 の場合2コアのインスタンスは物理コア1個にマップされます。

つまり同じ CPU スペックのインスタンスを Azure と AWS で比較した場合、仮想コア数が同じであっても Azure のインスタンスの方が高性能だと言えます。(なぜなら倍の物理コアが割り当てられている為!)これを意識せずに単純に仮想コア数でインスタンスタイプを選定し、Azure と AWS で価格比較してしまうと誤った結果を導き出す事となります。


ACU と ECU

そこで登場するのが冒頭で触れた ACU (Azure Compute Unit)ECU (EC2 Compute Unit) になります。ACU は Azure A1 インスタンス (AMD Opteron 4171 HE @ 2.1 GHz) 1仮想コアのパフォーマンスを 100 と定義し、Azure の各種インスタンスはそれとの相対比較として定義されます。例えば同 CPU スペックで仮想コア数が2個の A2 インスタンスは ACU = 200 となります。ECU は m1.small インスタンス (2007 AMD Opteron 1.0~1.2 GHz) を1として定義されています。


ACU / ECU 比率

この ACU と ECU ですが、論理的な指標となるため変化の激しいクラウド界隈において不変の定義となります。このため ACU と ECU の比率も同様に不変となります。

  ACU ≒ 46 × ECU

この式は Azure, AWS それぞれで複数タイプのインスタンスに対して、同じ CPU ベンチマークを実施する事で求めた結果です。この式を使えば例えば AWS EC2 で m3.large インスタンスは 3.75 ECU なので、46 × 3.75 = 172.5 ACU となります。これに相当もしくはより高性能な Azure インスタンスとしては A2v2 = 200 ACU や D1v2 = 210 ACU 等が挙げられます。これらを価格面で比較すると次のようになります。

東日本(東京) Linux OS ベースの時間単価比較(EC2 JPY は 114円換算、2017/03/14時点の価格)

インスタンス
ACU
時間単価(USD)
時間単価(JPY)

m3.large
172.5
$0.096
10.94円

A2 v2
200
$0.113
11.53円

D1 v2
210-250
$0.102
10.41円

この表を見てわかるように、いずれも比較的同じ価格性能比が示されているのがわかります。また同じ Azure のインスタンスであってもコストパフォーマンスに違いが出ているのがおもしろい結果と言えます。


補足情報

上記の式を導くのに用いた CINBENCH による負荷テスト結果を参考までに掲載しておきます。Azure VM, AWS EC2 の各種インスタンスに対して同一ツールにより負荷をかけることで、負荷テスト結果に対する ACU, ECU の平均値を算出します。

Azure VM
ACU
CINBENCH
ACU/Bench

A2 v2
200
81
2.469136

F1
230
105
2.190476

D3
640
291
2.199313

D4 v2
1840
842
2.185273

H8
2360
1060
2.226415

Avarage

2.254123

AWS EC2
ECU
CINBENCH
ECU/Bench

m4.xlarge
13
275
0.047273

m4.4xlarge
53.5
1131
0.047303

c4.large
8
156
0.051282

c4.4xlarge
62
1256
0.049363

Avarage

0.048805

小学校で分数どうしの割り算を習うかと思いますが、割る数の分子と分母をひっくり返して掛けるので Bench が打ち消され

  ACU/Bench ÷ ECU/Bench = ACU/Bench × Bench/ECU = ACU/ECU

となります。それぞれの平均値より 2.254123 / 0.048805 = 46.186043 となり

  ACU / ECU ≒ 46

すなわち

  ACU ≒ 46 × ECU

が導き出されます。