まめ畑

ゆるゆると書いていきます

EC2で同じECUだけどCPUは違う

AWSのEC2ではインスタンスのCPU性能をECUという単位で表します。
知られているとは思いますが、ECUが同じだからといって性能が同じとは限りません。

ここ最近、その例が実運用の環境で顕著に出ていたので書いておきます。


とある、数千qpsを受け付けている、DBサーバ(m2.4xlarge)でqpsは同じなのに負荷状況が全く違う状態でした。

LA

f:id:con_mame:20130408185313p:plain

CPU Usage

f:id:con_mame:20130408185327p:plain


この2台のインスタンスの違いはCPUです。

負荷が高いほうが
Intel(R) Xeon(R) CPU X5550 @ 2.67GHz

低いほうが
Intel(R) Xeon(R) CPU E5-2665 0 @ 2.40GHz
となっています。
しかし、ECUはどちらも26 ECUとなっています。
ちなみに、前者が4コア 8スレッド、後者が8コア 16スレッドですが、インスタンスからはどちらとも8コアに見えています。
Cacheサイズももちろん違います。

そりゃ、違うよね…という感じです。
世代違いとなっています。
物理サーバ筐体も1−2世代違うだろうし…


c1.xlargeや他のインスタンスでも同様にSandy Bridge世代のXeonが乗っているものが増えて来ました。
他のスペックが低いインスタンスでも同様にCPUのバラ付きがあります。

CPUのバラ付きはこの2種類というわけではなく数種類あります。

クラウドで物理サーバを意識しなくて良くなったと思う方も多いと思いますが、クラウドと言っても実態は多くの物理サーバの集合でなので、古くなれば交換されます。もちろん、昔の筐体やパーツは入手出来なくなる時期は必ず来るので、リージョンが出来てから年数が経てば物理サーバは順次入れ替わっていきます。
なので、ECUでは比較できない、実際の性能差があるという事を念頭に置いてパフォーマンステストを実施するといいかと思います。

値段同じなので、古い筐体にあたってしまった場合は、stop -> startで物理筐体の移動をするのも1案かと思います。
しかし、新世代CPUの筐体にあたっても、不調でstop->startしたら、旧CPUになりかねないので注意です。


起動時にcpuinfoを見て所望の世代のCPUがあたるまでstop->startするという荒業もありますが、一回起動してすぐstopしても1h分の料金が請求されるので現実的ではないです。