AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1154112
Accepted
panxl
panxl
Asked: 2024-02-23 02:23:35 +0800 CST2024-02-23 02:23:35 +0800 CST 2024-02-23 02:23:35 +0800 CST

Qual é o propósito de usar a paravirtualização se existe uma virtualização assistida por hardware?

  • 772

Estou fazendo uma pesquisa sobre QEMU/KVM e Firecracker/KVM. Pelo que entendi, tanto o Firecracker quanto o QEMU se comunicam com o KVM para eventualmente beneficiar a virtualização assistida por hardware, alterando o modo da CPU para convidado para host e vice-versa.

  1. No modo convidado da CPU, o convidado pode executar diretamente até mesmo suas instruções privilegiadas, então por que também precisamos de paravirtualização?

  2. No Firecracker, apenas 5 dispositivos emulados, como

  • virtio-net,
  • bloco virtio,
  • virtio-vsock e assim por diante.

Mesmo neste design minimalista, temos que colocar drivers de paravirtualização. Não podemos depender apenas da virtualização assistida por hardware?

virtualization
  • 4 4 respostas
  • 870 Views

4 respostas

  • Voted
  1. Best Answer
    Austin Hemmelgarn
    2024-02-23T22:36:38+08:002024-02-23T22:36:38+08:00

    Considere apenas o caso da rede.

    Para ser realmente útil na maioria dos casos, uma VM precisa ser capaz de se comunicar pela rede. Para isso, o convidado obviamente precisa ver algum tipo de interface de rede. Mas VT-x, AMD-V e ARM VHE e praticamente todas as outras implementações de virtualização de hardware não fornecem NICs, apenas fornecem uma maneira de segregar e particionar com segurança os recursos da CPU. Portanto, a virtualização de hardware não faz nada para fornecer uma interface de rede.

    Agora, você poderia passar por uma interface de rede física do sistema host, mas isso apresenta vários problemas:

    • Requer tratamento especial no momento da inicialização do sistema operacional host para garantir que ele não vincule realmente um driver a essa interface.
    • Requer suporte especial no hardware para ser seguro (você precisa de um IOMMU, e a NIC pela qual deseja passar deve suportar a execução por trás de um IOMMU).
    • Requer realmente ter uma interface de rede utilizável para cada VM. Obviamente, isso significa que qualquer pessoa em um laptop estaria sem sorte, mas também significa que a maioria dos provedores de hospedagem de VMs de grande escala também estaria sem sorte (eles podem estar executando muitas dezenas de VMs no mesmo host).
    • Isso torna a migração ao vivo funcionalmente impossível sem hardware RDMA e muita complexidade adicional (assim como qualquer outra passagem direta de dispositivo).
    • No caso de VMs que precisam se comunicar, isso introduz inerentemente um ponto externo de falha (porque elas precisam enviar tráfego através de um switch de rede fora do sistema).

    Obviamente, você precisa emular uma interface de rede de alguma forma. A escolha óbvia seria apenas escolher uma NIC física comumente usada e emular isso. Mas isso tem seu próprio conjunto de problemas:

    • Muito do que uma NIC física faz é computacionalmente caro para emular. Só é eficiente em uma implementação física porque usa lógica física e ASICs.
    • A maioria das mesmas coisas que são caras para emular nem são necessárias para uma VM, mas você não pode evitar emulá-las porque os drivers esperam que funcione.
    • É necessária muita complexidade adicional nos drivers convidados para suportar esse material que nem sequer oferece nenhum benefício real. Para fins de perspectiva, o driver Intel e1000 (uma placa de rede física comumente emulada) para Linux tem cerca de 17 mil linhas de código, enquanto o driver virtio-net tem apenas 4,8 k (7,3 k se você incluir os componentes virtio-pci que provavelmente está usando em sistemas x86).

    virtio-net resolve esses problemas, cobre apenas o que é realmente necessário para mover pacotes de rede entre o sistema operacional convidado e a camada de rede host, e nada mais. E resolver esses problemas proporciona uma enorme melhoria de desempenho. Não testei recentemente, mas da última vez que comparei usando QEMU, o virtio-net forneceu mais que o dobro da largura de banda efetiva de uma placa e1000 emulada e aproximadamente 1/10 da latência, tudo com menor uso de CPU no lado do host .

    A mesma lógica se aplica à maioria dos outros dispositivos. Algumas coisas podem ser emuladas de forma relativamente barata ou não são críticas para o desempenho e, portanto, não precisam ser eficientes (é por isso que não há temporizador de watchdog VirtIO, por exemplo, não é crítico para o desempenho e é trivial emular na maioria dos casos), mas para a maioria das coisas que não se enquadram nesses critérios, existe uma opção paravirt porque a diferença de desempenho é enorme e a complexidade reduzida tende a tornar as coisas mais confiáveis.

    E às vezes a paravirtualização permite fazer coisas que você realmente não poderia fazer com hardware “normal”. VirtIOFS e o transporte VirtIO para 9P2000 são excelentes exemplos disso, eles não possuem análogos de hardware, mas fornecem uma maneira razoavelmente eficiente de compartilhar arquivos entre o host e o convidado sem a necessidade de emular uma rede ou um dispositivo de bloco.

    • 10
  2. shodanshok
    2024-02-23T14:49:43+08:002024-02-23T14:49:43+08:00

    Resposta curta: quando aumentada com drivers do lado convidado, a virtualização de hardware moderna usa alguma forma de paravirtualização para as operações de maior desempenho. Conseqüentemente, os hipervisores modernos reúnem suporte de hardware dedicado e paravirtualização.

    Versão longa: o arco X86 original era bastante difícil de virtualizar e usar corretamente com sistema operacional não modificado. Uma solução foi traduzir dinamicamente os fragmentos de código problemáticos, recompilando-os rapidamente. Isso permitiu que o convidado não modificado fosse executado, mas as desvantagens eram a alta sobrecarga e a complexidade do próprio tradutor. Além disso, cada tipo de kernel convidado precisava de tratamento especial.

    Por esta razão, os projetos começaram a modificar o kernel do Linux para evitar os casos difíceis - ou seja: quando uma instrução/chamada não é facilmente virtualizada, vamos chamar uma hiperchamada do hipervisor subjacente. Uma hiperchamada é a base da paravirtualização e você pode considerá-la equivalente ao syscall do espaço do usuário. Em outras palavras, o kernel Linux subjacente era o sistema operacional host onde outro kernel Linux seria executado como um aplicativo "espaço de usuário" convidado.

    Essa abordagem minimiza a sobrecarga de virtualização, mas precisa de um kernel convidado modificado para funcionar. A instalação padrão do Windows não funcionará. Assim, foi introduzida a virtualização completa de hardware, onde anéis de privilégios adicionais foram adicionados ao microprocessador. Isso permitiu que o sistema operacional host fosse executado em um nível especificamente privilegiado (ou seja: -1, espaço do hipervisor), com o sistema operacional convidado executando inalterado no anel 0 (ou seja: 0, espaço do kernel). No entanto, a emulação de dispositivos virtuais permanece problemática e/ou com alta sobrecarga, portanto, foram criadas unidades convidadas personalizadas. Essas unidades reintroduziram a paravirtualização direcionada para os dispositivos mais sensíveis ao desempenho – disco e rede, especificamente. Isso nos leva à situação atual, onde os hipervisores assistidos por hardware são aumentados com unidades paravirtualizadas direcionadas.

    • 6
  3. djdomi
    2024-02-23T19:43:25+08:002024-02-23T19:43:25+08:00

    Também fiz algumas pesquisas e acho que isso pode ajudá-lo a entender o assunto, mas pode não abordar o assunto diretamente (talvez). Além da resposta do shodanshok, posso explodir sua resposta "estendida", talvez com uma pegada um pouco enorme

    A paravirtualização (pode) permanece relevante por vários motivos:

    1. Otimização de performance:

    Embora instruções privilegiadas possam ser executadas diretamente no modo convidado, a paravirtualização pode melhorar o desempenho otimizando a comunicação entre o sistema operacional convidado e o hipervisor. A paravirtualização permite o uso de interfaces e protocolos especializados projetados para colaboração eficiente entre o convidado e o hipervisor.

    1. Flexibilidade e Portabilidade:

    A paravirtualização permite a virtualização de sistemas operacionais convidados que podem não estar otimizados para execução direta em um ambiente virtualizado. Ao fornecer interfaces específicas, os sistemas convidados podem ser portados mais facilmente para diversas plataformas de virtualização.

    1. Segurança:

    A paravirtualização pode oferecer benefícios de segurança ao fornecer uma interface bem definida para comunicação entre o convidado e o hipervisor, reduzindo potencialmente os vetores de ataque.

    1. Em relação ao Firecracker e soluções de virtualização minimalistas semelhantes:

    Mesmo operando com um conjunto limitado de dispositivos emulados, o uso da paravirtualização permite uma comunicação mais eficiente e flexível entre o convidado e o hipervisor. Mesmo em designs minimalistas, os drivers de paravirtualização podem melhorar o desempenho geral e otimizar a interação entre o convidado e o hipervisor. Portanto, a paravirtualização permanece benéfica mesmo em tais ambientes

    Wikipedia diz sobre isso:

    Na computação, paravirtualização ou paravirtualização é uma técnica de virtualização que apresenta uma interface de software para as máquinas virtuais que é semelhante, mas não idêntica, à interface hardware-software subjacente.

    A intenção da interface modificada é reduzir a parte do tempo de execução do convidado gasto na execução de operações que são substancialmente mais difíceis de executar em um ambiente virtual em comparação com um ambiente não virtualizado. A paravirtualização fornece 'ganchos' especialmente definidos para permitir que o(s) convidado(s) e o host solicitem e reconheçam essas tarefas, que de outra forma seriam executadas no domínio virtual (onde o desempenho de execução é pior). Uma plataforma paravirtualizada bem-sucedida pode permitir que o monitor de máquina virtual (VMM) seja mais simples (relocando a execução de tarefas críticas do domínio virtual para o domínio host) e/ou reduza a degradação geral do desempenho da execução da máquina dentro do convidado virtual.

    A paravirtualização exige que o sistema operacional convidado seja explicitamente portado para a para-API – uma distribuição de sistema operacional convencional que não reconhece a paravirtualização não pode ser executada em cima de um VMM paravirtualizante. No entanto, mesmo nos casos em que o sistema operacional não pode ser modificado, podem estar disponíveis componentes que permitem muitas das vantagens significativas de desempenho da paravirtualização. Por exemplo, o projeto Xen Windows GPLPV fornece um kit de drivers de dispositivos com reconhecimento de paravirtualização, que devem ser instalados em um convidado virtual do Microsoft Windows em execução no hipervisor Xen.[1] Tais aplicações tendem a ser acessíveis através do ambiente de interface de máquina paravirtual. Isso garante a compatibilidade do modo de execução em vários modelos de algoritmos de criptografia, permitindo uma integração perfeita na estrutura paravirtual.

    Acho que, embora possamos consultar o artigo da Wikipedia, pode haver razões pelas quais você não gostaria de expor o hardware diretamente ao convidado, especialmente se estiver vendendo máquinas virtuais alugadas.

    Além disso e normalmente, precisamos de padrões e drivers padronizados, bem como interfaces.
    Normalmente não queremos lidar com drivers como fizemos ao tentar instalar o Windows 9x/nt/VIST/XP. Mas mais ou menos também 10/07/11 em hardware padrão (a maioria deles já possui, às vezes o suporte VirtIO já incluído). (Especialmente antes do período do Windows 7).

    É por isso que precisamos aprender mais sobre a história:

    A seção de história do artigo da Wikipedia diz:

    O sistema operacional Parallels Workstation chama seu equivalente de "hiperchamada". Todos são a mesma coisa: uma chamada de sistema para o hipervisor abaixo. Tais chamadas requerem suporte no sistema operacional “convidado”, que deve possuir código específico do hipervisor para fazer tais chamadas.

    O termo "paravirtualização" foi usado pela primeira vez na literatura de pesquisa em associação com o Denali Virtual Machine Manager.[4] O termo também é usado para descrever os hipervisores Xen, L4, TRANGO, VMware, Wind River e XtratuM. Todos esses projetos usam ou podem usar técnicas de paravirtualização para suportar máquinas virtuais de alto desempenho em hardware x86, implementando uma máquina virtual que não implementa as partes difíceis de virtualizar do conjunto de instruções x86 real.

    Um hipervisor fornece a virtualização do sistema de computador subjacente. Na virtualização completa, um sistema operacional convidado é executado sem modificações em um hipervisor. No entanto, o desempenho e a eficiência aprimorados são alcançados fazendo com que o sistema operacional convidado se comunique com o hipervisor. Ao permitir que o sistema operacional convidado indique sua intenção ao hipervisor, cada um pode cooperar para obter melhor desempenho ao executar em uma máquina virtual. Este tipo de comunicação é conhecido como paravirtualização.

    Em 2005, a VMware propôs uma interface de paravirtualização, a Virtual Machine Interface (VMI), como mecanismo de comunicação entre o sistema operacional convidado e o hipervisor. Essa interface possibilitou a paravirtualização transparente na qual uma única versão binária do sistema operacional pode ser executada em hardware nativo ou em um hipervisor em modo paravirtualizado.

    Isso me lembra que também o suporte no núcleo dele foi abandonado no passado, por volta de 2011, enquanto a partir de 2008 o VirtIO foi introduzido (talvez como um sucessor)

    E um IMHO:

    Semelhante à pilha TCP/IPv4, representa uma tecnologia legada implementada com a intenção de durar indefinidamente, mesmo que os desenvolvimentos futuros fossem imprevistos no momento da sua implantação. Espero não ter forçado muito seus olhos com esta resposta extensa. ;)

    Referências):

    • https://en.wikipedia.org/wiki/Paravirtualization
    • https://docs.kernel.org/driver-api/virtio/virtio.html#:~:text=Virtio%20is%20an%20open%20standard,spec%20(%5B1%5D) .
    • https://docs.oasis-open.org/virtio/virtio/v1.2/virtio-v1.2.html
    • https://www.redhat.com/en/blog/virtqueues-and-virtio-ring-how-data-travels
    • Muito da minha marca
    • e também heavy usou um mecanismo de busca bem conhecido;)
    • 1
  4. Chester Gillon
    2024-02-24T22:07:56+08:002024-02-24T22:07:56+08:00

    Outra resposta contém:

    Agora, você poderia passar por uma interface de rede física do sistema host, mas isso apresenta vários problemas:

    • Requer realmente ter uma interface de rede utilizável para cada VM. Obviamente, isso significa que qualquer pessoa em um laptop estaria sem sorte, mas também significa que a maioria dos provedores de hospedagem de VMs de grande escala também estaria sem sorte (eles podem estar executando muitas dezenas de VMs no mesmo host).

    Como contra-argumento, a Single Root IO Virtualization (SR-IOV) pode ser usada para permitir que um dispositivo PCIe físico se apresente várias vezes através do barramento PCIe. Na página NVIDIA (ex Mellanox) vinculada acima:

    Esta tecnologia permite múltiplas instâncias virtuais do dispositivo com recursos separados. Os adaptadores Mellanox são capazes de expor até 127 instâncias virtuais (Funções Virtuais (VFs) para cada porta nas placas da família Mellanox ConnectX®. Essas funções virtuais podem então ser provisionadas separadamente. Cada VF pode ser visto como um dispositivo adicional conectado ao físico Função. Ele compartilha os mesmos recursos com a Função Física e seu número de portas é igual ao da Função Física. O SR-IOV é comumente usado em conjunto com um hipervisor habilitado para SR-IOV para fornecer às máquinas virtuais acesso direto de hardware aos recursos da rede. aumentando seu desempenho .

    Como exemplo de provedor de hospedagem de VM, a página Rede aprimorada da Amazon Web Services no Linux contém:

    A rede aprimorada usa virtualização de E/S de raiz única (SR-IOV) para fornecer recursos de rede de alto desempenho em tipos de instância compatíveis . SR-IOV é um método de virtualização de dispositivos que oferece maior desempenho de E/S e menor utilização de CPU quando comparado às interfaces de rede virtualizadas tradicionais. A rede aprimorada fornece maior largura de banda, maior desempenho de pacotes por segundo (PPS) e latências entre instâncias consistentemente mais baixas. Não há cobrança adicional pelo uso de rede aprimorada.

    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve