Um alô pra galera de TI!

Esta é a terceira e última parte do tutorial sobre virtualização com acesso direto a placas gráficas, utilizando Xen e Fedora 18. Tinhamos parado na primeira inicialização do Fedora 18 instalado, já que usamos uma mídia com a versão LIVE desse sistema operacional. Nas imagens a seguir, eu configuro um usuário comum (a senha do root foi configurada durante o procedimento da instalação).

Veja a seção Restrições para Xen VGA Passthru da Parte 1 (caso você esteja começando por este post)!

Meu objetivo de criar esse tutorial (e também as escolhas que tomei durante o processo) é facilitar a reprodução do VGA Passthrough para leigos. Por isso há uma série de explicações e etapas relacionadas indiretamente ao resultado. Por exemplo: a própria escolha do Xen Hypervisor!

Porque não KVM, próprio para Fedora? Resposta: quantidade de pessoas na internet que obtiveram êxito com Xen VGA Passthrough é bem maior.

Os materiais que encontrei na internet requerem um conhecimento quase adivinhatório (risos) e eu desconfiei se era possível alcançar esse objetivo com os testes que fiz em uma Geforce GTX 550 Ti.

Welcome to Fedora e primeiro acesso ao Fedora 18 instalado

Boas-vindas ao Fedora 18. Clico em Forward para exibir o blablablá da licença do produto.  

Informações de licença para a versão, os termos de utilização e restrições. Clico em Forward novamente.

Nesta etapa, cria-se um usuário comum para uso do Fedora 18. Confirmo Full Name, Username, Password e Confirm Password. Piece of cake! Clico em Forward novamente.

Confiro a data e hora, desmarco a opção Synchronize date and time over the network e clico em Finish. Apartir de agora, uma tela de login será apresentada e o usuário criado (etapa Create User) será usado.

Data e hora novamente (?), apesar dessa configuração já ter sido feita no momento da instalação pela mídia bootável.

Uma conexão válida a internet é requisito obrigatório! Eu optei por usar um adaptador wireless da TPLINK, modelo TL-WN722N, e precisarei configurar meu acesso ao roteador. Se você utiliza conexão por cabo de rede, menos um trabalho a ser feito.

Para configurar uma rede wireless, clico no ícone correspondente do taskbar, seleciono o roteador e informo a senha.

Bom, as preparações básicas foram concluídas. O abacaxi foi descascado e vamos para o que mais interessa! Na próxima seção, teremos a instalação do Xen Hypervisor e a preparação da VM.

Instalando o Xen Hypervisor e preparando a partição da VM

Logo mais no vídeo (aêêê!), eu explico as etapas relacionadas a instalação do RPM Fusion (repositório FREE e NONFREE do Fedora), o Xen Hypervisor e uma aplicação chamada gparted (para criar uma nova partição no HD para a VM com windows 7).

Antes de começar realmente, abro o diretório Downloads para mostrar os arquivos necessários: a ISO do instalador do Windows 7 (com o arquivo contendo a chave de instalação), o kernel customizado (versão 3.8.1-201) e o arquivo hvm com as definições da VM (memória utilizada e principalmente, os PCI IDs dos dispositivos emprestados diretamente a VM).

O comando yum resolve todas as dependências ao instalar um pacote.

O comando lspci -k listará todos os dispositivos PCI instalados juntamente com seus identificadores (PCI IDs). Esses PCI IDs tem formato xx:xx.x

 Seguem os arquivos para download:

Após adicionar uma partição ao HD do Fedora 18 com a aplicação gparted, executo 2 comandos nessa nova partição para que o Xen Hypervisor possa utiliza-la como sistema de arquivos da futura VM (tentei utilizar uma partição NTFS diretamente, mas não deu certo e então voltei para LVM). # significa que o comando deverá ser executado com permissões de root!

# vgcreate xen-win7 /dev/sda3, onde xen-win7 é o nome do volume group e /dev/sda3, a partição criada.

