Pass-Through Xen 3.4.1

9 views
Skip to first unread message

Robson Maganha

unread,
Nov 11, 2009, 7:45:28 AM11/11/09
to xen-br
Bom dia,

Estou realizando uns testes de virtualização, e encapsulamento PCI,
estou utilizando uma máquina com placa-mão sem Suporte VT-d, gostaria
de saber se para encapsular uma placa de rede para uma MV PVM
(Debian), há a necessidade desta flag? ou somente se a MV for HVM?

Estou seguindo o tutorial http://wiki.xensource.com/xenwiki/VTdHowTo?highlight=%28pciback%29
, pois possuo o pciback embutido no kernel.

Obrigado.

gunther boeckmann

unread,
Nov 12, 2009, 12:21:44 PM11/12/09
to xen...@googlegroups.com
Quando você pergunta "encapsular uma placa de rede" você quer dizer "utilizar PCI-Passthrough numa placa de rede", a resposta é sim.
Para MV PVM (Debian por exemplo) você não precisa do VT-d nem do IOMMU, somente MV HVM é precisam.
Porém para o IOMMU funcionar 100%, existem ainda outros detalhes...

Gunther

2009/11/11 Robson Maganha <robson...@yahoo.com.br>

Robson Maganha

unread,
Nov 12, 2009, 12:45:39 PM11/12/09
to xen-br

Boa Tarde Gunther,

Então, é que estou com a seguinte situação.

Estou setando o endereço da PCI de rede (Via-Rhine III)no boot:



title Xen 3.4 / XenLinux 2.6
kernel /xen-3.4.gz console=vga
module /vmlinuz-2.6.18.8-xen root=/dev/cciss/c0d0p2 ro
console=tty0 pciback.permissive pciback.hide=(03:02.0)
reassigndev=03:02.0
module /initrd-2.6.18-xen.img

Arquivo configuração MV PVM Debian:
pci = [ '03:02.0' ]

Porém quando vou subir a VM retorna o erro: "VmError: pci:
0000:03:02.0: non-page-aligned MMIO BAR found."

Acho que o problema é no servidor, pois testei em outro e funciona
perfeitamente.

E qual seriam os outros detalhes que você mencionou?

Desde já, obrigado.






gunther boeckmann

unread,
Nov 12, 2009, 4:56:11 PM11/12/09
to xen...@googlegroups.com
Bo anoite Robson,

O VT-d ou IOMMU tem alguns requisitos para funcionar legal, ainda não tive oportunidade de testar, mas nem todas as placas tem este suporte que diferente do VT-x ou AMD-V, onde o processador mantém o recurso, o VT-d está presente no Chipset da placa mãe e suportado pela BIOS, e se não estou enganado seu uso restringi-se a por enquanto a dispositivos PCI-E. Além disso, outras funções avançadas da placa devem ser desabilitadas, e quando for usar é importante ter o Hypervisor mais recente.

Quanto a este erro, posta os arquivos "/etc/xen/xend-config.sxp" e a configuração da tua MV.

Gunther


2009/11/12 Robson Maganha <robson...@yahoo.com.br>

Robson Maganha

unread,
Nov 13, 2009, 5:30:45 AM11/13/09
to xen-br
Bom dia Gunther,

Então, os testes que obtive sucesso fora com uma PCI-e, mas gostaria
de fazer funcionar em um PCI normal também.
Segue configurações para análise:

# xend-config.sxp
-------------------------------------------------------------------
(xend-unix-server yes)
(xend-relocation-server yes)
(xend-unix-path /var/lib/xend/xend-socket)
(xend-relocation-hosts-allow '^localhost$ ^localhost\\.localdomain$')
(vif-script vif-bridge)
(dom0-min-mem 256)
(dom0-cpus 0)
(vnc-listen '0.0.0.0')
(vncpasswd '****')
(keymap 'pt-br')


# Arquivo Configuração MV
------------------------------------------------------
# Kernel image file.
kernel = "/boot/vms/vmlinuz-2.6.18.8-xen-DOMU"

# Optional ramdisk.
ramdisk = "/boot/vms/initrd-2.6.18-xen.img-DOMU"

# The domain build function. Default is 'linux'.
builder='linux'

memory = 1536

# A name for your domain. All domains must have different names.
name = "SRVVXENTEST"

