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

  • 48
    いいね
  • 0
    コメント

概要

クラウドプラットフォームの選択においてコンピュート性能と価格の正しい選定が重要となってきます。このコンピュート性能を表す指標として、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

が導き出されます。