
このサイト[1]で以前にも同様の質問がありましたが、私の問題に対する実用的な回答は何もないようでした。そのため、自分の環境について同じ質問をすることにしました。
私は単一の NIC を備えた Linode Ubuntu Server を使用しており、昨日 DPDK を初期化しようとしましたが、カーネル ドライバーがインストールされ、NIC が結合され、SSH から切断されました。それ以降、再接続できなくなり、サーバーを再起動したら、再びサーバーに接続できました。
DPDKステータス出力からわかる私のネットワークデバイスは、
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
はデフォルトかつ唯一のインターフェースであるためeth0
、現在の ssh はカーネル経由で同じインターフェース上で実行されています。したがって、カーネルからインターフェースを削除して DPDk にバインドすると、接続が失われます。
回答で指摘されているように、https://superuser.com/questions/1204835/binding-dpdk-to-a-nic-without-loosing-connection/1546752#1546752
利用可能なオプションがあります
- VM内に仮想TAPインターフェースを作成する
- 必要なパケットをXDP-REDIRECT経由でTAPインターフェースにリダイレクトするeBPF-XDPコードを作成し、残りのパケットカーネルはXDP-PASS
- PCAP-PMDとeal-argの使用
--vdev=net_pcap0,iface=[virtual tap interface]
他の選択肢は
- DPDKアプリケーションを起動します
--vdev=net_tap0,iface=[DPDK tap interface name]
- 次に、目的のパケットを DPDK-TAP インターフェイスにリダイレクトする eBPF-XDP をロードします。
したがって、接続を失うことなく、virtio からのトラフィックを利用することができます。
注意: カーネルはビルドされ、virtio の eBPF-XDP をサポートする必要があります。
[編集-1]
- 参照コード:
https://github.com/vipinpv85/DPDK-DDoS/blob/master/test/ebpf/l2_port_fwd.c
必要に応じて変更します。 - ビルド方法: `https://github.com/vipinpv85/DPDK-DDoS/blob/master/README.md``