Virtualização Linux e passagem PCI

Emulação de dispositvo e virtualização de E/S de hardware

Os processadores foram desenvolvidos para aprimorar o desempenho em ambientes virtualizados, mas e os aspectos sobre E/S? Descubra tal aprimoramento no desempenho E/S chamado de dispositivo (ou PCI) de passagem. Esta inovação melhora o desempenho dos dispositivos de PCI utilizando um suporte de hardware da Intel (VT-d) ou AMD (IOMMU).

Compartilhe sua experiência:  Você possui dispositivos em seu ambiente virtual que se beneficiariam da passagem de PCI? Inclua seus comentários abaixo.

M. Tim Jones, Consultant Engineer, Emulex Corp.

Author photoM. Tim Jones é um arquiteto de firmwares embarcados e autor de Inteligência Artificial: Sistemas de Abordagem, GNU/Linux, Programação de Aplicativos AI (atualmente em sua segunda edição), Programação de Aplicativos AI (em sua segunda edição) e BSD Sockets Programming from a Multilanguage Perspective. Sua formação em engenharia vai desde o desenvolvimento de kernels para nave espacial geossincrônica até a arquitetura de sistema embarcado e o desenvolvimento de protocolos de interligação de redes. Tim é um Engenheiro Consultor para a Emulex Corp. em Longmont, Colorado.


nível de autor Contribuidor do
        developerWorks

11/Nov/2009

Faça parte dos grupos "verdes" no My developerWorks

Discuta assuntos e compartilhe recursos sobre energia, eficiência e meio ambiente no GReen IT Report space e no Green computing group em My developerWorks.

A plataforma de virtualização trata do compartilhamento de uma plataforma entre dois ou mais sistemas operacionais para uma maior eficiência no uso de recursos. Mas a plataforma implica em mais do que somente um processador: Também inclui outros elementos importantes que formam uma plataforma, incluindo armazenamento, rede e outros recursos de hardware. Alguns recursos de hardware podem ser facilmente virtualizados, tais como o processador ou armazenamento, mas outros recursos de hardware não podem, tais como um adaptador de vídeo e uma porta serial. A passagem PCI (Peripheral Component Interconnec) fornece os meios para o uso destes recursos eficientemente, e quando compartilhada isso não é possível ou útil. Este artigo explora o conceito de passagem, discute sua implementação em hipervisores, e detalha os que oferecem suporte a esta recente inovação.

Emulação de dispositivo de plataforma

Antes de falarmos sobre passagem, vamos explorar de que forma a emulação de dispositivo funciona atualmente, em duas arquiteturas de hipervisor. A primeira arquitetura incorpora a emulação de dispositivo dentro do hipervisor, enquanto a segunda impulsiona a emulação de dispositivo para um aplicativo de hipervisor externo.

Emulação de dispositivo dentro do hipervisor é um método comum implementado dentro do produto VMware da estação de trabalho (um sistema operacional com base no hipervisor). Neste modelo, o hipervisor inclui emulações de dispositivos comuns, nas quais os diversos sistemas operacionais convidados podem compartilhar, incluindo discos virtuais, adaptadores virtuais de rede e outros elementos necessários de plataforma. Este modelo em particular é mostrado na Figura 1.

Figura 1. Emulação de dispositivo com base em hipervisor
Emulação de dispositivo com base em hipervisor

A segunda arquitetura é chamada de emulação de dispositivo de espaço do usuário (consulte a Figura 2). Como o nome implica, em vez de a emulação de dispositivo estar integrada dentro do hipervisor, ela é implementada no espaço do usuário. O QEMU (que provê não somente a emulação de dispositivo, mas também um hipervisor) fornece uma emulação de dispositivo e é utilizado por um grande número de hipervisores independentes (KVM - Kernel-based Virtual Machine e VirtualBox, sendo apenas dois). Este modelo é vantajoso, pois a emulação de dispositivo é independente do hipervisor e pode então, ser compartilhada entre os hipervisores. Ele também permite emulação de dispositivo arbitrária sem a necessidade de sobrecarregar o hipervisor (o qual opera em um estado privilegiado) com esta funcionalidade.

Figura 2. Emulação de dispositivo de espaço do usuário
Emulação de dispositivo de espaço do usuário

