DPDK Sample Applications User Guides(35)Vhost示例應用程序

官方文檔查看地址:
http://doc.dpdk.org/guides/sample_app_ug/vhost.html
PDF下載地址:
https://www.intel.com/content/www/us/en/embedded/technology/packet-processing/dpdk/dpdk-sample-applications-user-guide.html

本篇難度係數:
翻譯:☆☆☆☆☆
理解:★★☆☆☆

35.Vhost示例應用程序
vhost示例應用程序通過實現vhost-net offload API演示了數據平面開發工具包(DPDK)與Linux* KVM管理程序的集成。示例應用程序基於媒體訪問控制(MAC)地址或虛擬局域網(VLAN)標記在虛擬機之間執行簡單的分組交換。通過Intel®82599 10千兆以太網控制器的虛擬機設備隊列(VMDQ)和數據中心橋接(DCB)功能,可以在硬件中實現以太網流量與外部交換機的分離。

35.1測試步驟
本節展示瞭如何使用這個vhost-switch示例測試典型的PVP情況,而數據包首先從物理NIC端口接收,然後排隊到VM的Rx隊列。通過guest testpmd的默認轉發模式(io forward),這些包將被放入Tx隊列。然後,vhost-switch示例獲取數據包並將其放回相同的物理NIC端口。

35.1.1。構建
要編譯示例應用程序,請參見 Compiling the Sample Applications http://doc.dpdk.org/guides/sample_app_ug/compiling.html。

應用程序位於vhost子目錄中。

請注意
在本例中,您需要在主機內部guest上構建DPDK。

35.1.2啓動vswitch示例

./vhost-switch -l 0-3 -n 4 --socket-mem 1024  \
 -- --socket-file /tmp/sock0 --client \
 ...

檢查Parameters部分,瞭解這些參數的含義。

35.1.3啓動虛擬機

qemu-system-x86_64 -machine accel=kvm -cpu host \
    -m $mem -object memory-backend-file,id=mem,size=$mem,mem-path=/dev/hugepages,share=on \
            -mem-prealloc -numa node,memdev=mem \
    \
    -chardev socket,id=char1,path=/tmp/sock0,server \
    -netdev type=vhost-user,id=hostnet1,chardev=char1  \
    -device virtio-net-pci,netdev=hostnet1,id=net1,mac=52:54:00:00:00:14 \
    ...

請注意
對於基本的vhost-user支持,需要QEMU 2.2(或更高)。對於某些特定功能,可能需要更高的版本。例如QEMU 2.7(或以上)用於重新連接功能。

35.1.4在guest內部運行testpmd
確保在客戶端內部構建了DPDK。還要確保相應的virtio-net PCI設備與uio驅動程序綁定,可以通過:

modprobe uio_pci_generic
$RTE_SDK/usertools/dpdk-devbind.py -b uio_pci_generic 0000:00:04.0

然後啓動testpmd進行包轉發測試。

./x86_64-native-gcc/app/testpmd -l 0-1 -- -i
> start tx_first

35.2注射包
當一個virtio-net連接到vhost-switch時,一個從1000開始的VLAN標記被分配給它。因此,請確保使用正確的MAC和VLAN標記配置包生成器,您應該能夠從vhost-switch控制檯看到以下日誌。這意味着你得到了工作:

VHOST_DATA: (0) mac 52:54:00:00:00:14 and vlan 1000 registered

35.3參數
–socket-file path指定vhost-user套接字文件路徑。
-client DPDK vhost-user將在提供該選項時作爲client模式。在客戶端模式下,QEMU將創建套接字文件。否則,DPDK將創建它。簡單地說,它是創建套接字文件的服務器。
–vm2vm modevm2vm參數設置主機中客戶機之間數據包交換的模式。

  • 0禁用vm2vm,這意味着VM的包總是去NIC端口。
  • 1表示正常的mac查找包路由。
  • 2是指硬件模式的數據包在客戶端之間轉發,它允許數據包到達NIC端口,硬件L2交換機根據數據包的目的MAC地址和VLAN標籤來決定數據包應該轉發給哪個客戶端或者需要發送給外部客戶端。

–mergeable 0|10/1禁用/啓用可合併Rx功能。默認情況下是禁用的。
–stats intervalstats參數控制virtio-net設備統計信息的打印。參數指定一個間隔(以秒爲單位)來打印統計信息,間隔爲0秒禁用統計信息。
–rx-retry 0|1當guest Rx隊列已滿時,Rx重試選項啓用/禁用排隊重試。該特性允許數據包延遲並在接收路徑中重試,從而解決了在高數據速率下觀察到的數據包丟失問題。默認情況下啓用此選項。
–rx-retry-num numRx -retry-num選項指定Rx突發事件上的重試次數,僅當啓用Rx重試時才生效。默認值是4。
–rx-retry-delay msecRX -retry-delay選項指定RX突發事件重試之間的超時(以微秒爲單位),只有在啓用RX重試時纔會生效。默認值是15。
–dequeue-zero-copy當提供此選項時,將啓用Dequeue zero copy。值得注意的是,如果將NIC綁定到啓用了iommu的驅動程序,dequeue zero copy將不能在VM2NIC模式下工作(vm2vm=0),因爲目前我們沒有爲客戶內存設置iommu dma映射。
–vlan-strip 0|1移除VLAN strip選項,因爲不同的nic在禁用VLAN strip時具有不同的行爲。這種嚴重依賴於硬件的特性應該從本例中刪除,以減少混淆。現在,VLAN條帶已啓用,不能禁用。
–builtin-net-driver 當提供此選項時,將使用一個非常簡單的vhost-user網絡驅動程序,它演示瞭如何使用通用的vhost api。默認情況下是禁用的。

35.4常見問題

  • QEMU無法在hugetlbfs上分配內存,錯誤如下:
file_ram_alloc: can't mmap RAM pages: Cannot allocate memory

運行QEMU時,上面的錯誤表明它未能在hugetlbfs上爲虛擬機分配內存。這通常是由於沒有足夠的大頁可用來支持分配請求。免費hugepages的數量可以檢查如下:

cat /sys/kernel/mm/hugepages/hugepages-<pagesize>/nr_hugepages

上面的命令指示有多少hugepage可以自由地支持QEMU的分配請求。

  • 在VM中構建DPDK失敗
    確保提供了“-cpu host”QEMU選項。

  • 如果NIC的最大隊列>是默認的128,則設備啓動失敗

mbuf池大小取決於MAX_QUEUES配置,如果NIC的最大隊列號大於128,設備啓動將由於mbuf不足而失敗。

更改默認數字使其工作如下,只需根據NIC的屬性設置該數字。

make EXTRA_CFLAGS="-DMAX_QUEUES=320"
  • 選項“builtin-net-driver”與QEMU不兼容
    如果不協商協議特性,QEMU vhost網絡設備啓動將失敗。DPDK virtio-user pmd可以替代QEMU。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章