Requisitos de virtualização Popek e Goldberg - Popek and Goldberg virtualization requirements

Os requisitos de virtualização Popek e Goldberg são um conjunto de condições suficientes para que uma arquitetura de computador suporte a virtualização de sistema de forma eficiente. Eles foram apresentados por Gerald J. Popek e Robert P. Goldberg em seu artigo de 1974 "Requisitos formais para arquiteturas virtualizáveis ​​de terceira geração". Mesmo que os requisitos sejam derivados de suposições simplificadas, eles ainda representam uma maneira conveniente de determinar se uma arquitetura de computador oferece suporte à virtualização eficiente e fornecem diretrizes para o projeto de arquiteturas de computador virtualizadas.

Definição VMM

As máquinas virtuais do sistema são capazes de virtualizar um conjunto completo de recursos de hardware, incluindo um processador (ou processadores), recursos de memória e armazenamento e dispositivos periféricos. Um monitor de máquina virtual (VMM, também chamado de hipervisor ) é o software que fornece a abstração de uma máquina virtual. Existem três propriedades de interesse ao analisar o ambiente criado por um VMM:

Equivalência / Fidelidade
Um programa em execução no VMM deve exibir um comportamento essencialmente idêntico ao demonstrado ao ser executado em uma máquina equivalente diretamente.
Controle de recursos / segurança
O VMM deve ter controle total dos recursos virtualizados.
Eficiência / Desempenho
Uma fração estatisticamente dominante de instruções de máquina deve ser executada sem intervenção do VMM.

Na terminologia de Popek e Goldberg, um VMM deve apresentar todas as três propriedades. Na terminologia usada no livro de referência de Smith e Nair (2005), VMMs são normalmente assumidos para satisfazer as propriedades de equivalência e controle de recursos, e aqueles que atendem adicionalmente à propriedade de desempenho são chamados de VMMs eficientes .

Popek e Goldberg descrevem as características que a arquitetura do conjunto de instruções (ISA) da máquina física deve possuir para executar VMMs que possuem as propriedades acima. Sua análise deriva tais características usando um modelo de "arquiteturas de terceira geração" (por exemplo, IBM 360, Honeywell 6000, DEC PDP-10) que, no entanto, é geral o suficiente para ser estendido a máquinas modernas. Este modelo inclui um processador que opera no modo de sistema ou de usuário e tem acesso à memória linear endereçável de maneira uniforme. Assume-se que um subconjunto do conjunto de instruções está disponível apenas quando no modo de sistema e que a memória é endereçada em relação a um registrador de relocação. E / S e interrupções não são modeladas.

Teoremas de virtualização

Para derivar seus teoremas de virtualização, que fornecem condições suficientes (mas não necessárias) para a virtualização, Popek e Goldberg apresentam uma classificação de algumas instruções de um ISA em 3 grupos diferentes:

Instruções privilegiadas
Aqueles que fazem o trap se o processador estiver no modo de usuário e não se ele estiver no modo de sistema ( modo de supervisor ).
Instruções confidenciais de controle
Aqueles que tentam alterar a configuração de recursos do sistema.
Instruções sensíveis ao comportamento
Aqueles cujo comportamento ou resultado depende da configuração dos recursos (o conteúdo do registrador de relocação ou o modo do processador).

O principal resultado da análise de Popek e Goldberg pode então ser expresso da seguinte forma.

Teorema 1 . Para qualquer computador convencional de terceira geração , um VMM eficaz pode ser construído se o conjunto de instruções confidenciais para esse computador for um subconjunto do conjunto de instruções privilegiadas.

Intuitivamente, o teorema afirma que para construir um VMM é suficiente que todas as instruções que possam afetar o funcionamento correto do VMM (instruções sensíveis) sempre capturem e passem o controle para o VMM. Isso garante a propriedade de controle de recursos. Em vez disso, as instruções não privilegiadas devem ser executadas nativamente (ou seja, com eficiência). A posse da propriedade de equivalência também segue.

Este teorema também fornece uma técnica simples para implementar um VMM, chamada de virtualização trap-and-emulate , mais recentemente chamada de virtualização clássica : como todas as instruções confidenciais se comportam bem, tudo que o VMM precisa fazer é interceptar e emular cada uma delas.

Um problema relacionado é derivar condições suficientes para virtualização recursiva, ou seja, as condições sob as quais um VMM que pode ser executado em uma cópia de si mesmo pode ser construído. Popek e Goldberg apresentam as seguintes condições (suficientes).

Teorema 2 . Um computador convencional de terceira geração é recursivamente virtualizável se:

  1. é virtualizável e
  2. um VMM sem nenhuma dependência de tempo pode ser construído para ele.

Algumas arquiteturas, como o x86 não assistido por hardware , não atendem a essas condições, portanto, não podem ser virtualizadas da maneira clássica. Mas as arquiteturas ainda podem ser totalmente virtualizadas (no caso x86, significando no nível da CPU e MMU) usando diferentes técnicas como tradução binária, que substitui as instruções confidenciais que não geram armadilhas, que às vezes são chamadas de instruções críticas. Esse processamento adicional, no entanto, torna o VMM menos eficiente em teoria, mas as armadilhas de hardware também têm um custo de desempenho não desprezível. Um sistema de tradução binária de armazenamento em cache bem ajustado pode atingir um desempenho comparável, e ele consegue no caso de tradução binária x86 em relação ao assistente de hardware x86 de primeira geração, que apenas tornou as instruções sensíveis interceptáveis. Efetivamente, isso dá um teorema com diferentes condições de suficiência.