Impulsionar a emulação de dispositivo do hipervisor para o espaço do usuário possui vantagens distintas. A vantagem mais importante está relacionada ao que é chamado de TCB (trusted computing base). O TCB de um sistema é o conjunto de todos os componentes que são críticos para sua segurança. É compreendido, então, que se o sistema é minimizado, existe uma probabilidade menor de erro e, então, um sistema mais seguro. A mesma ideia existe com o hipervisor. A segurança do hipervisor é crucial, pois isola vários sistemas operacionais convidados independentes. Com menor quantidade de códigos no hipervisor (impulsionando a emulação de dispositivo em um espaço de usuário pouco privilegiado), menor será a chance de utilização de privilégios para usuários não confiáveis.

Outra variação da emulação de dispositivo baseada no hipervisor são os drivers paravirtualizados. Neste modelo, o hipervisor inclui os drivers físicos, e cada sistema operacional convidado inclui um driver de informação do hipervisor que funciona em conjunto com os drivers do hipervisor (chamado paravirtualizado, ou driversPV).

Independentemente da emulação de dispositivo ocorrer no hipervisor ou em cima da VM (virtual machine) convidada, os métodos de emulação são similares. A emulação de dispositivo pode imitar um dispositivo específico (tal como um adaptador de rede Novell NE1000) ou um tipo de disco específico (tal como uma unidade IED - Integrated Device Eletronics). O hardware físico pode se diferenciar bastante — por exemplo, enquanto uma unidade IDE é emulada para os sistemas operacionais convidados, a plataforma do hardware físico pode usar uma unidade ATA (SATA) serial. Isto é útil, pois o suporte IDE é comum entre muitos sistemas operacionais e pode ser utilizado como um denominador comum em vez de todos os sistemas operacionais convidados oferecerem suporte a tipos de unidades mais avançadas.


Passagem de dispositivo

Como você pode verificar nos dois modelos de emulação de dispositivos acima, existe um preço a pagar por compartilhar dispositivos. Não importa se a emulação de dispositivo é executada no hipervisor ou no espaço do usuário dentro de uma VM independente, uma sobrecarga existe. Esta sobrecarga vale a pena desde que os dispositivos precisem ser compartilhados por vários sistemas operacionais convidados. Se o compartilhamento não for necessário, então existem métodos mais eficientes para compartilhar dispositivos.

Então, neste alto nível, a passagem de dispositivo trata do fornecimento de isolamento de dispositivos para um determinado sistema operacional convidado de forma que o dispositivo possa ser utilizado exclusivamente pelo convidado (consulte a Figura 3). Mas por que isso é útil? De forma não surpreendente, existem várias razões que fazem a passagem do dispositivo valer a pena. Duas das razões mais importantes são o desempenho e o fornecimento do uso exclusivo do dispositivo que basicamente, não é compartilhável.

Figura 3. Passagem dentro do hipervisor
Passagem dentro do hipervisor

Para desempenho, um desempenho praticamente nativo pode ser atingido pela passagem do dispositivo. Isto é perfeito para aplicativos de rede (ou aqueles que possuem grande disco de E/S) que não adotaram a virtualização pois, a contenção e o desempenho diminuíram através do hipervisor (para um driver no hipervisor ou através do hipervisor para uma emulação no espaço do usuário). Mas determinar dispositivos para convidados específicos, pode ser útil também quando estes dispositivos não podem ser compartilhados. Por exemplo, se um sistema inclui vários adaptadores de vídeo, estes podem ser passados por domínios exclusivos do convidado.

Finalmente, podem haver dispositivos PCI especializados nos quais somente um domínio de convidado utiliza ou dispositivos nos quais o hipervisor não suporta, e então não pode ser passado ao convidado. Portas USB individuais podem ser isoladas para um determinado domínio, ou uma porta serial (que não pode ser compartilhada) pode ser isolada para um convidado em particular.


Intere-se sobre as coberturas de emulação de dispositivo

