Usar CPUs virtuais
- 7 minutos
Conforme descrito anteriormente, uma vCPU (CPU virtual) funciona como um proxy para uma pCPU (CPU física). Em outras palavras, uma vCPU é uma representação de uma pCPU para um SO convidado (ou seja, um SO executado em uma VM). Uma vCPU pode ser iniciada em uma VM e mapeada para uma pCPU subjacente pelo hipervisor. Em princípio, uma VM pode ter uma ou várias vCPUs. Por exemplo, uma VM no VMware ESX 4 pode ter até oito vCPUs. A quantidade de vCPUs representa a largura de uma VM. Uma VM com uma largura maior que um é chamada de VM SMP (multiprocessamento simétrico). Ao contrário, uma VM com uma largura igual a um é chamada de VM UP (processador único). O seguinte vídeo aborda as VMs multiprocessador em detalhes:
A figura a seguir demonstra uma VM de sistema nativa de SMP com uma largura de quatro e uma VM de sistema nativa de UP, ambas em execução no mesmo hardware.

Figura 6: uma VM do sistema nativo SMP com uma largura de quatro e uma VM do sistema nativo UP, ambas em execução no mesmo hardware
De modo semelhante a um processo em um SO de uso geral, uma vCPU pode estar em diferentes estados, como em execução, pronto e espera. Em um determinado momento, uma vCPU pode ser agendada pelo hipervisor em apenas um núcleo (semelhante ao agendamento de um processo de SO em um núcleo). Por exemplo, uma VM UP em execução em um computador host equipado com dois processadores Xeon 5405 (ou seja, um total de oito pCPUs) será executada em apenas um dos oito núcleos disponíveis. Cargas de trabalho inerentemente paralelas, como aplicativos MapReduce, preferem VMs SMP. Em seguida, abordaremos como o hipervisor agenda vCPUs em pCPUs.
Agendamento de CPU virtual e agendadores do Xen
Os SOs de uso geral dá suporte a dois níveis de agendamento: agendamento de processo e thread. Com um hipervisor, um nível extra de agendamento é adicionado: o agendamento de vCPU. O hipervisor agenda vCPUs nas pCPUs subjacentes, fornecendo, assim, a cada VM convidada uma parte do tempo de processamento físico subjacente.
Discutiremos (brevemente) dois agendadores populares do Xen, SEDF (Simple Earliest Deadline First) e CS (Credit Scheduler). Como o nome sugere, o SEDF é simples, em que apenas dois parâmetros, n (a fatia) e m (o período) estão envolvidos. Uma VM (ou interface do usuário de domínio na linguagem do Xen) pode solicitar n a cada m. O SEDF especifica um prazo para cada vCPU calculada em termos de n e m. O prazo é definido como a última hora em que um domínio pode ser executado para cumprir o prazo. Por exemplo, uma interface do usuário de domínio pode solicitar n = 10 ms e m = 100 ms. Da mesma forma, uma vCPU nesse domínio pode ser agendada pelo SEDF em 90 ms no período de 100 ms, mas ainda cumprindo o prazo. O SEDF funciona por meio da pesquisa no conjunto de todas as vCPUs executáveis (mantidas em uma fila) e da seleção do que tem o menor prazo.
O CS do Xen é mais envolvido do que o SEDF. Primeiro, na configuração de uma VM, cada vCPU na VM é definida com duas propriedades: peso e limite. O peso determina a participação da capacidade de uma pCPU que deve ser fornecido para uma vCPU. Por exemplo, se duas vCPUs, vCPU-1 e vCPU-2 forem especificadas com pesos de 256 (o padrão) e 128, respectivamente, a vCPU-1 terá o dobro da participação da vCPU-2. Os valores podem variar de 1 a 65.535. O limite determina o percentual total de uma pCPU que deve ser dado a uma vCPU. O limite pode modificar o comportamento do peso. No entanto, uma vCPU pode ser mantida sem limite.
O CS converte o peso de cada vCPU em créditos. Os créditos de uma vCPU serão deduzidos desde que ela esteja em execução. Uma vCPU é marcada como over depois que ela fica sem créditos; caso contrário, é marcada como under. O CS mantém uma fila para cada pCPU (pressupondo uma arquitetura de multiprocessador de chip) e armazena todas as vCPUs under primeiro, seguido por todas as vCPUs over. O CS funciona selecionando a primeira vCPU under na fila a ser manipulada em seguida. O CS controla os créditos de cada vCPU e, ao alternar de uma vCPU, coloca-a no final da fila da categoria apropriada. Por fim, o CS aplica o balanceamento de carga, permitindo que uma pCPU sem vCPUs under extraia vCPUs under de filas de outras pCPUs. Mais detalhes sobre o SEDF e o CS podem ser encontrados no livro The Definitive Guide to the Xen Hypervisor1 de Chisnall.
O Xen é um hipervisor de software livre. Portanto, é possível elaborar e adicionar um agendador próprio. Chisnall realiza uma cobertura ótima e abrangente dos recursos internos do Xen, bem como instruções passo a passo para adicionar um novo agendador ao Xen.
Referências
- David Chisnall (2007). O guia definitivo para o hipervisor Xen Prentice Hall