# lvcreate -nxen-win7-fs -l100%FREE /dev/xen-win7, onde xen-win7-fs é o nome do volume lógico, 100%FREE é o espaço que esse volume lógico ocupará (100% do espaço vago) e /dev/xen-win7 é o caminho completo do volume group.

Passo o controle das portas USB ligadas nesses conectores da placa-mãe. Achei mais fácil distinguir, porque elas são separadas das portas USB traseiras.

Não se esqueça de reiniciar a máquina! E no boot do Fedora 18, selecionar a opção Fedora, with Xen hypervisor.

Opção no boot do Fedora 18 após instalar o Xen Hypervisor pelo comando yum. Para ver os parâmetros desta opção, tecla-se [e]

 

Viu os parâmetros na inicialização? 

  • xen-pciback.passthrough=1
  • xen-pciback.hide=(1:0.0)(1:0.1)(0:1d.0)

Uso um editor chamado vi com permissões de root para editar o arquivo /etc/default/grub e colocar ambos os parâmetros da linha GRUB_CMDLINE_LINUX. Para atualizar o bootloader grub2, executo um comando grub2-mkconfig -o /boot/grub2/grub.cfg.

No vi, teclo [insert] para ativar o modo de edição no arquivo e ao terminar, teclo [esc] e depois [:][w][q] para salvar e fechar o arquivo.

nomodeset não será mais necessário pra essa versão do kernel e também um dos motivos pro vídeo 1 acima ser tão chato! Utilizo o vi novamente para editar o arquivo /boot/grub2/grub.cfg e retirar esse parâmetro das entradas do kernel 3.8.1-201.fc18.x86_64.

No arquivo win7.hvm estão configurados:

  • na seção disk, a partição criada como HD e sistema de arquivos para a VM e a ISO do instalador do Windows 7 como CDROM
  • gfx_passthru=0 (pois se trata de uma vm com 2 dispositivos gráficos: um emulado pelo Xen e a placa Radeon 7950)
  • e os PCI IDs da placa Radeon 7950, seu dispostivo de aúdio e da controladora USB correspondente as portas indicadas na figura do layout da placa-mãe 

Por que é necessário instalar um kernel customizado? Já que os kernels atuais já possuem funções do Xen?

No kernel customizado para esse tutorial, os módulos do Xen são incorporados a ele, fazendo com que os 3 dispositivos citados no vídeo 1 acima sejam reservados logo na inicialização do sistema operacional. Ou seja, tanto a placa gráfica Radeon, quanto a controladora de portas USB do PCI ID 00:1d.0 não estarão disponíveis para a máquina física (por intervenção do kernel customizado + Xen Hypervisor).

Tive muitos problemas para evitar que outros módulos e drivers (antes de optar pela configuração e recompilação de kernel) tomassem o controle desses dispositivos. O resultado esperado com essa brincadeira:

Ao executar o comando xl pci-assignable-list com o kernel customizado, os 3 dispositivos devem ser listados, indicando que estão reservados para virtualização.

lspci -k | more para listar as informações abaixo

Claramente, o driver pciback do Xen tomou o controle daqueles 3 dispositivos previamente citados. Espera-se exatamente isso!

Reinicializou! Iniciando a VM (para instalar Windows 7, etc.)

Ao reinicializar a máquina, a opção Fedora, with Xen Hypervirsor deverá ser escolhida.

Teclo [e] para mostrar os parâmetros da inicialização.

 Calma... você já chegou até aqui! Confiro um último detalhe antes de startar VM: executo xl pci-assignable-list como Root para conferir os dispositivos cujo controle poderá ser passado para uma VM.

Se você não obteve os mesmos 3 PCI IDs, é melhor você revisar as etapas demonstradas no vídeo (a instalação do kernel customizado, a edição dos arquivos de parametrização, a atualização do grub.cfg). Seguiremos com o vídeo 2...

Bom, e é isso aí! Nos vemos lá... =D