Cree un entorno de desarrollo DPDK en la máquina virtual Ubuntu22.04

Entorno del sistema

Sistema operativo: Win10

Software de máquina virtual: VMware Workstation 16

Sistema de máquina virtual: Ubuntu22.04, número de CPU 8, memoria 4 G, número de tarjetas de red 4

Versión de DPDK para instalar: 22.07

Compilar e instalar DPDK

Primero instale algunos paquetes dependientes:

apt-get install meson
apt install python3-pyelftools
apt-get install pkg-config

Luego compila e instala DPDK:

wget https://fast.dpdk.org/rel/dpdk-22.07.tar.xz
tar xf dpdk-22.07.tar.xz
cd dpdk-22.07
meson  build
cd build
ninja
ninja install

Después de ejecutar , todas las bibliotecas se instalarán en el directorio /usr/local/lib/x86_64-linux-gnu/.

Los programas ejecutables y scripts se instalan en el directorio /usr/local/bin/.

Para desinstalar, simplemente ejecute ninja uninstall.

Compilación y confección

Al compilar de forma predeterminada, se compilarán controladores innecesarios de forma predeterminada, lo que hará que la compilación sea muy lenta. Como estamos en una máquina virtual, no se necesitan muchos controladores, por lo que podemos recortarlos. Específicamente, antes de ejecutar meson build,

  • Modifique el archivo drivers/meson.build y mantenga solo 'bus', 'mempool' y 'net' en los subdirectorios.

  • Modificar el archivo drivers/bus/meson.build, mantener solo 'pci' y 'vdev' en los controladores.

  • Modificar drivers/mempool/meson.build archivo, mantener solo 'anillo' y 'apilar' en los controladores.

  • Modifique el archivo drivers/net/meson.build y mantenga solo 'e1000' en los controladores [porque la tarjeta de red de la máquina virtual usa el controlador e1000].

Luego ejecuta meson build y verás la siguiente información:

Message: 
===============
Drivers Enabled
===============

bus:
        pci, vdev, 
mempool:
        ring, stack, 
net:
        e1000, 

La compilación es muy rápida después de eso.

Compilar el controlador igb uio

git clone http://dpdk.org/git/dpdk-kmods
cd dpdk-kmods/linux/igb_uio
make

Compile igb_uio.ko.

Verifique que el entorno esté bien

Para verificar que nuestro entorno esté bien, primero compilamos el programa l2fwd:

cd examples/l2fwd
make

Luego cargue el controlador igb_uio:

cd dpdk-kmods/linux/igb_uio
modprobe uio
insmod igb_uio.ko intr_mode=legacy

Nota: Debe traer parámetros al cargar el controladorintr_mode=legacy. Si no agrega parámetros, ¡habrá problemas!

Asigne algo de memoria de página grande [1G aquí]:

echo 512 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

Vincule dos tarjetas de red [la máquina virtual tiene 4 tarjetas de red, las dos últimas tarjetas de red las utiliza DPDK]:

ifconfig ens34 down
ifconfig ens35 down
dpdk-devbind.py -b igb_uio ens34 ens35

Ejecute el programa l2fwd:

cd examples/l2fwd/build/
./l2fwd -l 0-1 -- -p 0x3 -T 1

Si ve la siguiente información, significa que no hay ningún problema con el entorno DPDK.

EAL: Detected CPU lcores: 8
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
EAL: Probe PCI driver: net_e1000_em (8086:100f) device: 0000:02:02.0 (socket 0)
EAL: Error reading from file descriptor 20: Input/output error
EAL: Probe PCI driver: net_e1000_em (8086:100f) device: 0000:02:03.0 (socket 0)
EAL: Error reading from file descriptor 6: Input/output error
TELEMETRY: No legacy callbacks, legacy socket not created
MAC updating enabled
Lcore 0: RX port 0 TX port 1
Lcore 1: RX port 1 TX port 0
Initializing port 0... EAL: Error enabling interrupts for fd 20 (Input/output error)
done: 
Port 0, MAC address: 00:0C:29:0C:53:91

Initializing port 1... EAL: Error enabling interrupts for fd 6 (Input/output error)
done: 
Port 1, MAC address: 00:0C:29:0C:53:9B


Checking link statusdone
Port 0 Link up at 1 Gbps FDX Autoneg
Port 1 Link up at 1 Gbps FDX Autoneg
L2FWD: entering main loop on lcore 1
L2FWD:  -- lcoreid=1 portid=1
L2FWD: entering main loop on lcore 0
L2FWD:  -- lcoreid=0 portid=0

Port statistics ====================================
Statistics for port 0 ------------------------------
Packets sent:                        0
Packets received:                    0
Packets dropped:                     0
Statistics for port 1 ------------------------------
Packets sent:                        0
Packets received:                    0
Packets dropped:                     0
Aggregate statistics ===============================
Total packets sent:                  0
Total packets received:              0
Total packets dropped:               0
====================================================
^C

Signal 2 received, preparing to exit...
EAL: Error disabling interrupts for fd 20 (Input/output error)
Closing port 0... Done
EAL: Error disabling interrupts for fd 6 (Input/output error)
Closing port 1... Done
Bye...

Errores como EAL: Error al habilitar interrupciones para fd 20 (error de entrada/salida) se pueden ignorar.

Desvincular la tarjeta de red

Después de que DPDK ocupa las dos tarjetas de red ens34 y ens35, no están disponibles en ifconfig. Para restaurarlas, realice las siguientes operaciones.

Primero verifique los números de dispositivo PCI de las dos tarjetas de red:

root@ubuntu2204:~# lspci | grep Eth
02:00.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
02:01.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
02:02.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
02:03.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)

Puede ver que los dos últimos números de dispositivo de la tarjeta de red son 02:02.0 y 02.03.0.

Luego desvincule los controladores igb_uio de las dos tarjetas de red y vincule el controlador e1000:

dpdk-devbind.py -u 02:02.0 02:03.0
dpdk-devbind.py -b e1000  02:02.0 02:03.0

Finalmente, abra la tarjeta de red:

ifconfig ens34 up
ifconfig ens35 up

Supongo que te gusta

Origin blog.csdn.net/woay2008/article/details/126899996
Recomendado
Clasificación