Atualmente, estou realizando alguns testes de desempenho de aplicativos da web que movemos para a AWS.
Uma das coisas que notamos é que o desempenho de vCPU não parece ser tão bom quanto esperávamos. De fato, em uma máquina de vCPU altamente utilizada, reconhecemos que 50% do uso de CPU relatado (via vmstat) foram relatados como roubo de CPU. Nós parecíamos estar recebendo apenas metade dos ciclos principais.
Depois de fazer algumas pesquisas, parece que na maioria das instâncias do EC2, uma vCPU significa que você obtém um dos hyperthreads disponíveis em um único núcleo. Efetivamente, isso significa que cada vCPU só pode ser usada em 50% dos ciclos do núcleo físico.
Existem vários artigos que encontramos que parecem confirmar o que estamos vendo:
link
É verdade que uma vCPU é, na verdade, apenas um único hyperthread em um núcleo ou estamos interpretando os dados incorretamente? Se for verdade, existem tipos de instância em que realmente obteríamos acesso a ambos os hyperthreads do núcleo?
Obviamente, poderíamos configurar instâncias do EC2 com o dobro da contagem de vCPUs, mas isso tem implicações de licença de software, pois o software proprietário que executamos está atualmente licenciado pelos núcleos. O fornecedor de software atualmente não diferencia entre uma vCPU e um núcleo. Não queremos pagar o dobro dos custos de licenciamento porque as definições de CPU do nosso provedor de infra-estrutura e do fornecedor de software não estão alinhadas.