
Eine ähnliche Frage wurde bereits zuvor auf dieser Site gestellt [1], aber sie scheint keine praktische Antwort auf mein Problem zu geben. Daher habe ich beschlossen, dieselbe Frage für meine Umgebung zu stellen.
Ich verwende einen Linode Ubuntu-Server mit einer einzelnen Netzwerkkarte und habe gestern versucht, DPDK zu initiieren. Dabei wurde der Kernel-Treiber installiert und die Netzwerkkarte verbunden, dann wurde meine Verbindung zu SSH unterbrochen. Seitdem konnte ich keine Verbindung mehr herstellen, und nachdem ich den Server neu gestartet hatte, konnte ich wieder auf den Server zugreifen.
Mein Netzwerkgerät, wie es in der DPDK-Statusausgabe angezeigt wird,
dpdk-devbind -s
Network devices using kernel driver
===================================
0000:00:04.0 'Virtio network device 1000' if=eth0 drv=virtio-pci unused=vfio-pci *Active*
[1]DPDK an eine Netzwerkkarte binden, ohne die Verbindung zu verlieren
Antwort1
Da eth0
dies die standardmäßige und einzige Schnittstelle ist, wird das aktuelle SSH über den Kernel darüber ausgeführt. Wenn Sie daher die Schnittstelle aus dem Kernel entfernen und an DPDk binden, führt dies zu einem Verbindungsverlust.
Wie in der Antwort erwähnt, https://superuser.com/questions/1204835/binding-dpdk-to-a-nic-without-loosing-connection/1546752#1546752
gibt es eine Option
- Erstellen Sie eine virtuelle TAP-Schnittstelle innerhalb der VM
- Erstellen Sie eBPF-XDP-Code, der gewünschte Pakete über XDP-REDIRECT an die TAP-Schnittstelle umleitet, während der Rest des Paketkernels XDP-PASS ist.
- Verwenden von PCAP-PMD und eal-arg
--vdev=net_pcap0,iface=[virtual tap interface]
Eine andere Möglichkeit besteht darin,
- Starten Sie die DPDK-Anwendung mit
--vdev=net_tap0,iface=[DPDK tap interface name]
- Laden Sie dann eBPF-XDP, das das gewünschte Paket an die DPDK-TAP-Schnittstelle umleitet.
Somit kann der von Virtio kommende Datenverkehr genutzt werden, ohne die Verbindung zu verlieren.
Hinweis: Der Kernel sollte erstellt werden und eBPF-XDP für Virtio unterstützen.
[BEARBEITEN-1]
- Referenzcode:
https://github.com/vipinpv85/DPDK-DDoS/blob/master/test/ebpf/l2_port_fwd.c
Je nach Bedarf ändern. - So erstellen Sie: `https://github.com/vipinpv85/DPDK-DDoS/blob/master/README.md``