Atualmente, a computação está passando por uma espécie de renascimento. Apesar de a virtualização ter sido criada há décadas, seu verdadeiro potencial está sendo atualmente obtido através do uso de hardware comum. A virtualização consolida as cargas de trabalho dos servidores para obter eficiência, mas outros elementos do ecossistema de servidores estão surgindo como candidatos para futuras consolidações. Muitas pessoas veem a virtualização como a consolidação da CPU, da memória e do armazenamento, mas essa é uma versão muito simplificada da solução. A rede é o aspecto principal da virtualização e representa um elemento primordial do conjunto de virtualização.
Vamos iniciar com uma investigação de alto nível do problema, em seguida vamos verificar as diversas formas nas quais o Linux® constrói e suporta a virtualização da rede.
Em um ambiente tradicional (consulte a Figura 1), um conjunto de servidores físicos hospeda o conjunto de aplicativos necessários. Para permitir a comunicação entre os servidores, cada servidor inclui uma ou mais placas da interface de rede (NICs) conectadas a uma infraestrutura de rede externa. A NIC, juntamente com uma pilha de softwares de rede, permite a comunicação entre os terminais através da infraestrutura de rede. Conforme mostrado na Figura 1, essa funcionalidade é representada por um comutador, que permite a comunicação eficiente de pacotes entre os terminais participantes.
Figura 1. Infraestrutura de rede tradicional
A principal inovação por trás da consolidação de servidores é a abstração do hardware físico para permitir que diversos sistemas operacionais e aplicativos compartilhem o hardware (consulte a Figura 2). Essa inovação é chamada de hypervisor (ou monitor de máquina virtual (VM)). Cada VM (conjunto de sistema operacional e aplicativo) visualiza o hardware subjacente como uma máquina completa e não compartilhada, mesmo que partes do hardware não existam ou sejam compartilhadas por diversas VMs. Um exemplo disso é a NIC virtual (vNIC). O hypervisor pode criar uma ou mais vNICs para cada VM. Essas NICs podem ser parecidas com NICs físicas para a VM, mas na verdade elas representam somente a interface da NIC. O hypervisor também permite a construção dinâmica de uma rede virtual completa com comutadores virtualizados para permitir a comunicação configurável entre os terminais da VM. Por fim, o hypervisor também permite a comunicação com a infraestrutura física de rede conectando as NICs físicas do servidor à infraestrutura lógica do hypervisor, permitindo a comunicação eficiente entre as VMs no hypervisor, assim como a comunicação eficiente com a rede externa. Na seção Recursos é possível encontrar diversos links para obter mais informações sobre o uso de hypervisor no Linux (uma área valiosa para o sistema operacional com software livre).
Figura 2. Infraestrutura de rede virtualizada
A infraestrutura de rede virtualizada permitiu também outras inovações interessantes, como o dispositivo virtual. Iremos aprender mais sobre ele juntamente com os elementos da rede virtual como parte desta exploração.
Um dos principais desenvolvimentos da infraestrutura de rede virtualizada é o desenvolvimento do comutador virtual. Ele conecta as vNICs às NICs físicas do servidor e—o mais importante—é que vincula vNICs a outras vNICs no servidor para comunicação local. O que torna essa solução interessante é que em um comutador virtual o limite não está vinculado à velocidade da rede e sim à largura de banda da memória, que permite a comunicação eficiente entre VMs locais e minimiza a sobrecarga da infraestrutura de rede. Isso gera uma economia da rede, pois a rede física só é usada para comunicação entre os servidores, isolando o tráfego entre as VMs nos servidores.
Mas como o Linux já incorpora um comutador que opera na camada 2 no kernel, algumas pessoas questionaram a necessidade de um comutador virtual. A resposta abrange diversos atributos, mas um dos mais importantes é definido pela nova classificação para esses tipos de comutadores. A nova classificação é chamada de comutador virtual distribuído e permite a ponte entre os servidores de uma forma que torna a arquitetura do servidor subjacente transparente. Um comutador virtual de um servidor pode se unir de forma transparente a um comutador virtual em outro servidor (consulte a Figura 3) simplificando a migração das VMs nos servidores (e suas interfaces virtuais), pois elas podem se conectar ao comutador virtual distribuído e se unir de forma transparente à sua rede comutada virtual.
Figura 3. O comutador virtual distribuído
Um dos projetos mais importantes nesse espaço é chamado de Open vSwitch, que será discutido a seguir neste artigo.
Um dos problemas do isolamento do tráfego local do servidor é que o tráfego não será visível externamente (para analisadores de rede, por exemplo). As implementações têm resolvido esse problema através de diversos esquemas, como o OpenFlow, o NetFlow e o sFlow, que são usados para exportar acessos remotos para controlar e monitorar o tráfego.
As primeiras implementações dos comutadores virtuais distribuídos eram fechadas e restritas à operação com conjuntos proprietários de hypervisors. Nos ambientes atuais de computação em nuvem, o ideal é suportar um ambiente heterogêneo no qual diversos hypervisors possam coexistir.
O Open vSwitch é um comutador virtual com diversas camadas disponível como um software livre na licença do Apache 2.0. Em maio de 2010 a versão 1.0.1 do Open vSwitch foi disponibilizada, oferecendo suporte a um impressionante conjunto de recursos. O Open vSwitch suporta as principais soluções de hypervisor de software livre, incluindo o Kernel-based VM (KVM), o VirtualBox, o Xen e o XenServer. É um substituto para o módulo atual de ponte do Linux.
O Open vSwitch consiste em um daemon de comutador e um módulo do kernel concomitante que gerencia a comutação baseada no fluxo. Existem também diversos outros daemons e utilitários para gerenciar o comutador (especialmente da perspectiva do OpenFlow). É possível executar o Open vSwitch integralmente do espaço do usuário, mas isso ocasiona a redução do desempenho.
Além de fornecer um comutador com qualidade de produção para ambientes de VM, o Open vSwitch inclui um impressionante roteiro de recursos para competir com outras soluções fechadas e proprietárias.
Virtualização do Dispositivo de Rede
A virtualização do hardware da NIC existe há algum tempo de diversas formas—muito antes da introdução da comutação virtual. Esta seção aborda algumas implementações e também algumas acelerações de hardware disponíveis para melhorar a velocidade da virtualização da rede.
Apesar de o QEMU ser um emulador de plataforma, ele fornece emulação de software para diversos dispositivos de hardware, incluindo NICs. Além disso, o QEMU fornece um servidor de Protocolo de Configuração de Host Dinâmico para a atribuição de endereços IP. O QEMU trabalha juntamente com o KVM para oferecer emulação de plataforma e de dispositivo individual para preparar a plataforma para a virtualização baseada no KVM. É possível aprender mais sobre o QEMU na seção Recursos .
virtio é uma estrutura de paravirtualização de
entrada/saída (E/S) para Linux que simplifica e acelera o tráfego de E/S da VM para
o hypervisor. O virtio cria um mecanismo de transporte
padronizado para a E/S entre uma VM e um hypervisor para a virtualização dos
dispositivos de bloco, dispositivos Peripheral Component Interconnect (PCI)
genéricos e dispositivos de rede, entre outros. É possível aprender mais sobre as
características do virtio na seção Recursos .
A virtualização tem sido implementada nas pilhas de rede há bastante tempo para permitir o acesso das pilhas de rede convidadas da VM à pilha de rede do host. O TAP e o TUN são dois exemplos desse esquema. TAP é um driver de kernel de rede virtual que implementa um dispositivo Ethernet e, dessa forma, opera no nível do quadro Ethernet. O driver TAP fornece a conexão Ethernet através da qual os quadros Ethernet convidados podem se comunicar. O TUN (ou "túnel" de rede) simula um dispositivo da camada de rede e se comunica no nível mais alto dos pacotes IP, que fornece uma pequena otimização, enquanto o dispositivo Ethernet subjacente pode gerenciar o enquadramento da camada 2 dos pacotes IP do TUN.
A virtualização de E/S é um esquema padronizado do PCI-Special Interest Group (SIG) que permite a aceleração da virtualização no nível do hardware. O Single-root IOV (SR-IOV), em especial, expõe uma interface através da qual uma placa PCI Express (PCIe) única pode ser exibida para diversos usuários como diversas placas PCIe, permitindo a conexão de diversos drivers independentes na placa PCIe, sem o conhecimento um do outro. O SR-IOV faz isso estendendo as funções virtuais para diversos usuários, que são parecidas com funções físicas no espaço PCIe, mas são representadas na placa como funções compartilhadas.
O benefício do SR-IOV para a virtualização da rede é o desempenho. Ao invés do hypervisor implementar o compartilhamento da NIC física, a própria placa implementa a multiplexação, permitindo a passagem direta da E/S das VMs convidadas diretamente para a placa.
Atualmente, o Linux inclui suporte para o SR-IOV, o que beneficia o hypervisor da KVM. O Xen também inclui suporte para SR-IOV, permitindo a apresentação eficiente de uma vNIC às VMs convidadas. O suporte para SR-IOV está no roteiro do Open vSwitch.
Apesar de relacionadas, as LANs virtuais (VLANs) são um método físico para a virtualização de redes. As VLANs fornecem a possibilidade de criação de redes virtuais em uma rede distribuída, dessa forma os hosts distintos (em redes independentes) aparecem como se fossem parte do mesmo domínio de transmissão. As VLANs fazem isso identificando quadros com as informações da VLAN a fim de identificar suas associações com uma LAN particular (de acordo com o padrão 802.1Q do Institute of Electrical and Electronics Engineers [IEEE]). Os hosts trabalham juntamente com os comutadores da VLAN para virtualizar a rede física. Mas apesar das VLANs se assemelharem a redes separadas, elas compartilham a mesma rede e também a largura de banda disponível e os impactos resultantes do congestionamento.
Diversas acelerações de virtualização focadas na E/S direcionadas às NICs e outros dispositivos começaram a aparecer. A Virtualization Technology for Directed I/O (VT-d) da Intel® fornece a possibilidade de isolamento dos recursos de E/S para melhorar a confiabilidade e a segurança, o que inclui o remapeamento das transferências de acesso direto à memória (usando tabelas com páginas de diversos níveis) e o remapeamento das interrupções associadas ao dispositivo, suportando os convidados não modificados e aqueles cientes da virtualização. O Virtual Machine Device Queues (VMDq) da Intel também acelera o fluxo do tráfego na rede nas configurações de virtualização incorporando filas e classificando a inteligência no hardware, resultando em uma menor utilização da CPU pelo hypervisor e em melhorias maiores no desempenho geral do sistema. O Linux inclui suporte para ambos.
Até aqui, este artigo explorou a virtualização dos dispositivos NIC e comutadores, algumas das implementações existentes e algumas das formas através das quais as virtualizações são aceleradas através do hardware. Agora, vamos expandir essa discussão para os serviços de rede gerais.
Uma das inovações interessantes no espaço de virtualização é o ecossistema que está surgindo da consolidação dos servidores. Ao invés de dedicar aplicativos às versões especializadas de hardware, as partes de um servidor são isoladas para fornecer energia para as VMs que estenderem os serviços no servidor. Essas VMs são chamadas de dispositivos virtuais, pois elas se concentram em um aplicativo específico e foram desenvolvidas para uma configuração de virtualização.
O dispositivo virtual normalmente se conecta ao hypervisor—ou à infraestrutura de rede genérica apresentada pelo hypervisor—para ampliar um serviço específico. O diferencial é que, em um servidor consolidado, as partes da capacidade de processamento (como os núcleos) e a largura de banda de E/S podem ser configuradas dinamicamente para o dispositivo virtual. Essa capacidade possui custo reduzido (pois não exige o isolamento de um servidor único) e é possível alterar de forma dinâmica a capacidade com base nas necessidades dos outros aplicativos em execução no servidor. Os dispositivos virtuais também podem ter um gerenciamento simplificado, pois o aplicativo é vinculado ao sistema operacional (na VM). Nenhuma configuração especial é necessária, pois a VM é totalmente pré-configurada. Esse é um benefício considerável dos dispositivos virtuais e o motivo do seu crescimento atual.
Os dispositivos virtuais têm sido desenvolvidos para diversos aplicativos corporativos e incluem a otimização da WAN, roteadores, redes privadas virtuais, firewalls, sistemas de detecção/proteção contra invasões, classificação e gerenciamento de e-mails, entre outros. Além dos serviços de rede, os dispositivos virtuais atuam no armazenamento, na segurança, na estrutura de aplicativos e no gerenciamento de conteúdo.
Houve um tempo em que tudo que era gerenciável também estava ao alcance de nossas mãos. Mas atualmente, nosso mundo está cada vez mais virtualizado e os dispositivos e serviços físicos caíram em desuso. As redes físicas foram virtualmente segmentadas para permitir o isolamento do tráfego e a construção de redes virtuais em entidades separadas geograficamente. Os aplicativos se transformaram em dispositivos virtuais segmentados em núcleos e localizados em servidores poderosos, aumentando não apenas a complexibilidade para o administrador, como também a flexibilidade e melhorando o gerenciamento. E, claro, o Linux está na linha de frente.
Aprender
- Ele é um ótimo sistema operacional e também uma
plataforma para soluções de virtualização. É possível aprender mais sobre Linux e
virtualização nos artigos Virtual
Linux (developerWorks, dezembro de 2006) e Anatomia de
um Hypervisor Linux (developerWorks, maio de 2009).
- O Linux implementa uma estrutura de virtualização
de E/S (usada pelo KVM) chamada
virtio.O virtiofornece uma estrutura simples para o desenvolvimento de drivers paravirtualizados eficientes. É possível saber mais sobre ovirtioe suas características no artigo Virtio: An I/O virtualization framework for Linux (developerWorks, janeiro de 2010). - O SR-IOV fornece uma forma de virtualização de
adaptadores físicos para uso por diversas VMs convidadas. É possível ler mais sobre
emulação de dispositivos e virtualização de E/S no artigo Virtualização Linux e passagem PCI (developerWorks, outubro de 2009).
- O SR-IOV permite que diversos sistemas operacionais
convidados compartilhem dispositivos PCIe. É possível aprender mais sobre o SR-IOV
neste site de criação de hardware
da Intel. O site PCI-SIG fornece as especificações das diversas tecnologias IOV.
- Os dispositivos virtuais são uma forma física de
entrega de aplicativos de software relativamente nova. Um diferencial importante dos
dispositivos virtuais é a capacidade de compartilhamento dos dispositivos entre mais
de um hypervisor para uma maior portabilidade. Uma etapa nessa direção é o Open
Virtualization Format (OVF), que define o formato dos metadados dos dispositivos
virtuais. É possível aprender mais sobre dispositivos virtuais e OVF no artigo Dispositivos Virtuais e o Open Virtualization Format (developerWorks,
outubro de 2009).
- O QEMU é um emulador de software livre para
sistemas de computadores completos que fornece uma solução completa de virtualização
(através da emulação). É possível aprender mais sobre o QEMU no artigo Emulação do
Sistema com o QEMU (developerWorks, setembro de 2007).
- O padrão IEEE 802.1Q fornece o padrão
de rede para a identificação de VLANs, definindo o conceito de VLAN na camada MAC
para o isolamento virtual de dispositivos.
- Na zona Linux do
developerWorks, você encontrará muitos artigos e
tutoriais de instruções, bem como downloads, fóruns de discussão e muitos
outros recursos para desenvolvedores e administradores Linux.
- Fique por dentro dos eventos técnicos e webcasts do developerWorks focados em uma série de
produtos IBM e tópicos do segmento de mercado de TI.
- Participe de um briefing ao vivo e gratuito do developerWorks para atualizar-se rapidamente
em relação aos produtos e ferramentas IBM e às tendências do segmento de mercado de
TI.
- Veja as demos on
demand no developerWorks que abrangem desde demos de instalação e
configuração de produtos para iniciantes até funcionalidades avançadas para
desenvolvedores experientes.
- Siga o developerWorks no Twitter ou
inscreva-se para receber tweets sobre o Linux no developerWorks.
Obter produtos e tecnologias
- O OpenSolaris implementou a
virtualização da NIC e do comutador como parte de um projeto chamado
Crossbow.
O Projeto
Crossbow trouxe a virtualização e o controle dos recursos de largura de
banda para a pilha de rede para minimizar a complexidade e a sobrecarga.
-
Open vSwitch é o primeiro comutador de
software livre com diversas camadas que atende o ecossistema virtualizado.
Recentemente lançado na versão 1.0, o Open vSwitch fornece uma incrível lista de
recursos e suporta diversos hypervisors de software livre (incluindo a KVM, o Xen, o
XenServer e o VirtualBox).
- A plataforma de computação em nuvem
Xen é uma infraestrutura de virtualização que incorpora o pacote do
comutador virtual Open vSwitch como parte da sua pilha.
-
Avalie os produtos
IBM da maneira que for melhor para você: faça download da versão de teste
de um produto, avalie um produto on-line, use-o em um ambiente de nuvem ou passe
algumas horas na SOA
Sandbox aprendendo a implementar Arquitetura Orientada a Serviços de modo
eficiente.
Discutir
- Participe da comunidade do My
developerWorks. Entre em contato com outros usuários do developerWorks e
explore os blogs, fóruns, grupos e wikis voltados para desenvolvedores.

M. Tim Jones é arquiteto de firmware integrado e autor de Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming (atualmente em sua segunda edição), AI Application Programming (em sua segunda edição) e BSD Sockets Programming from a Multilanguage Perspective. Seu conhecimento em engenharia varia do desenvolvimento de kernels para naves espaciais geossincrônicas até a arquitetura de sistemas embarcados e o desenvolvimento de protocolos de rede. Tim é Consultor de Engenharia da Emulex Corp. em Longmont, Colorado.