Estou tentando executar uma VM KVM/QEMU no RHEL9 que usa uma placa Infiniband (VF) virtualizada por meio de SR-IOV de um pool de VFs. Posso especificar um dispositivo PCI de VF específico com hostdev e isso funciona muito bem, no entanto, isso requer codificação rígida do barramento/slot/etc. PCI na planilha XML da VM. Isso seria um problema ao migrar a VM para outro servidor. Então, prefiro definir um pool de rede de VFs conforme descrito neste documento do RH que atribuiria uma VF livre a uma VM recém-iniciada automaticamente.
Fiz tudo conforme descrito nos documentos e o pool de rede de 8 VFs de uma única placa IB funciona como deveria:
# virsh net-dumpxml IB-passthrough
<network>
<name>IB-passthrough</name>
<uuid>8dce28fa-97ea-43d4-a82b-5923fa1a2a4f</uuid>
<forward mode='hostdev' managed='yes'>
<address type='pci' domain='0x0000' bus='0xc1' slot='0x00' function='0x1'/>
<address type='pci' domain='0x0000' bus='0xc1' slot='0x00' function='0x2'/>
<address type='pci' domain='0x0000' bus='0xc1' slot='0x00' function='0x3'/>
<address type='pci' domain='0x0000' bus='0xc1' slot='0x00' function='0x4'/>
<address type='pci' domain='0x0000' bus='0xc1' slot='0x00' function='0x5'/>
<address type='pci' domain='0x0000' bus='0xc1' slot='0x00' function='0x6'/>
<address type='pci' domain='0x0000' bus='0xc1' slot='0x00' function='0x7'/>
<address type='pci' domain='0x0000' bus='0xc1' slot='0x01' function='0x0'/>
</forward>
</network>
Escrevo a seguinte entrada no XML da VM:
<interface type='network'>
<source network='IB-passthrough'/>
</interface>
Mas depois de fechar o editor XML, a entrada é automaticamente estendida com entradas mac
e :address
<interface type='network'>
<mac address='52:54:00:44:db:0d'/>
<source network='IB-passthrough'/>
<address type='pci' domain='0x0000' bus='0x07' slot='0x00' function='0x0'/>
</interface>
Então a VM não pode ser iniciada porque o MAC não pode ser definido:
# virsh start rhel9.2-testvm
error: Failed to start domain 'rhel9.2-testvm'
error: Cannot set interface MAC to 52:54:00:05:72:5c for ifname ibp193s0 vf 0: Operation not supported
Existe uma maneira de omitir esse MAC automático? Ou a mudança do Interface MAC? Ou há outro problema que estou esquecendo?
Encontrei o mesmo erro ao executar o cmd:
virsh attach-interface vm1 hostdev 0000:81:00.2 --gerenciado --persistente
erro: Falha ao anexar interface erro: Não é possível definir o MAC da interface para 52:54:00:6f:a1:89 para ifname ibp129s0f0 vf 1: Operação não suportada
Este pool de rede de interface parece não funcionar para placas IB (InfiniBand), ele só funciona para placas ethernet, porque definir um MAC para uma placa IB falhará. Só não é possível definir nó, política e porta.
$ ls /sys/class/net/ibp129s0f0/device/sriov/0/ política de nó porta
Finalmente consegui adicionar o dispositivo VF via cmd:
virt-xml vm1 --add-device --update --hostdev 0000:81:00.2
Você precisa tratar a placa IB (InfiniBand) como um dispositivo PCI normal, não como uma interface Ethernet.
Consulte: https://docs.nvidia.com/networking/display/mlnxofedv24101140lts/single+root+io+virtualization+(sr-iov) https://enterprise-support.nvidia.com/s/article/HowTo-Configure-SR-IOV-for-ConnectX-4-ConnectX-5-ConnectX-6-with-KVM-Ethernet https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/configuring_and_managing_virtualization/managing-virtual-devices_configuring-and-managing-virtualization#assembly_managing-virtual-devices-using-the-cli_managing-virtual-devices https://manpages.ubuntu.com/manpages/xenial/man1/virt-xml.1.html