EC2:microインスタンスのCPUがへぼいというお話

すでにお気づきの方も多いと思われますが、
microインスタンスってCPU弱いですよねー。


でも、以下を見ると
「スモールインスタンスと同等」もしくは「バーストとかあるからむしろ速くなるんじゃね?」
と勘違いしがち。

スモール インスタンス(デフォルト)
1 EC2 Compute Unit (1 EC2 Compute Unitを有する1仮想コア)
マイクロインスタンス
最大2 EC2 Compute Units (短期の定期的なバースト)

http://aws.amazon.com/jp/ec2/instance-types/


しかし、あきらかに
マイクロインスタンスのCPUはスモールインスタンスより遅い
です。
特に、CPUを長時間占有するmakeなどはかなり顕著に違いが出ます。


さらによく見ると以下のようなことが書いてありますね。

マイクロインスタンスは、少量の整合性のあるCPUリソースを提供し、他のサイクルが可能になると、CPU容量をバーストできます。定期的にかなりの計算サイクルを消費する、少量のスループットアプリケーションやウェブサイトに最適です。マイクロンスタンスは、定常状態では、スモールインスタンスが実行するコンピュートリソースの一部を受け取ります。したがって、莫大な計算量や定常状態を必要とするアプリケーションには、スモール インスタンス(または、必要に応じてより大きいもの)の使用をお勧めします。しかしマイクロ インスタンスは、2 ECU まで定期的にバーストすることができます (短期間)。これは、スタンダード スモール インスタンスで利用可能な ECU の2倍に相当します。したがって、時折著しいコンピュートサイクルの消費を必要とする比較的低いスループットのアプリケーションやウェブサイトには、マイクロ インスタンスの使用をお勧めします。

http://aws.amazon.com/jp/ec2/instance-types/


ほほー、マイクロインスタンスのCPUリソースは
スモールインスタンスが実行するコンピュータリソースの一部を受け取る、
と書いてありますね。
どうもこのあたりが怪しい。

どのくらい性能が違うのか

試してみました。*1
とあるインスタンスにmuninエージェントを置いて、2台のサーバを監視しています。*2
muninはデフォルトで5分おきに静的にグラフを生成しますが、その時に負荷が高くなっているようです*3。
CPUグラフは以下のようになりました。
左側がmicroインスタンスで実行している時。
右端のほうは途中でsmallインスタンスに変更したときのグラフです。

microインスタンスには血の雨が…!


この赤い部分はstealという値。
ゲストOSが「リソースくれくれ」といってるのにホストOSが「やあよやあよ」って言ってる割合らしいです。
http://www.atmarkit.co.jp/flinux/rensai/xen05/xen05b.html


ちなみにLoadAverageはこんな感じ。
同じくmicroインスタンス(左側)とsmallインスタンス(右側)。*4

10倍くらい違いますね。

結論

CPU使うサーバにmicroインスタンスはまったくもって使えません><
素直にsmall以上のインスタンスを使っておきましょう

*1:実は試したというか、microがあまりに使えなかったのでスモールに置き換えたという

*2:ローカルも含めると合計3台

*3:ちなみに設定で動的生成も可能です

*4:図に描くの飽きたw