Teorema 3 . Um VMM híbrido pode ser construído para qualquer máquina de terceira geração em que o conjunto de instruções sensíveis ao usuário é um subconjunto do conjunto de instruções privilegiadas:

Manipulação de instruções críticas

As condições para virtualização ISA expressas no Teorema 1 podem ser relaxadas em detrimento da propriedade de eficiência. VMMs para ISAs não virtualizáveis ​​(no sentido de Popek e Goldberg) têm sido construídos rotineiramente.

A virtualização de tais arquiteturas requer o manuseio correto de instruções críticas , ou seja, instruções confidenciais, mas sem privilégios. Uma abordagem, conhecida como patching , adota técnicas comumente usadas na recompilação dinâmica : instruções críticas são descobertas em tempo de execução e substituídas por uma armadilha no VMM. Vários mecanismos, como cache de código de emulação ou assistências de hardware , foram propostos para tornar o processo de patching mais eficiente. Uma abordagem diferente é a da paravirtualização , que requer que os sistemas operacionais convidados sejam modificados ( portados ) antes de serem executados no ambiente virtual.

Conjuntos de instruções de arquiteturas comuns

Esta seção apresenta algumas arquiteturas relevantes e como elas se relacionam com os requisitos de virtualização.

PDP-10

A arquitetura PDP-10 possui algumas instruções que são sensíveis (alteram ou questionam o modo do processador), mas não são privilegiadas. Estas instruções salvam ou restauram os códigos de condição contendo bits de USUÁRIO ou IOT:

  • JSR: pular para a sub-rotina
  • JSP: pula e salva o contador do programa
  • PUSHJ: empurre para baixo e pule
  • JRST: pular e restaurar

Sistema / 370

Todas as instruções sensíveis no System / 370 são privilegiadas: satisfaz os requisitos de virtualização.

Motorola MC68000

O Motorola MC68000 tem uma única instrução confidencial sem privilégios:

  • MOVE from SR

Esta instrução é sensível porque permite acesso a todo o registrador de status, que inclui não apenas os códigos de condição, mas também o bit de usuário / supervisor, nível de interrupção e controle de rastreamento. Na maioria dos membros da família posteriores, começando com o MC68010 , a instrução MOVE da SR foi privilegiada e uma nova instrução MOVE da CCR foi fornecida para permitir o acesso apenas ao registro do código de condição.

IA-32 (x86)

O conjunto de instruções IA-32 do processador Pentium contém 18 instruções confidenciais e sem privilégios. Eles podem ser categorizados em dois grupos:

  • Instruções de registro sensível: leia ou altere registros sensíveis ou locais de memória, como um registro de relógio ou registros de interrupção:
    • SGDT, SIDT, SLDT
    • SMSW
    • PUSHF, POPF
  • Instruções do sistema de proteção: consulte o sistema de proteção de armazenamento, memória ou sistema de realocação de endereço:
    • LAR, LSL, VERR, VERW
    • POP
    • EMPURRE
    • CALL FAR, JMP FAR, INT n, RETF
    • STR
    • MOV (registradores de segmento)

A introdução dos conjuntos de instruções AMD-V e Intel VT-x em 2005 permite que os processadores x86 atendam aos requisitos de virtualização Popek e Goldberg.

IA-64

O esforço necessário para dar suporte à virtualização na arquitetura IA-64 é descrito em um artigo de 2000 de Magenheimer e Christian.

SPARC

Um modo "hiperprivilegiado" para a arquitetura UltraSPARC foi especificado em UltraSPARC Architecture 2005. ' Ele define uma plataforma sun4v que é um superconjunto da plataforma sun4u , mas ainda é compatível com a especificação SPARC v9 Nível-1.

PowerPC

Todas as instruções confidenciais no conjunto de instruções PowerPC são privilegiadas.

Desempenho na prática

O requisito de eficiência na definição de Popek e Goldberg de um VMM diz respeito apenas à execução de instruções não privilegiadas, que devem ser executadas nativamente. Isso é o que distingue um VMM da classe mais geral de software de emulação de hardware . Infelizmente, mesmo em uma arquitetura que atenda aos requisitos de Popek e Goldberg, o desempenho de uma máquina virtual pode diferir significativamente do hardware real. Os primeiros experimentos realizados no System / 370 (que atende aos requisitos formais do Teorema 1) mostraram que o desempenho de uma máquina virtual pode ser tão baixo quanto 21% da máquina nativa em alguns benchmarks. O custo de capturar e emular instruções privilegiadas no VMM pode ser significativo. Isso levou os engenheiros da IBM a introduzir uma série de assistências de hardware , que praticamente dobrou o desempenho das máquinas virtuais System / 370. Assistências foram adicionadas em várias etapas. No final, foram mais de 100 assistências nos últimos modelos System / 370.

Um dos principais fatores para o desenvolvimento de assistências de hardware para o System / 370 foi a própria memória virtual. Quando o convidado era um sistema operacional que implementava memória virtual, mesmo as instruções não privilegiadas podiam ter tempos de execução mais longos - uma penalidade imposta pela necessidade de acessar as tabelas de tradução não usadas na execução nativa (consulte as tabelas da página sombra ).

Referências

Notas