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