Um cabo console…

Durante estes últimos dias, fiz vários testes com o Xen 4.0. Nos próximos posts vou escrever sobre as dificuldades e minhas experiências sobre a adoção do Xen 4.0 como plataforma de virtualização. Uma delas foi encontrar um cabo console (com1 ou ttyS0, como queira) que funcionasse no meu computador de testes.

Para ter acesso ao console da máquina de testes basta adicionar o argumento

console=com1,vga com1=9600,8n1,0X3F8,4

na linha do grub que carrega o xen.gz

O Lincon da UFG me cedeu um que ele tinha. Isso me ajudou bastante, pois posso acompanhar os logs do boot do XEN e saber quando alguma coisa está errada.

Outra mudança que estou presenciando é a adoção do Grub2 como gestor de boot do Ubuntu 9.10. Não estava acostumado com este gestor. Logo vou ter que estudá-lo também.

Lançado o Xen 4.0.0

No último dia 07 de abril a equipe de desenvolvimento do Xen liberou a sua mais nova versão. De acordo com o release disponível no site oficial [1], a nova versão possui diversas melhorias.

Vou fazer os testes com o Ubuntu, Debian e Slackware e em breve teremos trarei as minhas impressões sobre esta versão.

Mais informações:
[1] – http://wiki.xensource.com/xenwiki/Xen4.0

O mac adress do XEN

Eu estava fazendo estudos e perdi algumas boas horas dias por um problema simples.

Sintoma: minhas máquinas virtuais com Slackware não navegavam, já as máquinas Debian, criadas por um script, navegavam normalmente.

Analisei o trafego de rede, os filtros do iptables e nada. O kernel que carregava as 2 máquinas era o mesmo…. Parecia-me que era alguma coisa no conf da máquina virtual.

As máquinas virtuais do Xen, precisam ter seu mac address iniciado por 00:16:3E. Se não for este o início do mac address a maquina não navega.

A título de curiosidade, a documentação oficial do Xen, disponível em XenNetworking, não fala sobre a obrigatoriedade utilizar 00:16:3E como mac address, mas faz a sua recomendação.

Mais informações:

XenNetworking

A ídeia por de traz do Xen não é complicada, mas sua instalação e configuração envolve uma série de dicas e truques…

Uma mensagem curiosa

Ao iniciar o Slackware com Xen pela primeira vez, recebi a seguinte mensagem:

***************************************************************
***************************************************************
** WARNING: Currently emulating unsupported memory accesses  **
**          in /lib/tls glibc libraries. The emulation is    **
**          slow. To ensure full performance you should      **
**          install a 'xen-friendly' (nosegneg) version of   **
**          the library, or disable tls support by executing **
**          the following as root:                           **
**          mv /lib/tls /lib/tls.disabled                    **
** Offending process: init (pid=1004)                        **
***************************************************************
***************************************************************

Entretanto, para minha surpresa, não existia o arquivo indicado.

Consultando a documentação encontrei uma página que descreve e explica este problema. De acordo com o site, em plataformas x86, o Xen utiliza segmentação para prover proteção da memória usada para o hipervisor. Isso resulta em alguns problemas de desempenho já que seguimentos “wrap-around”, como os usados pela glibc, necessitam de um tratamento com custo maior de CPU maior. Para obter mais informações sobre como o Xen utiliza segmentação, veja XenSegments.

Para resolver esses problemas, em sistemas como RedHat, CentOS, Debian e Ubuntu, você pode simplesmente mover o arquivo, conforme o determinado na mensagem. No entanto, no Slackware é necessário recompilar e reinstalar a glibc.

Compilando a glibc para Slackware 12.2

Seguem os passos para a compilação da glibc.

wget ftp://ftp.slackware-brasil.com.br/slackware-12.2/source/l/glibc/*

Edite o arquivo glibc.SlackBuild e aplique o seguinte patch:

c8
< TMP=${TMP:-/glibc-tmp-$(mcookie)}
---
> TMP=$CDW/glibc-tmp-$(mcookie)
162c162
< CFLAGS="-g $OPTIMIZ" \
---
> CFLAGS="-g $OPTIMIZ -mno-tls-direct-seg-refs" \
166d165
<   --with-headers=/usr/src/linux-${KERNEL_HEADERS}/include \

