1

私のアプリケーションは、NFS クライアントから NFS サーバー (ユーザー空間 NFS サーバー - NFS Ganesha) にデータを受信し、サーバーでパケットが受信されると、アプリケーションはパケットの処理を開始して送信します。

私はDPDKを初めて使用し、その機能を分析して、カーネル/ユーザー空間との間のデータコピーを回避することでパフォーマンスを加速するために、アプリケーションを理解して適応させています。

KNI が便利であることがわかり、KNI サンプル アプリケーションを開始した後、次の出力が表示されました。また、新しいインターフェイス vEth0_0 と vEth1_0 も確認できます。しかし、IP を割り当てた後、これらのインターフェイスに対して ping 操作を実行することさえできません。

$$ ./examples/kni/build/kni -n 4 -c 0xf0 -- -P -p 0x3 --config="(0,4,6,8),(1,5,7,9)"

*Checking link status
.done
Port 0 Link Up - speed 10000 Mbps - full-duplex
Port 1 Link Up - speed 10000 Mbps - full-duplex
APP: Lcore 5 is reading from port 1
APP: Lcore 6 is writing to port 0
APP: Lcore 7 is writing to port 1
APP: Lcore 4 is reading from port 0
APP: Configure network interface of 0 up
PMD: ixgbe_set_rx_function(): Vector rx enabled, please make sure RX burst size no less than 32.
APP: Configure network interface of 1 up
PMD: ixgbe_set_rx_function(): Vector rx enabled, please make sure RX burst size no less than 32.*

私の質問は、DPDK での KNI サンプル アプリケーションの期待される出力は何ですか? また、アプリケーションにどのように使用できますか? (複数のカーネル/ユーザー空間のコピーを回避できるように、vEth0_0 インターフェイスで操作を実行できますか)

更新: 上記の問題は、正しい GRUB オプションをiommu=pt、intel_iommu=onとして設定することにより、ホスト マシンで解決されました。

質問 2: VM 内で KNI を使用する方法を教えてください。VM 内の KNI 起動に問題があります。

KNI: /dev/kni opened
KNI: Creating kni...
KNI: tx_phys:      0x000000017a6af140, tx_q addr:      0xffff88017a6af140
KNI: rx_phys:      0x000000017a6b1180, rx_q addr:      0xffff88017a6b1180
KNI: alloc_phys:   0x000000017a6b31c0, alloc_q addr:   0xffff88017a6b31c0
KNI: free_phys:    0x000000017a6b5200, free_q addr:    0xffff88017a6b5200
KNI: req_phys:     0x000000017a6b7240, req_q addr:     0xffff88017a6b7240
KNI: resp_phys:    0x000000017a6b9280, resp_q addr:    0xffff88017a6b9280
KNI: mbuf_phys:    0x0000000187c00000, mbuf_kva:       0xffff880187c00000
KNI: mbuf_va:      0x00002aaa32800000
KNI: mbuf_size:    2048
KNI: pci_bus: 00:03:00
KNI: Error: Device not supported by ethtool
4

1 に答える 1