Este artigo deve fornecer muita informação ao longo das linhas que você está procurando. No entanto, é específico para o VMware.
O caso geral é que isso realmente depende de várias coisas:
- O VT-x / AMD-V está em uso?
- O EPT está em uso?
- O VT-d ou algum tipo de IOV em uso?
As perguntas acima são perguntas de uso de instrução de hardware . Dependendo de quais instruções de hardware da CPU AMD / Intel são usadas para auxiliar na virtualização, a estrutura do hipervisor geralmente é um pouco diferente. Se as instruções de hardware no estiverem em uso, a máquina virtual será "totalmente emulada" ou "em execução no software", que geralmente é o modo mais lento. No entanto, mesmo sem suporte de hardware, paravirtualização (onde o SO guest sabe que está sendo executado em uma VM) pode acelerar significativamente até mesmo uma camada de emulação de software, fornecendo uma interface de programação clara entre o convidado e o host.
Algumas máquinas virtuais, como o qemu sem o kqemu ou kvm, podem executar inteiramente no anel 3 , mas isso tem várias limitações, como desempenho, e a falta de acesso de hardware de baixo nível. Em geral, mesmo aqueles hipervisores sem qualquer aceleração de hardware são tradicionalmente executados no anel 0, ou seja, dentro do kernel do host como um driver.
O uso dos anéis 1 e 2 é bastante raro, mas acontece, como observado no artigo da Anandtech. Além disso, os anéis 1 e 2 são comumente usados para hipervisores de metal descoberto, como o Xen. Tanto quanto sei, o kernel do sistema operacional host "dom0" no Xen roda inteiramente no anel 1, e somente o "microkernel" Xen é executado no anel 0. Portanto, se o Linux fosse o dom0, funcionaria no anel 1, e os núcleos guest (domU) seriam hipervisados por Xen no anel 0 e executados no anel 2.
É claro que os "toques" do processador não são o único mecanismo de segurança ou isolamento, e as instruções de hardware fornecem muito suporte para segurança separar as VMs sem ter que fazer tudo no software . Os detalhes, se você quiser, são melhor obtidos lendo o manual de programação de um processador Intel, especificamente sobre o tópico do VT-x.
A virtualizaçãoAninhada geralmente não é possível, exceto no caso do VMware (é o único hipervisor que eu sei que pode fazer isso). Ele faz isso emulando as instruções do VT-x (e possivelmente o EPT) dentro do convidado, fazendo com que o cliente pense que tem suporte real ao VT-x / EPT. Esse é provavelmente um truque de hipervisor, embora eu não saiba os detalhes da implementação. EPT, no entanto, é muitas vezes chamado de "Nested Page Tables", então eu me pergunto se o aspecto "aninhado" implica que você pode criar mais níveis de aninhamento do que o nível mais profundo que é necessário para separar as tabelas da página do host do convidado (s).
Muito mais comum para a virtualização aninhada é que você está preso executando "totalmente emulado" ou, na melhor das hipóteses, paravirtualizado - o que gera um grande impacto no desempenho.
E falando em performance, eu não acho que muitas pessoas usem virtualização aninhada se puderem evitá-la, exceto talvez a virtualização container aninhada (que carrega zero sobrecarga de CPU / memória / hardware) . O impacto no desempenho, mesmo com o VT-x virtualizado da VMware, é tão grande que quaisquer possíveis benefícios de isolamento são eliminados. Confie em mim, um nível de virtualização é suficiente, até que / a menos que cheguemos a um nó de hardware onde seja realmente prático aninhar-se mais profundamente e ser capaz de comer o impacto no desempenho dos níveis de indireção.