I am currently doing some performance testing of web-apps that we have moved to AWS.
One of the things we have noticed is that vCPU performance doesn't seem to be nearly as good as we'd expected. In fact, on a highly utilize single vCPU machine we recognized that 50% of the reported CPU usage (via vmstat) were reported as CPU steals. We seemed to only be getting half of the core cycles.
After doing some research, it appears that on most EC2 instances a vCPU actually means you get one of the available hyperthreads on a single core. Effectively, this means each vCPU can only be relied upon for 50% of of the cycles of the physical core.
There are several articles we found which seems to confirm what we are seeing: http://www.pythian.com/blog/virtual-cpus-with-amazon-web-services/
Is it true that a vCPU is actually only a single hyperthread on a core or are we interpreting the data incorrectly? If it is true, are there are any instance types where we would actually get access to both hyperthreads of the core?
Obviously we could setup EC2 instances with double the vCPU count but this has software license implications as the proprietary software we run is currently licensed by cores. The software vendor currently does not differentiate between a vCPU and a core. We don't want to pay twice the licensing costs because our infrastructure provider and software vendor's CPU definitions are not aligned.