Los comandos de flujo testpmd de representación del conmutador DPDK no funcionan
Mi pregunta está relacionada con una pregunta que hice anteriormente. Reenviar paquetes entre NIC de función virtual (VF) SR-IOV Básicamente, lo que quiero hacer es usar 4 funciones SR-IOV de Intel 82599ES y dirigir el tráfico entre VF según sea necesario. La configuración es algo como esto (no importa el X710, ahora uso 82599ES)

En aras de la simplicidad en las pruebas, solo estoy usando una máquina virtual que ejecuta warp17 para generar tráfico, enviarlo a través de VF1 y recibirlo de VF3. Dado que las nuevas versiones de dpdk tienen una función de conmutación como se describe enhttps://doc.dpdk.org/guides-18.11/prog_guide/switch_representation.html?highlight=switch, Estoy intentando usar 'testpmd' para configurar la conmutación. Pero parece ser que la prueba pmd no funciona con ningún comando de flujo que ingrese. Todo lo que obtengo es "Mal argumento". Por ejemplo, no funciona con este comando,
flow create 1 ingress pattern / end actions port_id id 3 / end
Mi procedimiento es así,
Vincular mi PF (82599ES) con el controlador igb_uio
Cree 4 VF usando el siguiente comando,
echo "4" | sudo tee /sys/bus/pci/devices/0000:65:00.0/max_vfs
Vincular 2 VF al controlador vfio_pci usando,
echo "8086 10ed" | sudo tee / sys / bus / pci / drivers / vfio-pci / new_id sudo ./usertools/dpdk-devbind.py -b vfio-pci 0000: 65: 10.0 0000: 65: 10.2
Utilice PCI passthough para vincular VF a VM e iniciar la VM
sudo qemu-system-x86_64 -enable-kvm -cpu host -smp 4 -hda WARP17-disk1.qcow2 -m 6144 \
-display vnc =: 0 -redir tcp: 2222 :: 22
-net nic, modelo = e1000 -net usuario, nombre = mynet0
-device pci-assign, romfile =, host = 0000: 65: 10.0
-device pci-assign, romfile =, host = 0000: 65: 10.2Ejecute testpmd con PF y representadores de 2 puertos de VF
sudo ./testpmd --lcores 1,2 -n 4 -w 65: 00.0, representor = 0-1 --socket-mem 1024 --socket-mem 1024 - proc-type auto --file-prefix testpmd-pf - -i --port-topology = encadenado
¿Estoy haciendo algo mal o esta es la naturaleza de testpmd? Mi versión de dpdk es 18.11.9
Respuestas
tenga en cuenta que 82599ES usa ixgbe
y X710 usa i40e
PMD. Ambos son diferentes y tienen propiedades diferentes. Según la documentación que compara ixgbe PMD (http://doc.dpdk.org/guides/nics/ixgbe.html) y i40e PMD (http://doc.dpdk.org/guides/nics/i40e.html) la funcionalidad del director de flujo que es para los paquetes de entrada (paquetes recibidos desde el puerto externo en ASIC). La función Floating VEB
es la característica que necesita utilizar. Pero esto solo está presente en X710
y no en 82599ES
.
Para habilitar VEB, se necesita usar -w 84:00.0,enable_floating_veb=1
en X710. Pero esto limita su funcionalidad que no podrá recibir ni enviar en un puerto físico.
la mejor opción es usar 2 * 10Gbps
, donde se usa dpdk-0 wrap7/pktgen/trex
y dpdk-1 es usado por vm-1/vm-2/vm-3
. el parámetro más sencillo es controlar la coincidencia de la dirección MAC de DST con VF.
preparar:
- crear vf necesario para el puerto 0 y el puerto 1
- comparta el VF con la VM correspondiente.
- enlazar puertos dpdk vf a igb_uio.
- desde el puerto 0 del generador de tráfico en la dirección mac relevante de VF.
[PS] esta es la información que hemos discutido por skype.