Estou tentando entender melhor como os hipervisores funcionam. Eu sei que apenas um hipervisor por vez pode usar o suporte de virtualização da CPU. Também sei que o Hyper-V é um hipervisor tipo 1, portanto, quando ativado, ele "inicializa" antes do Windows e executa o Windows como uma VM especial com acesso privilegiado ao hardware.
O Hyper-V suporta virtualização aninhada , expondo (de alguma forma) as extensões de virtualização para seus convidados, mas AFAIK só funciona se o convidado também usar o Hyper-V. Eu queria saber o motivo desse limite, por que outro hipervisor (por exemplo, VirtualBox) não pode usar as extensões de virtualização expostas?
Esta pergunta é muito parecida com a minha, mas não tem uma resposta satisfatória.
EDIT: As razões pelas quais acredito que não pode ser feito (e, portanto, estou perguntando por quê) são:
- Está escrito na página oficial da Microsoft:
Aplicativos de virtualização diferentes do Hyper-V não são suportados em máquinas virtuais Hyper-V e provavelmente falharão. Isso inclui qualquer software que exija extensões de virtualização de hardware.
O comando para expor as extensões de virtualização requer explicitamente que você o aponte para uma VM Hyper-V:Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
EDIT2: Desculpe, devido à minha falta de compreensão, não consegui expressar esta pergunta com clareza suficiente. Vou tentar ser mais claro. Isto é o que eu gostaria de fazer:
Citando a página da Microsoft:
O Hyper-V expõe as extensões de virtualização de hardware para suas máquinas virtuais. Com o aninhamento ativado, uma máquina virtual convidada pode instalar seu próprio hipervisor e executar suas próprias VMs convidadas.
Isso, mais o fato de que o sistema operacional raiz do Windows é em si uma VM especial, me levou a acreditar que eu deveria ser capaz de expor extensões de virtualização ao sistema operacional raiz principal do Windows e usá-las para executar outro hipervisor dentro dele.
Ao pesquisar como fazer isso, encontrei este comando:
Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
Requer o VMName .
- O que eu entendo agora é que o Hyper-V permite que você exponha extensões de virtualização a uma de suas VMs de sua escolha, mas você não pode escolher o sistema operacional raiz do Windows (por quê?). Dentro da VM escolhida você pode usar oficialmente o Virt. Ext. com outra instância do Hyper-V, mas também pode funcionar com outros hipervisores.
- Quando fiz essa pergunta pela primeira vez, não percebi que as ferramentas de gerenciamento do Hyper-V que você pode abrir no sistema operacional Windows Root operam no mesmo nível zero do Hyper-V que executa o próprio sistema operacional Windows Root . Achei que operava em outra instância do Hyper-V e isso, mais o comando que exige um nome de VM do Hyper-V, me levou a acreditar que só poderia ser feito com dois hipervisores do Hyper-V.
Para resumir, minha pergunta era realmente uma pergunta de duas partes:
- Você pode aninhar um hipervisor não Hyper-V dentro de uma VM com tecnologia Hyper-V? E a resposta é: não é explicitamente suportado, mas deve / pode funcionar (consulte a resposta aceita).
Por que você não pode expor a extensão de virtualização ao sistema operacional raiz do Windows ? E a resposta é:
[@harrymc] As extensões de virtualização estão sempre visíveis para o sistema operacional raiz, pois fazem parte da CPU e todo o hardware é sempre pass-through para esse sistema operacional, nada é virtualizado. O Set-VMProcessor não se aplica, pois não é realmente uma VM, ou você pode dizer que é um tipo especial e trivial de semi-VM.
[eu] Portanto, o sistema operacional root já pode ver o virt.ext. "diretamente" (pois pode ver todo o resto do hardware), mas não pode usá-los para (digamos) o VirtualBox porque já estão em uso pelo Hyper-V. Se eu criar uma VM Hyper-V "normal" com virt.ext. ativado, então dentro dele eu deveria ser capaz de executar outro hipervisor, estou certo?
[@harrymc] Certo, é assim que funciona.
A virtualização aninhada não exige que você execute o mesmo hipervisor, pois significa apenas passar pelas extensões de CPU Intel VT-x ou AMD-V. Embora possível, isso não significa que o aninhamento de hipervisores diferentes seja fácil, pois isso não é oficialmente suportado pelas empresas envolvidas.
Com hipervisores diferentes, você enfrentará o problema de suporte de hardware, pois cada hipervisor criará diferentes dispositivos virtuais que podem não ser suportados ou ter drivers no outro hipervisor ou na VM de destino.
Por exemplo, o Hyper-V expõe o adaptador de rede às máquinas virtuais como um adaptador de rede virtual vinculado a um comutador de rede virtual Hyper-V. Isso significa que, independentemente do tipo de adaptador de rede instalado fisicamente no servidor, o hipervisor aninhado precisará de um driver para o adaptador de rede Microsoft Hyper-V ou para o adaptador de rede legado da Microsoft, que pode não ser compatível com o VMware. Mesmo quando o(s) driver(s) correto(s) existe(m), passar a emulação de dispositivo por várias camadas de emulação como vários dispositivos mascarados entre si certamente não ajudará no desempenho.
Uma solução para esses problemas de emulação e desempenho é usar atribuições de dispositivos discretas, o que significa passagem de hardware. As atribuições de dispositivos discretos foram introduzidas no Windows Server 2016, portanto, para virtualização aninhada, por exemplo, um adaptador de rede baseado em PCIe pode ser mapeado diretamente para a VM que está executando o hipervisor virtualizado. Isso pode eliminar a necessidade de um driver de dispositivo virtual e permitir que o driver de dispositivo do fabricante do dispositivo seja instalado normalmente dentro da máquina virtual convidada.
Embora as atribuições discretas de dispositivos resolvam alguns problemas, elas também criam novos problemas e limitações. Por exemplo, no Hyper-V, a máquina virtual à qual tal dispositivo é atribuído pode não suportar salvar/restaurar, migração ao vivo ou o uso de memória dinâmica e também não pode ser adicionada a um cluster de failover. (Essas limitações podem desaparecer no futuro, pois esse campo ainda está evoluindo.)
Também houve relatos de que alguns ambientes de hipervisor aninhado de vários fornecedores exigem que o aninhamento seja ativado para qualquer máquina virtual em execução no hipervisor aninhado. O que significa que o hipervisor aninhado é executado sem problemas, mas as máquinas virtuais falharão ao iniciar até que um hipervisor seja instalado no nível da VM.
Devido às considerações acima e outras que não listei, fazer hipervisores concorrentes trabalharem juntos não é um processo trivial. Mesmo após a instalação do hipervisor aninhado, você provavelmente precisará de muitas tentativas e erros para fazer com que as máquinas virtuais sejam executadas de maneira confiável e eficiente.
Finalmente, para apoiar minha afirmação de que diferentes hipervisores podem ser aninhados, aqui estão alguns artigos com instruções sobre como fazer exatamente isso (embora eu não tenha testado nenhum deles):