As primeiras formas de emulação de dispositivo implementaram formas de sombra de interface de dispositivo no hipervisor, para fornecer o sistema operacional convidado com uma interface virtual para o hardware. Esta interface virtual consistiria na interface esperada, incluindo um espaço de endereço virtual representando o dispositivo (como a sombra PCI) e interrupção virtual. Mas com um driver de dispositivo em contato com uma interface virtual e um hipervisor traduzindo esta comunicação para o hardware atual, gera uma quantidade considerável de sobrecarga, — particularmente em dispositivos de alta largura de banda, como adaptores de rede.

A Xen popularizou a abordagem PV (discutida na seção anterior), que reduz a diminuição do desempenho tornando o driver do sistema operacional convidado ciente de que está sendo virtualizado. Neste caso, o sistema operacional convidado não visualizaria o espaço PCI para um dispositivo (tal como um adaptador de rede), mas em vez disso uma API (application programming interface) de adaptador de rede que forneceria um alto nível de abstração (tal como uma interface de pacote). O ponto negativo desta abordagem é que o sistema operacional convidado precisa ser modificado para PV. O ponto positivo é que você pode conseguir um desempenho praticamente nativo, em alguns casos.

As primeiras tentativas em passagem de dispositivo utilizavam um modelo de emulação pequeno, no qual o hipervisor fornecia um gerenciamento de memória com base em software (traduzindo o espaço de endereço do sistema operacional do convidado em um espaço de endereço de host confiável). E, enquanto as primeiras tentativas ofereciam meios para isolar um dispositivo para um sistema operacional de convidado em particular, faltavam à abordagem o desempenho e a escalabilidade requeridas por ambientes de grande virtualização. Felizmente, os fornecedores de processador equiparam a próxima geração de processadores com instruções para oferecer suporte aos hipervisores, como também com a lógica para passagem de dispositivo, incluindo virtualização interrompida e suporte à DMA (direct memory access). Então, em vez de capturar e emular o acesso para um dispositivo físico abaixo do hipervisor, os novos processadores fornecem tradução de endereços DMA e verificação de permissões para passagens de dispositivos eficientes.

Suporte de hardware para passagem de dispositivo

Tanto a Intel, como a AMD oferecem suporte para passagem de dispositivo em suas mais novas arquiteturas de processadores (além de novas instruções que ajudam o hipervisor). A Intel chama esta opção de VT-d (Virtualization Technology for Directed I/O), enquanto a AMD refere-se a mesma como IOMMU (I/O Memory Management Unit). Em cada caso, as novas CPUs fornecem meios para mapear o endereço físico PCI para o endereço virtual do convidado. Quando este mapeamento ocorre, o hardware cuida do acesso (e proteção), e o sistema operacional do convidado pode usar o dispositivo como se ele fosse um sistema não-virtualizado. Além do mapeamento da memória física do convidado, o isolamento é fornecido de tal forma que outros convidados (ou o hipervisor) estão impossibilitados de acessá-lo. As CPUs da Intel e da AMD fornecem muito mais que funcionalidade de virtualização. Para saber mais consulte a seção Recursos.

Outra inovação que ajuda a escala de interrupção a aumentar seus números de VMs é chamada de MSI (Message Signaled Interrupts). Em vez de contar com pinos de interrupção física para serem associados a um convidado, o MSI transforma interrupções em mensagens que são virtualizadas mais facilmente (em uma escala de milhares de interrupções individuais). O MSI está disponível desde a versão PCI 2.2, mas também está disponível no PCIe (PCI Express), onde permite às malhas se escalarem para muitos dispositivos. O MSI é ideal para virtualização de E/S, pois permite o isolamento das fontes de interrupção (em oposição aos pinos físicos que devem ser multifacetados ou encaminhados pelo software).


Suporte de hipervisor para passagem de dispositivo

Utilizando as últimas arquiteturas de processador de virtualização aprimorada, várias soluções de virtualização e hipervisores suportam a passagem de dispositivo. Você encontrará o suporte para o dispositivo de passagem (utilizando VT-d ou IOMMU) em Xen e KVM como também em outros hipervisores. Na maioria dos casos, o sistema operacional do convidado (domínio 0) deve ser compilado para oferecer suporte à passagem, que está disponível como uma opção de construção de tempo kernel. Ocultar os dispositivos da VM host pode ser necessário também (como é realizado com o Xen utilizando o pciback). Algumas restrições se aplicam ao PCI (por exemplo, os dispositivos PCI por trás da ponte PCIe para PCI devem ser determinados para o mesmo domínio), mas o PCIe não possui esta restrição.

