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?
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...
> 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?
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.
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"
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.
> 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:
> #-------------------------------------------------------------------------- --
> # 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.
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.
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.
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 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-ia64-de...@lists.xensource.com/msg09910.html
> 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.
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 -
--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:
"Error: pci: 0000:03:02.0: non-page-aligned MMIO BAR found."