virtualização x86 - x86 virtualization

A virtualização x86 é o uso de recursos de virtualização assistida por hardware em uma CPU x86 / x86-64.

No final da década de 1990, a virtualização do x86 foi obtida por meio de técnicas de software complexas, necessárias para compensar a falta de recursos de virtualização assistida por hardware do processador e, ao mesmo tempo, atingir um desempenho razoável. Em 2005 e 2006, a Intel ( VT-x ) e a AMD ( AMD-V ) introduziram suporte de virtualização de hardware limitado que permitiu software de virtualização mais simples, mas ofereceu poucos benefícios de velocidade. Maior suporte de hardware, que permitiu melhorias substanciais de velocidade, veio com modelos de processador posteriores.

Virtualização baseada em software

A discussão a seguir se concentra apenas na virtualização do modo protegido da arquitetura x86 .

No modo protegido, o kernel do sistema operacional é executado com um privilégio mais alto, como o anel 0, e aplicativos com um privilégio mais baixo, como o anel 3. Na virtualização baseada em software, um sistema operacional host tem acesso direto ao hardware, enquanto os sistemas operacionais convidados têm acesso limitado a hardware, assim como qualquer outro aplicativo do sistema operacional host. Uma abordagem usada na virtualização baseada em software x86 para superar essa limitação é chamada de privação de privilégios de anel , que envolve a execução do sistema operacional convidado em um anel superior (menos privilegiado) que 0.

Três técnicas possibilitaram a virtualização do modo protegido:

  • A tradução binária é usada para reescrever em termos de instruções do anel 3 certas instruções do anel 0, como POPF , que de outra forma falhariam silenciosamente ou se comportariam de maneira diferente quando executadas acima do anel 0, tornando a clássica virtualização trap-and-emular impossível. Para melhorar o desempenho, os blocos básicos traduzidos precisam ser armazenados em cache de uma maneira coerente que detecte patching de código (usado em VxDs, por exemplo), a reutilização de páginas pelo sistema operacional convidado ou mesmo código de auto-modificação .
  • Uma série de estruturas de dados importantes usadas por um processador precisam ser ocultadas . Como a maioria dos sistemas operacionais usa memória virtual paginada , e conceder ao SO convidado acesso direto ao MMU significaria perda de controle do gerenciador de virtualização , parte do trabalho do MMU x86 precisa ser duplicado em software para o SO convidado usando uma técnica conhecidas como tabelas de páginas de sombra . Isso envolve negar ao sistema operacional convidado qualquer acesso às entradas reais da tabela de páginas, interceptando as tentativas de acesso e emulando-as no software. A arquitetura x86 usa o estado oculto para armazenar descritores de segmento no processador, portanto, uma vez que os descritores de segmento tenham sido carregados no processador, a memória da qual foram carregados pode ser substituída e não há como obter os descritores de volta do processador . Portanto, as tabelas de descritores de sombra devem ser usadas para rastrear as alterações feitas nas tabelas de descritores pelo sistema operacional convidado.
  • Emulação de dispositivo de E / S: os dispositivos não suportados no sistema operacional convidado devem ser emulados por um emulador de dispositivo executado no sistema operacional host.

Essas técnicas incorrem em alguma sobrecarga de desempenho devido à falta de suporte de virtualização MMU, em comparação com uma VM em execução em uma arquitetura nativamente virtualizável, como o IBM System / 370 .

Em mainframes tradicionais, o hipervisor clássico tipo 1 era autônomo e não dependia de nenhum sistema operacional nem executava aplicativos de usuário. Em contraste, os primeiros produtos de virtualização x86 eram voltados para estações de trabalho e executavam um sistema operacional convidado dentro de um sistema operacional host, incorporando o hipervisor em um módulo de kernel executado sob o sistema operacional host (hipervisor tipo 2).

Tem havido alguma controvérsia se a arquitetura x86 sem assistência de hardware é virtualizável conforme descrito por Popek e Goldberg . Os pesquisadores da VMware apontaram em um artigo da ASPLOS de 2006 que as técnicas acima tornaram a plataforma x86 virtualizável no sentido de atender aos três critérios de Popek e Goldberg, embora não pela técnica clássica de trap-and-emulate.