e execute o comando

su -c glibc.SlackBuild

Ao final da execução deste script, você terá os novos pacotes para Slackware da glibc otimizada para funcionamento com o Xen. São eles:

glibc-2.7-i486-17.tgz
glibc-i18n-2.7-noarch-17.tgz
glibc-solibs-2.7-i486-17.tgz
glibc-debug-2.7-i486-17.tgz
glibc-profile-2.7-i486-17.tgz
glibc-zoneinfo-2.7-noarch-17.tgz

Considerações sobre a glibc

  • A glibc é uma biblioteca muito importante para o correto funcionamento do sistema. Por isto, tenha certeza do que está fazendo.
  • Alguns programas podem ser compilados estaticamente. Assim, pode acontecer de algum aplicativo que você utilize com o Slackware apresente a mensagem de erro do TLS

A ídeia por de traz do Xen não é complicada, mas sua instalação e configuração envolve uma série de dicas e truques...

Kernel domU (linux-2.6.18) para Slackware

Compilando o DomU

Para compilar o DomU execute os seguintes passos.
Verifique se a opção Privileged Guest (domain 0), backends e outros drivers que não serão usados estão desabilitados. Verifique se módulos de frontends do estão habilitados.

A seguir, prossiga com estes passos:

make linux-2.6-xenU-config CONFIGMODE=menuconfig

Dar enter para todas as perguntas:

Cache clean pages in transcendent memory (PRECACHE) [N/y/?] (NEW)
Swap pages to transcendent memory (PRESWAP) [N/y/?] (NEW)
PCI Device Reservation for Passthrough (PCI_GUESTDEV) [Y/n/?] (NEW)
PCI Device IO Multiplex for Passthrough (PCI_IOMULTI) [Y/n/?] (NEW)
PCI IO/MEMORY space reserve (PCI_RESERVE) [Y/n/?] (NEW)
PCI IOV support (PCI_IOV) [N/y/?] (NEW)
IMQ target support (IP_NF_TARGET_IMQ) [N/m/?] (NEW)
IMQ target support (IP6_NF_TARGET_IMQ) [N/m/?] (NEW)
IMQ (intermediate queueing device) support (IMQ) [N/m/y/?] (NEW)
Intel(R) 82575 Gigabit Ethernet support (IGB) [N/m/y/?] (NEW)
Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support (E1000E) [N/m/y/?] (NEW)
Intel(R) 10GbE PCI Express adapters support (IXGBE) [N/m/y/?] (NEW)
Intel Core (2) Duo/Solo temperature sensor (SENSORS_CORETEMP) [N/m/?] (NEW)
PC-style 'CMOS' (RTC_DRV_CMOS) [M/n/?] (NEW)
USB backend driver (XEN_USB_BACKEND) [M/n/?] (NEW)
USB frontend driver (XEN_USB_FRONTEND) [M/n/?] (NEW)
Taking the HCD statistics (for debug) (XEN_USB_FRONTEND_HCD_STATS) [Y/n/?] (NEW)
HCD suspend/resume support (DO NOT USE) (XEN_USB_FRONTEND_HCD_PM) [N/y/?] (NEW)
make linux-2.6-xenU-build
cd dist/install
sudo /sbin/makepkg -l y -c n /tmp/xen-3.4.2-linux-2.6.18.8-xenU-i686-1.tgz
cd ../.. && rm -rf dist/install

Pronto. Seu pacote com o Kernel para guest está pronto para ser utilizado.

Instalando Xen (dom0) no Slackware

Uma vez que você tenha criado os pacotes do Slackware, conforme descritos nos posts anteriores, você já pode fazer a sua instalação. Se você ainda não criou os pacotes, recomendamos que leia e refaça os seguintes posts em sequência:

Para facilitar, vamos começar utilizando o GRUB como gerenciador de boot. O grubconfig irá questionar sobre qual partição está sua pasta /boot.

sudo /usr/sbin/slackpkg install grub
sudo /usr/sbin/grubconfig

Instale os pacotes gerados:

