Um alô pra galera de TI!

Faz um tempo que não posto nada, mas porque nesses últimos meses fiquei experimentando Xen VGA Passthrough (no Fedora 18, utilizando uma Sapphire Radeon 7950). Antes de aproveitar esse tutorial, você pode dar uma olhada no vídeo que eu fiz demonstrando uma máquina virtual utilizando a minha radeon 7950. Jogo FarCry3 numa vm com windows 7. cool

Seguindo a receita da palmirinha neste tutorial, você conseguirá o mesmo resultado.

Resultado Esperado (Far Cry 3, antes de começar a aprontar com seu equipamento)

Esse vídeo é o resultado esperado e o que eu alcancei (não se esqueça de ler a seção restrições). Há dois tipos de virtualização para acesso direto a placas gráficas: primary VGA passthru (a máquina virtual pega emprestada a placa gráfica usada pelo linux) e secondary VGA passthru (a máquina virtual utiliza 2 placas gráficas: uma genérica emulada e a placa de vídeo real emprestada).

Um detalhe importante: só consegui utitilizar o GNOME com o Xen Hypervisor carregado apenas ao configurar nomodeset na inicialização. Aí começam os detalhes não tão práticos...

Este tutorial é cheio de detalhes (e seria ainda mais extenso, caso eu tivesse que explicar os procedimentos envolvidos na compilação e instalação do kernel fora dos pacotes oficiais desta distribuição). Um desses é a necessidade de nomodeset na inicialização do fedora.

Usando nomodeset fará com que o X11 (window manager dessa distribuição Linux) inicialize corretamente, mesmo com as 2 placas gráficas. (Sim, o desktop do Fedora não está 100% preparado para lidar com várias placas)

Restrições para XEN VGA Passthru (como placa gráfica secundária na VM)

Resolvi colocar a seção restrições logo no começo deste howto pra que você não pense: "meus problemas com dual boot acabaram". Não é isso! Há uma série de restrições e manhas ao se tratar de VGA Passthrough:

  • As placas de vídeo Radeon e também as NVIDIA Geforce não possuem uma função de hardware chamada FLR (Function Level Reset). Essa função especial no hardware permite que o Xen (ou outra plataforma de virtualização) possa reinicializar a placa gráfica sem reiniciar o pc. Apenas as caríssimas NVIDIA Quadro possuem FLR (chamada de multi-os pela marca)
  • Há 1 forma de contornar essa limitação de hardware: toda vez antes de reiniciar a vm (ou até mesmo desligá-la), executar um comando para desatachar a placa gráfica da vm e evitar que o windows a desative. Esse comando será explicado logo mais
  • Caso você reinicie ou desligue a vm com a sua placa gráfica attachada a ela, o windows entenderá que esse dispositivo deverá ser desligado (como num pc normal) e ela permanecerá em um estado bugado, fazendo com o pc todo seja travado da próxima vez que tentar criar uma vm com ela.
  • Caso a vm entre em estado de hibernação, a placa gráfica não poderá ser reutilizada pela vm até que você reinicie o pc
  • O kernel distribuído com o Fedora 18 possui módulos do Xen, e que infelizmente não funcionará para este tutorial. Por praticidade, eu disponibilizo o kernel configurado e compilado por mim. Prontinho para ser instalado no seu fedora!
  • A placa gráfica só poderá ser compartilhada para 1 vm

Você pode estar pensando que essas restrições tornam VGA passthrough impraticável... impraticável neste momento, mas num futuro otimista os fabricantes disponibilizariam FLR em seus produtos da linha popular. Por isso vem o título [EXPERIMENTAL] deste tutorial, mas isso eu apanhei sozinho para descobrir.

E ainda conversei com alguns estrangeiros na lista de e-mails para usuários xen e ver se conseguia resolver esses problemas. Gastei umas horinhas baixando o source-code do Xen nas branches staging e unstable e aplicando patches específicos para placas Radeon. Um agradecimento para Matthias Kannenberg [matthias.kannenberg@googlemail.com], Casey Delorme [cdelorme@gmail.com], Peter Maloney [peter.maloney@brockmann-consult.de], David Techer [davidtecher@yahoo.fr] e outros.

Você pode acompanhar nossas conversas neste link: http://www.gossamer-threads.com/lists/xen/users/273783

Bom, agora vamos para as especificações de hardware!

Especificações e Requisitos do PC

Para placas-mãe com processador INTEL, elas devem suportar explicitamente uma função conhecida por intel vt-d (o termo é outro para placas-mãe com processadores AMD). Isso significa que o hardware estará preparado para esse tipo de virtualização mais avançada.

Intel VT-d

VT-x ou VT-i são tecnologias diferentes da primeira, cuidado!

No meu caso, eu utilizo uma GIGABYTE GA-Z77X-D3H com a BIOS versão f17. A seguir algumas fotos deste modelo e onde ativo o intel vt-d na BIOS:

Os fabricantes também não ajudam muito nessa parte. Logo acima da opção vt-d,há uma outra chamada intel virtualization technology e que pode confundir. Habilito as duas, mas o importante é saber que a placa-mãe suporta vt-d.

O modelo do processador utilizado é um core i7 2600 non-K (link para as especificações: http://ark.intel.com/products/52213/Intel-Core-i7-2600-Processor-8M-Cache-up-to-3_80-GHz). Obrigado WAZ pela foto! De acordo com o link, o dispositivo gráfico embutido no processador é o Intel HD Graphics 2000.

Se você está pensando em investir em um equipamento novo com a intenção de virtualizar, eu recomendaria a compra de componentes (placa-mãe e processador) compatíveis com a tecnologia Intel VT-d.

Agora o modelo da placa gráfica da marca Sapphire (Radeon 7950):

To Be Continued...

No próximo post, continuarei com a instalação do Fedora 18 e a preparação do Xen Hypervisor. Não será necessário compilar nada (como eu tive que fazer para testar as possibilidades), só baixaremos os pacotes via comando yum e instalaremos o kernel disponibilizado aqui. Explicarei porque precisei compilar o kernel e uns parâmetros que serão aplicados logo no boot do sistema operacional. Bom, nos vemos lá!

Clique aqui para ler a Parte 2 deste tutorial