Um caminho diferente foi seguido por outros sistemas como Denali , L4 e Xen , conhecido como paravirtualização , que envolve a portabilidade de sistemas operacionais para rodar na máquina virtual resultante, que não implementa as partes do conjunto real de instruções x86 que são difíceis de virtualizar . A E / S paravirtualizada tem benefícios de desempenho significativos, conforme demonstrado no artigo original do SOSP '03 Xen.

A versão inicial do x86-64 ( AMD64 ) não permitia uma virtualização completa apenas por software devido à falta de suporte à segmentação em modo longo , o que impossibilitava a proteção da memória do hipervisor, em particular a proteção do manipulador de armadilhas que é executado no espaço de endereço do kernel do convidado. Revisão D e processadores AMD de 64 bits posteriores (como regra geral, aqueles fabricados em 90 nm ou menos) adicionaram suporte básico para segmentação em modo longo, tornando possível executar convidados de 64 bits em hosts de 64 bits por meio de tradução binária . A Intel não adicionou suporte de segmentação à sua implementação x86-64 ( Intel 64 ), tornando impossível a virtualização somente de software de 64 bits em CPUs Intel, mas o suporte Intel VT-x torna possível a virtualização assistida por hardware de 64 bits na plataforma Intel.

Em algumas plataformas, é possível executar um convidado de 64 bits em um sistema operacional host de 32 bits se o processador subjacente for de 64 bits e oferecer suporte às extensões de virtualização necessárias.

Virtualização assistida por hardware

Em 2005 e 2006, a Intel e a AMD (trabalhando independentemente) criaram novas extensões de processador para a arquitetura x86. A primeira geração de virtualização de hardware x86 abordou a questão das instruções privilegiadas. O problema de baixo desempenho da memória do sistema virtualizado foi abordado com a virtualização MMU que foi adicionada ao chipset posteriormente.

Unidade central de processamento

Modo 8086 virtual

Com base em experiências dolorosas com o modo protegido 80286 , que por si só não era adequado o suficiente para executar aplicativos DOS simultâneos , a Intel introduziu o modo 8086 virtual em seu chip 80386 , que oferecia processadores 8086 virtualizados nos chips 386 e posteriores. O suporte de hardware para virtualizar o próprio modo protegido, no entanto, tornou-se disponível 20 anos depois.

Virtualização AMD (AMD-V)

A AMD desenvolveu suas extensões de virtualização de primeira geração sob o codinome "Pacifica" e inicialmente as publicou como AMD Secure Virtual Machine (SVM), mas posteriormente as comercializou sob a marca comercial AMD Virtualization , abreviado AMD-V .

Em 23 de maio de 2006, a AMD lançou o Athlon 64 ( "Orleans" ), o Athlon 64 X2 ( "Windsor" ) e o Athlon 64 FX ( "Windsor" ) como os primeiros processadores AMD a oferecer suporte a essa tecnologia.

A capacidade do AMD-V também está presente na família de processadores Athlon 64 e Athlon 64 X2 com revisões "F" ou "G" no soquete AM2 , Turion 64 X2 e processadores Opteron de 2ª e terceira geração, Phenom e Phenom II . Os processadores APU Fusion suportam AMD-V. AMD-V não é compatível com nenhum processador Socket 939. Os únicos processadores Sempron que o suportam são APUs e CPUs de desktop Huron , Regor e Sargas .

As CPUs AMD Opteron começando com a linha Family 0x10 Barcelona e as CPUs Phenom II suportam uma tecnologia de virtualização de hardware de segunda geração chamada Rapid Virtualization Indexing (anteriormente conhecida como Nested Page Tables durante seu desenvolvimento), posteriormente adotada pela Intel como Extended Page Tables (EPT) .

A partir de 2019, todos os processadores AMD baseados em Zen suportam AMD-V.

A bandeira da CPU para AMD-V é "svm". Isso pode ser verificado nos derivados do BSD via dmesg ou sysctl e no Linux via . As instruções em AMD-V incluem VMRUN, VMLOAD, VMSAVE, CLGI, VMMCALL, INVLPGA, SKINIT e STGI. /proc/cpuinfo

Com algumas placas-mãe , os usuários devem habilitar o recurso AMD SVM na configuração do BIOS antes que os aplicativos possam usá-lo.

Virtualização Intel (VT-x)