# Number of Virtual CPUS to use, default is 1
vcpus = 1

# Define network interfaces.
vif = [ 'bridge=xenbr1' ]

on_crash = 'preserve'

extra = 'xencons=xvc console=xvc0 video=tty'

vfb = [ 'type=vnc,vncdisplay=0,vnclisten=0.0.0.0,vncpasswd=1234' ]
#----------------------------------------------------------------------------
# Define the disk devices you want the domain to have access to, and
# what you want them accessible as.
# Each disk entry is of the form phy:UNAME,DEV,MODE
# where UNAME is the device, DEV is the device name the domain will
see,
# and MODE is r for read-only, w for read-write.

pci = [ '03:02.0' ]

disk = [ 'phy:/dev/virtual/SRVVXENTEST,sda1,w','phy:/dev/virtual/
SRVVXENTEST_swap,sda2,r' ]
root = "/dev/sda1 ro"






Obrigado


gunther boeckmann

unread,
Nov 13, 2009, 7:51:40 AM11/13/09
to xen...@googlegroups.com
Quanto a necessidade do PCI-e, me referia ao uso em PCI-Passthrough em HVM com suporte ao VT-d, ok?
Já para PVM, o barramento PCI padrão deve funcionar em geral.

Gunther


2009/11/13 Robson Maganha <robson...@yahoo.com.br>

Robson Maganha

unread,
Nov 13, 2009, 7:58:00 AM11/13/09
to xen-br
Pois é, mas está me retornando o erro que mencionei, será que estou
fazendo algo de errado, ou pode ser a placa de rede que não teria o
suporte a PCI-PassThrough?

Vou testar com uma placa de captura de video(PCI) que tenho aqui, e
posto o resultado.

até

Robson Maganha

unread,
Nov 13, 2009, 8:12:34 AM11/13/09
to xen-br
Olá Gunther,

Agora deu certo, o problema é na placa de Rede, testei três placas,
uma Realtek, uma Via e outra Encore, as três retornaram o mesmo erro.
Acho que a placa PCI tem que ter algum suporte a PCI-Passthrough.

Veja a MV com PCI-PassThrough:

MV-Linux-PVM:~# lspci
03:02.0 Multimedia video controller: Brooktree Corporation Bt878 Video
Capture (rev 11)
03:02.1 Multimedia controller: Brooktree Corporation Bt878 Audio
Capture (rev 11)

Valeu pela ajuda. Se precisar estamos ai.




gunther boeckmann

unread,
Nov 13, 2009, 4:40:46 PM11/13/09
to xen...@googlegroups.com
Oi Robson,

Realmente interesasnte, teoricamente todas as placas PCI deveriam funcionar, pois a função PCI Passthrogh é tratada pelo Hypervisor e o Dom0 de modo que Domínios PVM possam ter acesso direto ao Hardware sem qualquer esforço.
Andei lendo sobre esta mensagem de erro e observei que a partir do Xen 3.3 alguns dispositivos com PCI Passthrough apresentaram problemas após os recursos para o VT-d e IOMMU foram adicionados no Xen.
Se quiser continuar os testes, tenta o seguinte:

Teste 0 - Após o Boot do servidor verifica se o PCI foi "escondido" realmente, digita:
# lspci
# cat /var/log/dmesg | grep pciback
# ls /sys/bus/pci/drivers/pciback

Teste 1 - Adiciona a linha "(pci-passthrough-strict-check  no)" em /etc/xen/xend-config.sxp, reinicia o servidor e veja se algo mudou.
Ref: http://markmail.org/thread/w7wiud2lrwijm27n#query:+page:1+mid:w7wiud2lrwijm27n+state:results

Teste 2 - Tenta forçar a desativação do vtd e iommu adicionando os parametros do kernel no Grub:
kernel        /xen-3.4.gz console=vga vtd=0 iommu=0
Ref: http://www.mail-archive.com/xen-ia6...@lists.xensource.com/msg09910.html

Teste 3 - Tenta usar o parâmetro do kernel "guestdev=(03:02.0)" ao invés do "pciback.hide".
Ref: http://lists.xensource.com/archives/html/xen-devel/2008-12/msg01095.html
      http://www.mailinglistarchive.com/xen-...@lists.xensource.com/msg64057.html

Outra referencia:
http://lists.xensource.com/archives/html/xen-changelog/2009-10/msg00098.html

Os recursos de VT-d e IOMMU são novos e parece que deu ou está dando dor de cabeça aos desenvolvedores.

Boa sorte e pode contar comigo.
Gunther


2009/11/13 Robson Maganha <robson...@yahoo.com.br>

Robson Maganha

unread,
Nov 16, 2009, 6:03:36 AM11/16/09
to xen-br
Bom dia Gunther,

Realizei todos os testes que me passou, de várias formas diferentes,
e por incrível que pareça, continua dando o mesmo erro. O PciBack
está funcionando, pois como falei anteriormente, com a placa de vídeo
funciona corretamente. Bom, mesmo assim vou lhe repassar os resultados
do testes, pra caso queira dar uma analizada.

Teste 0:

#lspci

Obs: Continua trazendo normalmente a placa, mas lí em alguns fóruns
que é assim mesmo, ela aparece no lscpi mas o pciback não deixa a Dom0
Utilizá-la.

#dmesg | grep pciback

pciback 0000:03:02.0: probing...
pciback 0000:03:02.0: seizing device
pciback 0000:03:02.0: pcistub_device_alloc
pciback 0000:03:02.0: deferring initialization
pciback: pcistub_init_devices_late
pciback 0000:03:02.0: initializing...
pciback 0000:03:02.0: initializing config
pciback 0000:03:02.0: initializing virtual configuration space
pciback 0000:03:02.0: added config field at offset 0x04
pciback 0000:03:02.0: added config field at offset 0x3c
pciback 0000:03:02.0: added config field at offset 0x3d
pciback 0000:03:02.0: added config field at offset 0x0c
pciback 0000:03:02.0: added config field at offset 0x0d
pciback 0000:03:02.0: added config field at offset 0x0f
pciback 0000:03:02.0: added config field at offset 0x10
pciback 0000:03:02.0: added config field at offset 0x14
pciback 0000:03:02.0: added config field at offset 0x18
pciback 0000:03:02.0: added config field at offset 0x1c
pciback 0000:03:02.0: added config field at offset 0x20
pciback 0000:03:02.0: added config field at offset 0x24
pciback 0000:03:02.0: added config field at offset 0x30
pciback 0000:03:02.0: Found capability 0x1 at 0x50
pciback 0000:03:02.0: added config field at offset 0x50
pciback 0000:03:02.0: added config field at offset 0x52
pciback 0000:03:02.0: added config field at offset 0x54
pciback 0000:03:02.0: added config field at offset 0x56
pciback 0000:03:02.0: added config field at offset 0x57
pciback 0000:03:02.0: enabling device
pciback 0000:03:02.0: reset device

# ls /sys/bus/pci/drivers/pciback

lrwxrwxrwx 1 root root 0 Nov 16 08:56 0000:03:02.0 -
> ../../../../devices/pci0000:00/0000:00:1e.0/0000:03:02.0
--w------- 1 root root 4,0K Nov 16 08:56 bind
--w------- 1 root root 4,0K Nov 16 08:56 new_id
--w------- 1 root root 4,0K Nov 16 08:56 new_slot
-rw------- 1 root root 4,0K Nov 16 08:56 permissive
-rw------- 1 root root 4,0K Nov 16 08:56 quirks
--w------- 1 root root 4,0K Nov 16 08:56 remove_slot
-r-------- 1 root root 4,0K Nov 16 08:56 slots
--w------- 1 root root 4,0K Nov 16 08:56 unbind


Teste 1:
Retorna:
"Error: pci: 0000:03:02.0: non-page-aligned MMIO BAR found."

Teste 1 junto com testes 2:
Retorna:
"Error: pci: 0000:03:02.0: non-page-aligned MMIO BAR found."


Teste 2:
Retorna:
"Error: pci: 0000:03:02.0: non-page-aligned MMIO BAR found."


Teste 3:
Retorna:
"Error: pci: improper device assignment specified: pci: 0000:03:02.0
must be co-assigned to the same guest with 0000:03:02.0, but it is
not owned by pciback."

Teste 3 (guestdev=(03:02.0) e pciback.hide=(03:02.0) no parâmetro de
Boot).
Retorna:
Reply all
Reply to author
Forward
0 new messages