Testado, o resultado mostra que o convidado NÃO pode obter mais CPU do que o necessário, mesmo que o escalonador do Linux tenha uma economia de trabalho.
Eu fiz alguns experimentos simples usando um micro benchmark que basicamente gira a CPU. O host é uma máquina dual core que executa o KVM com um único guest vm.
Eu executo vários aplicativos de benchmark no guest vm simultaneamente para ver se ele consegue mais CPU do que merece. O resultado é o seguinte:
-
Quando o vm é configurado com 1 CPU virtual, o sar reporta ~ 100% da utilização da CPU na VM e ~ 50% no host. O comando top no host mostra dois encadeamentos do KVM.
-
Quando o vm é configurado com 2 CPUs virtuais, o sar reporta ~ 100% da utilização da CPU na VM e ~ 100% no host. O comando top no host mostra três encadeamentos do KVM.
Então, minha teoria é que o KVM atribuirá um único thread para cada CPU virtual, e um thread extra é usado para alguma atividade de gerenciamento. Portanto, a VM com CPU virtual única não pode ser atendida em várias CPUs do host simultaneamente.
Acontece uma pergunta estúpida :)