Image
CPU Intel Core i7 (Bloomfield)

Com o codinome anterior de "Vanderpool", VT-x representa a tecnologia da Intel para virtualização na plataforma x86. Em 13 de novembro de 2005, a Intel lançou dois modelos de Pentium 4 (Modelo 662 e 672) como os primeiros processadores Intel a oferecer suporte a VT-x. O sinalizador da CPU para capacidade VT-x é "vmx"; no Linux, isso pode ser verificado via /proc/cpuinfo, ou no macOS via sysctl machdep.cpu.features.

"VMX" significa Virtual Machine Extensions, que adiciona 13 novas instruções: VMPTRLD, VMPTRST, VMCLEAR, VMREAD, VMWRITE, VMCALL, VMLAUNCH, VMRESUME, VMXOFF, VMXON, INVEPT, INVVPID e VMFUNC. Essas instruções permitem entrar e sair de um modo de execução virtual em que o sistema operacional convidado se percebe executando com privilégios totais (anel 0), mas o sistema operacional host permanece protegido.

A partir de 2015, quase todos os novos servidores, desktops e processadores Intel móveis suportam VT-x, com alguns dos processadores Intel Atom como a principal exceção. Com algumas placas-mãe , os usuários devem habilitar o recurso VT-x da Intel na configuração do BIOS antes que os aplicativos possam usá-lo.

A Intel passou a incluir Extended Page Tables (EPT), uma tecnologia para virtualização de tabelas de páginas, desde a arquitetura Nehalem , lançada em 2008. Em 2010, Westmere adicionou suporte para lançar o processador lógico diretamente em modo real  - um recurso chamado "convidado irrestrito ", que exige que o EPT funcione.

Desde a microarquitetura Haswell (anunciada em 2013), a Intel começou a incluir o sombreamento VMCS como uma tecnologia que acelera a virtualização aninhada de VMMs. A estrutura de controle da máquina virtual (VMCS) é uma estrutura de dados na memória que existe exatamente uma vez por VM, enquanto é gerenciada pelo VMM. A cada mudança do contexto de execução entre diferentes VMs, o VMCS é restaurado para a VM atual, definindo o estado do processador virtual da VM. Assim que mais de um VMM ou VMMs aninhados são usados, um problema aparece de forma semelhante ao que o gerenciamento de tabela de página sombra exigiu ser inventado, conforme descrito acima . Nesses casos, o VMCS precisa ser protegido várias vezes (no caso de aninhamento) e parcialmente implementado no software, caso não haja suporte de hardware pelo processador. Para tornar o manuseio de sombra VMCS mais eficiente, a Intel implementou suporte de hardware para sombra VMCS.

Virtualização VIA (VIA VT)

Os processadores VIA Nano 3000 Series e superiores suportam a tecnologia de virtualização VIA VT compatível com Intel VT-x. A EPT está presente no Zhaoxin ZX-C, um descendente de VIA QuadCore-E & Eden X4 semelhante ao Nano C4350AL .

Interromper virtualização (AMD AVIC e Intel APICv)

Em 2012, a AMD anunciou seu Advanced Virtual Interrupt Controller ( AVIC ) visando a redução da sobrecarga de interrupção em ambientes de virtualização. Essa tecnologia, conforme anunciado, não oferece suporte a x2APIC . Em 2016, o AVIC está disponível nos processadores da família AMD 15h modelos 6Xh (Carrizo) e mais recentes.

Também em 2012, a Intel anunciou uma tecnologia semelhante para interrupção e virtualização APIC , que não tinha uma marca na época do anúncio. Mais tarde, foi denominado APIC virtualization ( APICv ) e tornou-se comercialmente disponível na série Ivy Bridge EP de CPUs Intel, que é vendido como Xeon E5-26xx v2 (lançado no final de 2013) e como Xeon E5-46xx v2 (lançado no início de 2014).

Unidade de processamento gráfico

A virtualização de gráficos não faz parte da arquitetura x86. A Intel Graphics Virtualization Technology (GVT) fornece virtualização gráfica como parte das arquiteturas gráficas de geração mais recentes. Embora as APUs da AMD implementem o conjunto de instruções x86-64 , elas implementam as próprias arquiteturas gráficas da AMD ( TeraScale , GCN e RDNA ) que não oferecem suporte à virtualização gráfica. Larrabee era a única microarquitetura gráfica baseada em x86, mas provavelmente não incluía suporte para virtualização gráfica.

