AWS の CPU の歴史とそこから見えてくる戦略
Posted on
あけましておめでとうございます! 去年は AWS 認定試験を制覇したので、今年は実践スキルを今以上に磨いていこうと思います。
さて、最近の EC2 インスタンスは Intel CPU のプロセッサー・ナンバーが公開されています。ですが M1, M2, C1 といった旧世代インスタンスでは CPU にばらつきがあり、当たり外れの差が激しかったのは記憶に新しいところ。
当たりの CPU が出るまで stop → start を繰り返すインスタンスガチャも流行りました (笑)
今回は AWS の CPU について歴史を振り返りつつ、その戦略を考えてみます。物理レイヤーを意識することがほとんどない AWS ですが、物理の知識なしでは最高のパフォーマンスは得られません。知っておいて損はないでしょう。
インスタンスタイプのリリース時期は公式ブログ「EC2 の歴史」に載っていますので参考にしてください。
最初に断っておきますが、今回の記事は想像の域を出ないものが多く真偽のほどが検証できません。それを踏まえた上でお読みください。
インスタンスガチャ世代
M1 (汎用), M2 (メモリ最適化), C1 (コンピューティング最適化) といった旧世代インスタンスはプロセッサー・ナンバーが公開されていません。インスタンスを起動して /proc/cpuinfo
を見ることで初めてプロセッサー・ナンバーがわかります(インスタンスガチャ世代)。
先人たちのブログからガチャで引き当てた代表的なプロセッサー・ナンバーを集めてみました。
- Xeon E5506 @ 2.13 GHz (Q1'09)
- Xeon X5550 @ 2.66 GHz (Q1'09)
- Xeon E5507 @ 2.26 GHz (Q1'10)
- Xeon E5645 @ 2.4 GHz (Q1'10)
- Xeon E5-2650 @ 2 GHz (Q1'12)
2009 〜 2012 年にかけて発売された Xeon プロセッサで、開発コードで言うと Nehalem EP, Westmere EP, Sandy Bridge EP の 3 つです。プロセスルールは 45 nm か 32 nm です。
この頃のハードウェアは減価償却もおそらく済んでおり、また性能も見劣りするので使い回されることはなく徐々に破棄されていると思います(リザーブドインスタンスで利用しているユーザーもいるので、いきなりゼロにはできない)。
インスタンスガチャ世代はプロセッサー・ナンバーやクロック周波数の代わりに ECU という単位が用いられましたが、同じ ECU でも処理能力に違いがありました(CPU の世代が違うので当然ですね)。
CPU のばらつきは AWS が急成長する上で避けられなかったこと(急成長に CPU の供給が追い付かない)ですが、この経験がのちに Intel との戦略的提携に踏み切る理由になったのではないかと思います。詳しくは後述します。
プロセッサー・ナンバー表示世代
2012 年後半にリリースされた M3 (第二世代の汎用) や HS1 (ストレージ最適化) から CPU のプロセッサー・ナンバーが表示されるようになりました。これによりユーザーはインスタンスガチャを心配する必要がなくなりました(プロセッサー・ナンバー表示世代)。
この世代のプロセッサー・ナンバーは 4 つです。
- Xeon E5-2670 @ 2.6 GHz (Q1'12)
- Xeon E5-2680 @ 2.7 GHz (Q1'12)
- Xeon E5-2670 v2 @ 2.5 GHz (Q3'13)
- Xeon E5-2680 v2 @ 2.8 GHz (Q3'13)
2012 〜 2013 年にかけて発売された Xeon プロセッサで、開発コードで言うと Sandy Bridge EP, Ivy Bridge EP の 2 つです。プロセスルールは 32 nm か 22 nm です。
インスタンスガチャ世代と比べてプロセスルールが微細化され AVX の拡張命令セットに対応したのが大きな特徴です。また 1 CPU あたりのコア数が増えたので仮想サーバの集積度も高まったはずです。
実現できた理由を AWS 側の視点で考えてみると、
- キャッシュフローに余裕ができて同じ CPU を大量に調達できるようになった
- クラウド市場が拡大し、ハードウェア調達で規模の経済性が効くようになってきた
- インスタンスガチャの問題は AWS も認識しており、新しいインスタンスタイプで解決したかった
この世代の CPU は EC2 以外に実は Lambda でも使われています。確認した限りではプロセッサー・ナンバーは Xeon E5-2680 v2 のみでした。
Xeon E5-2680 v2 は C3 (コンピューティング最適化) にしか採用されていないので Lambda は C3 の余剰リソース上で動いている と推測できます。最新世代の C4 が登場したことで C3 に余裕が生まれたため、それをうまく活用したのが Lambda と言えそうです。
AWS は IaaS の他にフルマネージドの PaaS も提供していますが、EC2 で余ったリソースか、大量に調達した EC2 と同じハードウェアで構成されていると考えられます。なぜなら、同じハードウェア構成のほうが運用する上で楽ですし、調達する際に規模の経済性が効くからです。
Intel 戦略的提携世代
AWS re:Invent 2014 で発表された Intel との戦略的提携。ここから次の新しい世代が登場します。
これまでの 2 つの世代は市場に出回っている Intel CPU を使っていましたが、C4 からは AWS 向けに最適化された CPU が採用されました。これにより AWS は CPU を安定的に調達できるようになりました(Intel 戦略的提携世代)。
この世代のプロセッサー・ナンバーは 2 つです。
- Xeon E5-2666 v3 @ 2.9 GHz (Q3'14)
- Xeon E5-2676 v3 @ 2.4 GHz (Q3'14)
この CPU は Intel のカタログにも載っていないのでベースになったと思われるものから推測します。 2014 年に発売された Haswell-EP の Xeon プロセッサで、プロセスルールは 22nm です。 Haswell 世代になったことで AVX 2.0 の拡張命令セットに対応しました。
興味深いのはこの CPU が T2 (汎用) の最小インスタンス "t2.nano" にも使われているということです。高い処理能力を必要としない T2 にも採用するということは、AWS は市場からの調達は一切やめて AWS 向けに最適化された CPU しか採用しない方針と取れます。
調達コストはもちろんのこと、電源効率やマザーボードの共通化、仮想サーバの高集積度による省スペース化など様々な要素を考慮するとその方がコストパフォーマンスが良いのでしょう。
AWS re:Invent 2015 では 2 TB のメモリを載せた X1 が発表されました(2016 年前半リリース)が、このインスタンスタイプにはハイエンドサーバ向けの Xeon E7 プロセッサが採用されます。 AWS 初の Xeon E7 シリーズですが、これも AWS 向けに最適化された CPU になるはずです。
まとめ
こうやって振り返ってみると、EC2 は CPU の歴史によって決まっていると言っても過言ではないでしょう。
オンプレミスのように物理的な負債を背負わずに済むのがクラウドのメリットです。インスタンスタイプを変更するのは簡単なので、各世代の特徴を知ってコストパフォーマンスの良い CPU に乗り換えていくのが EC2 の賢い使い方だと思います。
CPU マニアの方がいましたら、ぜひ飲みに行きましょう! → @manabusakai