Erstellen Sie eine DPDK-Entwicklungsumgebung in der virtuellen Maschine Ubuntu22.04

Systemumgebung

Betriebssystem: Win10

Software für virtuelle Maschinen: VMware Workstation 16

Virtuelles Maschinensystem: Ubuntu22.04, Anzahl der CPUs 8, Speicher 4 G, Anzahl der Netzwerkkarten 4

Zu installierende DPDK-Version: 22.07

Kompilieren und installieren Sie DPDK

Installieren Sie zunächst einige abhängige Pakete:

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

Dann kompilieren und installieren Sie 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

Nachdem ausgeführt wurde, werden alle Bibliotheken im Verzeichnis /usr/local/lib/x86_64-linux-gnu/ installiert.

Ausführbare Programme und Skripte werden im Verzeichnis /usr/local/bin/ installiert.

Zum Deinstallieren führen Sie einfach ninja uninstall aus.

Zusammenstellung und Schneiderei

Beim Standardkompilieren werden unnötige Treiber standardmäßig kompiliert, was dazu führt, dass die Kompilierung sehr langsam ist. Da wir uns in einer virtuellen Maschine befinden, werden viele Treiber nicht benötigt, sodass wir sie kürzen können. Insbesondere vor der Ausführung des Meson-Builds:

  • Ändern Sie die Datei drivers/meson.build und behalten Sie nur „bus“, „mempool“ und „net“ in Unterverzeichnissen bei.

  • Datei drivers/bus/meson.build ändern, nur „pci“ und „vdev“ in den Treibern beibehalten.

  • Ändern Sie die Datei drivers/mempool/meson.build, behalten Sie in den Treibern nur „Ring“ und „Stack“ bei.

  • Ändern Sie die Datei drivers/net/meson.build und behalten Sie nur „e1000“ in den Treibern bei [da die Netzwerkkarte der virtuellen Maschine den e1000-Treiber verwendet].

Dann führen Sie meson build aus und Sie sehen die folgenden Informationen:

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

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

Danach erfolgt die Kompilierung sehr schnell.

Kompilieren Sie den IGB-UIO-Treiber

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

Kompilieren Sie igb_uio.ko.

Stellen Sie sicher, dass die Umgebung in Ordnung ist

Um zu überprüfen, ob unsere Umgebung in Ordnung ist, kompilieren Sie zunächst das Programm l2fwd:

cd examples/l2fwd
make

Laden Sie dann den igb_uio-Treiber:

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

Hinweis: Sie müssen beim Laden des Treibers Parameter mitbringenintr_mode=legacy. Wenn Sie keine Parameter hinzufügen, treten Probleme auf!

Weisen Sie großen Seitenspeicher zu [1 GB hier]:

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

Binden Sie zwei Netzwerkkarten [die virtuelle Maschine verfügt über 4 Netzwerkkarten, die letzten beiden Netzwerkkarten werden von DPDK verwendet]:

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

Führen Sie das l2fwd-Programm aus:

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

Wenn Sie die folgenden Informationen sehen, bedeutet dies, dass kein Problem mit der DPDK-Umgebung vorliegt!

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...

Fehler wie EAL: Fehler beim Aktivieren der Interrupts für fd 20 (Eingabe-/Ausgabefehler) können ignoriert werden.

Lösen Sie die Bindung der Netzwerkkarte

Nachdem die beiden Netzwerkkarten ens34 und ens35 von DPDK belegt wurden, sind sie in ifconfig nicht verfügbar. Um sie wiederherzustellen, führen Sie bitte die folgenden Vorgänge aus.

Überprüfen Sie zunächst die PCI-Gerätenummern der beiden Netzwerkkarten:

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)

Sie können sehen, dass die letzten beiden Netzwerkkarten-Gerätenummern 02:02.0 und 02.03.0 sind.

Dann entbinden Sie die igb_uio-Treiber der beiden Netzwerkkarten und binden Sie den e1000-Treiber:

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

Rufen Sie abschließend die Netzwerkkarte auf:

ifconfig ens34 up
ifconfig ens35 up

おすすめ

転載: blog.csdn.net/woay2008/article/details/126899996