sudo /sbin/installpkg coreutils-7.4-i486-1.tgz
sudo /sbin/installpkg xen-3.4.2-hypervisor-i686-1.tgz
sudo /sbin/installpkg xen-3.4.2-stubdom-i686-1.tgz
sudo /sbin/installpkg xen-3.4.2-docs-noarch-1.tgz
sudo /sbin/installpkg xen-3.4.2-linux-2.6.18.8-xen0-i686-1.tgz
sudo /sbin/installpkg xen-3.4.2-tools-i686-1.tgz

Edite o arquivo /boot/grub/menu.lst e adicione as seguintes entradas:

title Xen 3.4.2 - linux 2.6.18.8 xen 0- Slackware 12.2
root (hd0,0)
kernel /boot/xen-3.4.2.gz dom0_mem=256M
module /boot/vmlinuz-2.6.18.8-xen0 root=/dev/sda1 ro

Edite o arquivo /etc/rc.d/rc.local e adicione as seguintes entradas:

/usr/sbin/xend start

Pronto. Você já pode reiniciar seu computador, escolhendo o Xen como boot. Se tudo estiver em ordem, seu Domain0 estará funcionando!

Kernel dom0 (linux-2.6.18) para Slackware

O Xen trabalha com o conceito de paravirtualização. E é a implementação deste conceito que dá ao Xen o ganho em performance, comparado aos outros softwares de virtualização, que trabalham com o conceito de virtualização completa, ou full virtualization.

Dito isto, é importante esclarecer que iremos trabalhar com 2 kernels. Um kernel para o host (hoespedeiro) e outro kernel para as máquinas guests (visitantes). O kernel para o host, também chamado de Domain0 (dom0) deverá ter suporte ao Xen, em modo Dom0, além de todos os outros drivers que permintam o funcionamento do hardware existente em seu PC.

Atenção: Não esqueça de habilitar os módulos de drives de seu hardware!!!

O objetivo deste post é a mostrar como criar o pacote do kernel dom0, com o kernel Xen official, linux-2.6.18 no Slackware. Uma apresentação mais minuciosa dos módulos necessários em cada kernel será feita em um outro post.

Compilando o Dom0

Para compilar o Dom0 execute os seguintes passos:

make linux-2.6-xen0-config CONFIGMODE=menuconfig

Dar enter para todas as perguntas, e no menuconfig configure o kernel de acordo com suas necessidades.

Cache clean pages in transcendent memory (PRECACHE) [N/y/?] (NEW)
Swap pages to transcendent memory (PRESWAP) [N/y/?] (NEW)
PCI Device Reservation for Passthrough (PCI_GUESTDEV) [Y/n/?] (NEW)
PCI Device IO Multiplex for Passthrough (PCI_IOMULTI) [Y/n/?] (NEW)
PCI IO/MEMORY space reserve (PCI_RESERVE) [Y/n/?] (NEW)
PCI IOV support (PCI_IOV) [N/y/?] (NEW)
IMQ target support (IP_NF_TARGET_IMQ) [N/m/?] (NEW)
IMQ target support (IP6_NF_TARGET_IMQ) [N/m/?] (NEW)
IMQ (intermediate queueing device) support (IMQ) [N/m/y/?] (NEW)
Intel(R) 82575 Gigabit Ethernet support (IGB) [N/m/y/?] (NEW)
Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support (E1000E) [N/m/y/?] (NEW)
Intel(R) 10GbE PCI Express adapters support (IXGBE) [N/m/y/?] (NEW)
Intel Core (2) Duo/Solo temperature sensor (SENSORS_CORETEMP) [N/m/?] (NEW)
PC-style 'CMOS' (RTC_DRV_CMOS) [M/n/?] (NEW)
USB backend driver (XEN_USB_BACKEND) [M/n/?] (NEW)
USB frontend driver (XEN_USB_FRONTEND) [M/n/?] (NEW)
Taking the HCD statistics (for debug) (XEN_USB_FRONTEND_HCD_STATS) [Y/n/?] (NEW)
HCD suspend/resume support (DO NOT USE) (XEN_USB_FRONTEND_HCD_PM) [N/y/?] (NEW)

Para gerar o pacote com o Kernel para o Domain0:

make linux-2.6-xen0-build
cd dist/install
sudo /sbin/makepkg -l y -c n /tmp/xen-3.4.2-linux-2.6.18.8-xen0-i686-1.tgz
cd ../.. && rm -rf dist/install

Pronto! Já temos o pacote com o kernel dom0 para o slackware!