Chipset

A virtualização de memória e E / S é realizada pelo chipset . Normalmente, esses recursos devem ser ativados pelo BIOS, que deve ser capaz de suportá-los e também estar configurada para usá-los.

Virtualização I / O MMU (AMD-Vi e Intel VT-d)

Image
Um log do kernel Linux mostrando informações de AMD-Vi

Uma unidade de gerenciamento de memória de entrada / saída (IOMMU) permite que máquinas virtuais convidadas usem diretamente dispositivos periféricos , como Ethernet, placas de vídeo aceleradas e controladores de disco rígido, por meio de DMA e remapeamento de interrupção . Isso às vezes é chamado de passagem de PCI .

Um IOMMU também permite que os sistemas operacionais eliminem os buffers de rejeição necessários para se permitirem se comunicar com dispositivos periféricos cujos espaços de endereço de memória são menores do que o espaço de endereço de memória do sistema operacional, usando tradução de endereço de memória. Ao mesmo tempo, um IOMMU também permite que os sistemas operacionais e hipervisores evitem que hardware malicioso ou com erros comprometa a segurança da memória .

Tanto a AMD quanto a Intel lançaram suas especificações IOMMU:

  • Tecnologia de virtualização de E / S da AMD, "AMD-Vi", originalmente chamada de "IOMMU"
  • A "Tecnologia de virtualização para E / S direcionada" (VT-d) da Intel, incluída na maioria dos processadores Intel mais recentes (mas não em todos) desde a arquitetura Core 2.

Além do suporte de CPU, o chipset da placa - mãe e o firmware do sistema ( BIOS ou UEFI ) precisam suportar totalmente a funcionalidade de virtualização de E / S IOMMU para que seja utilizável. Apenas os dispositivos PCI ou PCI Express que suportam redefinição de nível de função (FLR) podem ser virtualizados dessa maneira, pois é necessário para reatribuir várias funções de dispositivo entre máquinas virtuais. Se um dispositivo a ser atribuído não suporta Message Signaled Interrupts (MSI), ele não deve compartilhar linhas de interrupção com outros dispositivos para que a atribuição seja possível. Todos os dispositivos PCI convencionais roteados por trás de uma ponte PCI / PCI-X- para-PCI Express podem ser atribuídos a uma máquina virtual convidada apenas de uma vez; Os dispositivos PCI Express não têm essa restrição.

Virtualização de rede (VT-c)

  • "Tecnologia de virtualização para conectividade" da Intel (VT-c).
Virtualização de E / S de raiz única PCI-SIG (SR-IOV)

A virtualização de E / S de raiz única PCI-SIG (SR-IOV) fornece um conjunto de métodos de virtualização de E / S gerais (não específicos para x86) com base em hardware nativo PCI Express (PCIe), conforme padronizado pelo PCI-SIG:

  • Os serviços de tradução de endereços (ATS) suportam IOV nativo em PCI Express por meio de tradução de endereços. Requer suporte para novas transações para configurar tais traduções.
  • IOV de raiz única (SR-IOV ou SRIOV) suporta IOV nativo em topologias PCI Express complexas de raiz única existentes. Requer suporte para novos recursos de dispositivo para configurar vários espaços de configuração virtualizados.
  • Multi-root IOV (MR-IOV) suporta IOV nativo em novas topologias (por exemplo, servidores blade) ao construir SR-IOV para fornecer múltiplos complexos de raiz que compartilham uma hierarquia PCI Express comum.

No SR-IOV, o mais comum deles, um host VMM configura dispositivos suportados para criar e alocar "sombras" virtuais de seus espaços de configuração para que os convidados da máquina virtual possam configurar e acessar diretamente esses recursos de dispositivo "sombra". Com SR-IOV habilitado, as interfaces de rede virtualizadas são diretamente acessíveis aos convidados, evitando o envolvimento do VMM e resultando em alto desempenho geral; por exemplo, SR-IOV atinge mais de 95% da largura de banda da rede bare metal no datacenter virtualizado da NASA e na nuvem pública da Amazon .

Veja também

Referências

links externos