Além disso, você encontrará suporte de configuração para a passagem de dispositivo em libvirt (junto com virsh), que fornece uma abstração para os esquemas de configuração utilizados pelos hipervisores subjacentes.


Problemas com passagem de dispositivo

Um dos problemas apresentados com a passagem de dispositivo é quando a migração ativa é requerida. Migração ativa é a suspensão e a migração subsequente de uma VM para um novo host físico, no momento em que a VM é reiniciada. Este é um grande recurso para oferecer suporte ao balanceamento de carga das VMs sobre uma rede de hosts físicos, mas apresenta um problema quando o dispositivo de passagem é utilizado. PCI hotplug (do qual existem diversas especificações) é um aspecto que precisa ser resolvido. O PCI hotplug permite que os dispositivos PCI possam ir e vir de um determinado kernel, o que é ideal — particularmente quando se considera a migração de uma VM para um hipervisor em uma nova máquina host (os dispositivos precisam estar desconectados, e então subsequentemente conectados em um novo hipervisor). Quando os dispositivos são emulados, tais como os adaptadores de rede virtuais, a emulação fornece uma camada para simplificar o hardware físico. Neste modo, um adaptador de rede virtual migra facilmente dentro da VM (também fornecido pelo Linux® o driver de ligação, que permite aos vários adaptadores de redes lógicas serem ligados na mesma interface).


Próximos passos na virtualização de E/S

Os próximos passos na virtualização de E/S estão acontecendo neste momento. Por exemplo, o PCIe inclui suporte para virtualização. Um conceito de virtualização que é ideal para a virtualização do servidor é chamado de SR-IOVS (Single-Root I/O Virtualization). Esta tecnologia de virtualização (criada através do PCI-SIG, ou PCI-Special Interest Group) fornece dispositivo de virtualização em instâncias complexas de uma única origem (neste caso, um único servidor com várias VMs compartilham um dispositivo). Outra variação chamada de Multi-Root IOV, oferece suporte a topologias maiores (tais como servidores blade, onde vários servidores podem acessar um ou mais dispositivos de PCIe). De certa forma, isto permite arbitrariamente dispositivos de rede maiores, incluindo servidores, dispositivos finais e switches (completos com descoberta de dispositivo e encaminhamento de pacote).

Com o SR-IOV, um dispositivo PCIe pode exportar não somente várias funções físicas do PCI, mas também um conjunto de funções virtuais que compartilham recursos no dispositivo de E/S. A arquitetura simplificada para o servidor de virtualização é mostrada na Figura 4. Neste modelo, nenhuma passagem é necessária, pois a virtualização ocorre no dispositivo final, permitindo que o hipervisor simplifique o mapeamento das funções virtuais para as VMs atingirem um desempenho de dispositivo nativo com a segurança do isolamento.

Figura 4. Passagem com SR-IOV
Passagem com SR-IOV

Informações adicionais

A virtualização esteve sujeita ao desenvolvimento por cerca de 50 anos, mas somente agora a atenção foi voltada para a virtualização de E/S. Suportes de processadores comerciais para virtualização se tornaram disponíveis somente há cinco anos. Então, basicamente, estamos no ápice do que virá em se tratando de plataforma de virtualização de E/S. E como um elemento chave para futuras arquiteturas como computação em nuvem, a virtualização certamente será uma tecnologia interessante de se acompanhar a evolução. Como de costume, o Linux está à frente ao oferecer suporte a estas novas arquiteturas, e kernels recentes (2.6.27 e além) estão começando a incluir suporte para novas tecnologias de virtualização.

Recursos

Aprender

Obter produtos e tecnologias

  • Com o IBM trial software, disponível para download diretamente do developerWorks, construa seu próximo projeto de desenvolvimento em Linux.

Discutir

  • Venha participar da My developerWorks community; com seu perfil pessoal e página inicial customizada, você pode adequar o developerWorks a seus interesses e interagir com outros usuários developerWorks.

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Linux
ArticleID=446236
ArticleTitle=Virtualização Linux e passagem PCI
publish-date=11112009