Núcleos de CPU virtualizados x threads


8

Temos um sistema host KVM no Ubuntu 9.10 com uma CPU Xeon Quad-core mais recente com hyperthreading. Conforme detalhado na página do produto da Intel , o processador possui 4 núcleos, mas 8 threads. / proc / cpuinfo e htop listam 8 processadores, embora cada um indique 4 núcleos no cpuinfo. O KVM / QEMU também relata 8 VCPUs disponíveis para atribuir aos convidados.

Minha pergunta é: quando estou alocando VCPUs para convidados da VM, devo alocar por núcleo ou por segmento? Como o KVM / QEMU reporta que o servidor possui 8 VCPUs para alocar, devo definir um convidado para usar 4 CPUs, onde anteriormente o configuraria para usar 2 (assumindo 4 VCPUs totais disponíveis)? Eu gostaria de obter o máximo possível do hardware host sem alocar demais.

Atualização: a resposta do Chopper3 é sem dúvida a abordagem correta. No entanto, eu ainda adoraria ouvir especialistas em hardware que pudessem elucidar os aspectos de desempenho de threads versus núcleos ... alguém?

Respostas:


8

Defina o número mais baixo de vCPUs que seus servidores precisam para desempenhar suas funções, não os aloque demais, ou você pode facilmente desacelerar suas VMs.


1
Parece uma abordagem sábia. Ainda assim, estou curioso para saber como a alocação de VCPUs por thread e não por core afeta o desempenho. Mas vi algumas das coisas muito ruins que podem acontecer com a superalocação, e usar o mesmo número de VCPUs que em um host sem hyperthreaded parece lidar com a carga adequadamente para os convidados, portanto, deixarei bem o suficiente e planeje experimentar em uma caixa de não produção em algum momento.
Nedm 15/04

1
+1, a resposta também depende da sua carga de trabalho. Para VMs fortemente vinculadas à CPU, conte-as como tendo um núcleo inteiro; para VMs ociosas ou com IO, conte-as como tendo um encadeamento. Mas, em geral, sempre aloque o mínimo possível e evite grandes dores de cabeça.
Chris S

1
Embora eu concorde com a abordagem minimalista, o KVM não é o VMWare nesse sentido. Nenhum meio gangue de agendamento mais vCPUs por VM pode ser usado sem causar danos
dyasny

5

Normalmente, o HT funciona bem em cargas de trabalho mais pesadas no IO - a CPU pode agendar mais tarefas de processamento na fila da outra CPU virtual enquanto a primeira CPU virtual aguarda no IO. Na verdade, todos os subsistemas HT o atraem é a alternância de contexto acelerada por hardware - que é o padrão de carga de trabalho que também é usado ao alternar entre VMs. Portanto, o HT (normalmente) reduzirá um pouco a desaceleração quando você tiver mais VMs do que núcleos, desde que cada VM obtenha um núcleo virtual.

A atribuição de várias vCPUs a uma VM pode melhorar o desempenho se os aplicativos na VM forem gravados para segmentação, mas também dificultará a vida do hypervisor; ele precisa alocar tempo em 2 ou 4 CPUs ao mesmo tempo - portanto, se você tiver uma CPU quad-core e uma VM com quad-vCPU, apenas uma VM poderá ser agendada durante esse intervalo de tempo (enquanto pode executar quatro diferentes VMs de vCPU única) de uma vez só).


@ Chris, @ techieb0y: Obrigado, este é exatamente o tipo de insight que eu estava procurando.
Nedm 25/04

isso não é exatamente verdade. Quando uma VM com vCPUs quad precisa agendar um único v-core, é isso que é agendado no host, nem todos os quatro núcleos. Pelo menos este é o caso com KVM (eu sei abordagem da VMware é menos eficaz, como fazem gangscheduling)
dyasny

5

Isso é bastante complicado. Dependendo das cargas, o HT pode aumentar o desempenho em ~ 30% ou diminuí-lo. Normalmente, aconselho a não alocar mais vCPUs do que você tem núcleos físicos, para uma única VM, mas se a VM estiver bastante inativa (e, é claro, essa VM não precisará de muitas CPUs), ela pode ser dada como vCPUs como você tem threads. Você realmente não quer dar a uma única VM mais vCPUs do que os núcleos agendáveis, é o que estou conseguindo. De qualquer forma, o conselho do @ Chopper3 é correto - não dê à VM mais CPUs v do que o necessário.

Portanto, dependendo de quão carregadas e críticas são suas VMs, você não faz uma avaliação geral, mantém a contagem de núcleos físicos ou atinge a contagem de threads por VM.

Agora, entrando na questão do HT, geralmente é uma coisa boa de se ter, especialmente quando você compromete mais vCPUs em suas VMs do que núcleos físicos ou até threads, porque facilita o agendador do Linux agendar esses vCPUs.

Uma última coisa, com o kvm, uma vCPU atribuída a uma VM é apenas um processo no host, agendado pelo agendador do Linux, para que todas as otimizações normais que você pode fazer aqui se apliquem facilmente. Além disso, a configuração de núcleos / soquetes é exatamente a maneira como esse processo será exibido para o SO convidado da VM, no host ainda é apenas um processo, independentemente de como a VM o vê.


2

Penso em elaborar a resposta do Chopper3: se os sistemas estiverem na maior parte ociosos da CPU, não atribua um monte de vcpu, se eles são intensos na CPU, tenha muito cuidado para não atribuir uma classificação geral. Você deve poder alocar um total de 8 vCPU sem contenção. Você pode fazer uma localização geral, mas, se o fizer, verifique se nenhum convidado, especialmente um que consome muita CPU, tem 8 vcpu ou você terá contenção. Não sei se o mecanismo do agendador KVM é mais específico do que isso.

O exposto acima é baseado no seguinte entendimento de vCPU versus CPU fixada, mas também na suposição de que o KVM permitirá que um único convidado (ou vários convidados) monopolize toda a CPU real de outras pessoas se você alocar (/ eles) threads suficientes. vCPU ~ encadeamento do host, CPU convidada CPU = núcleo do host, CPU convidada (Não reproduzi com vCPU mista e CPU fixada no mesmo convidado, porque não tenho Hyperthreading.)


1
A vCPU fixada é apenas um processo de CPU virtual designado para executar apenas em um núcleo específico (ou um subconjunto de núcleos). Se você não estiver na atribuição geral e deseja garantir que as VMs não estejam disputando o mesmo tempo de CPU do núcleo, você pode fixá-las em núcleos diferentes. Esta é também uma maneira de fazer NUMA pinagem, mas você pode fazer isso diretamente nos dias de hoje
dyasny
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.