It has now been more than a year I am using Amazon Cloud for websites hosting. I have to admit that it works pretty well and I am quite happy about their services.
However, I got a strange problem a few days ago.
I was deploying an application on two different large instances of Amazon Cloud, one would be the UAT (User Acceptance Testing) server and the other one would be the Production server.
Strangely enough, the version running on the Production server was running slower than on the UAT server! Why?
At first, I thought I missed something with the server configurations. But no, everything was absolutely identical! So where does this difference of speed come from?
After some more investigation, I had the brilliant idea to execute the following command:
cat /proc/cpuinfo |
On the Production server, this command was returning the following:
processor : 0 |
vendor_id : AuthenticAMD |
cpu family : 15 |
model : 65 |
model name : Dual-Core AMD Opteron(tm) Processor 2218 HE |
stepping : 3 |
cpu MHz : 2599.998 |
cache size : 1024 KB |
physical id : 0 |
siblings : 1 |
core id : 0 |
cpu cores : 1 |
fpu : yes |
fpu_exception : yes |
cpuid level : 1 |
wp : yes |
flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy |
bogomips : 5202.40 |
TLB size : 1024 4K pages |
clflush size : 64 |
cache_alignment : 64 |
address sizes : 40 bits physical, 48 bits virtual |
power management: ts fid vid ttp tm stc |
processor : 1 |
vendor_id : AuthenticAMD |
cpu family : 15 |
model : 65 |
model name : Dual-Core AMD Opteron(tm) Processor 2218 HE |
stepping : 3 |
cpu MHz : 2599.998 |
cache size : 1024 KB |
physical id : 1 |
siblings : 1 |
core id : 0 |
cpu cores : 1 |
fpu : yes |
fpu_exception : yes |
cpuid level : 1 |
wp : yes |
flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow up pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy |
bogomips : 5202.40 |
TLB size : 1024 4K pages |
clflush size : 64 |
cache_alignment : 64 |
address sizes : 40 bits physical, 48 bits virtual |
power management: ts fid vid ttp tm stc |
And on the UAT server, it was returning the following:
processor : 0 |
vendor_id : GenuineIntel |
cpu family : 6 |
model : 23 |
model name : Intel(R) Xeon(R) CPU E5430 @ 2.66GHz |
stepping : 10 |
cpu MHz : 2666.762 |
cache size : 6144 KB |
physical id : 0 |
siblings : 1 |
core id : 0 |
cpu cores : 1 |
fpu : yes |
fpu_exception : yes |
cpuid level : 13 |
wp : yes |
flags : fpu de tsc msr pae cx8 apic sep cmov pat clflush acpi mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc pni ssse3 cx16 lahf_lm |
bogomips : 5337.55 |
clflush size : 64 |
cache_alignment : 64 |
address sizes : 38 bits physical, 48 bits virtual |
power management: |
processor : 1 |
vendor_id : GenuineIntel |
cpu family : 6 |
model : 23 |
model name : Intel(R) Xeon(R) CPU E5430 @ 2.66GHz |
stepping : 10 |
cpu MHz : 2666.762 |
cache size : 6144 KB |
physical id : 1 |
siblings : 1 |
core id : 0 |
cpu cores : 1 |
fpu : yes |
fpu_exception : yes |
cpuid level : 13 |
wp : yes |
flags : fpu de tsc msr pae cx8 apic sep cmov pat clflush acpi mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc up pni ssse3 cx16 lahf_lm |
bogomips : 5337.55 |
clflush size : 64 |
cache_alignment : 64 |
address sizes : 38 bits physical, 48 bits virtual |
power management: |
As you can see, these two servers actually don’t have the same CPU model name. But the biggest difference is probably the CPU MHz (2666.762 on UAT and 2599.998 on Production) and the cache size (6MB on UAT and only 1MB on Production).
So what does that mean? Two large instances of Amazon Cloud actually don’t have the same power?
The answer of this question is actually on the Amazon instance types description (http://aws.amazon.com/ec2/instance-types/) under the ‘Measuring Compute Resources’ chapter:
Amazon EC2 uses a variety of measures to provide each instance with a consistent and predictable amount of CPU capacity. In order to make it easy for developers to compare CPU capacity between different instance types, we have defined an Amazon EC2 Compute Unit. The amount of CPU that is allocated to a particular instance is expressed in terms of these EC2 Compute Units. We use several benchmarks and tests to manage the consistency and predictability of the performance of an EC2 Compute Unit. One EC2 Compute Unit provides the equivalent CPU capacity of a 1.0-1.2 GHz 2007 Opteron or 2007 Xeon processor.
In conclusion, two identical instance types of Amazon Cloud have the same number of EC2 Compute Units but because a EC2 Compute Unit is equivalent to a CPU capacity between 1.0Ghz and 1.2Ghz, the actual speed of the instance will be slightly different!
Mystery solved.