OVS DPDK物理端口配置

netdev數據路徑允許關聯DPDK支持的物理端口,以便爲主機提供高性能的入口/出口流量。

一、快速示例

此示例演示如何綁定兩個dpdk端口到一個已有的網橋br0上,綁定的物理端口由硬件ID標識,分別爲:0000:01:00.00000:01:00.1

$ ovs-vsctl add-port br0 dpdk-p0 \
   -- set Interface dpdk-p0 type=dpdk options:dpdk-devargs=0000:01:00.0
$ ovs-vsctl add-port br0 dpdk-p1 \
   -- set Interface dpdk-p1 type=dpdk options:dpdk-devargs=0000:01:00.1

爲了使上述示例工作,必須將兩個物理接口綁定到用戶空間中的DPDK輪詢模式驅動程序,而不是傳統的內核驅動。有關詳細信息,請參閱下一節綁定NIC驅動內容。

二、綁定NIC驅動

DPDK完全在用戶空間中運行,因此需要使用自己位於用戶空間中的輪詢模式驅動程序,和用於內核空間中的直通設備驅動程序。

綁定驅動程序有兩種不同的工具:命令driverctl是一個通用工具,用於固定配置設備的替代驅動程序,以及命令dpdk-devbind這是一個特定於DPDK的工具,其綁定修改在設備重新啓動後丟失。此外,對於內核空間驅動程序,有兩個選項可供使用 - VFIO(VIrtual Function I/O)和 UIO(Userspace I/O)以及每個選項關聯的多個驅動程序。我們將演示以上工具的使用示例,以及更安全、可靠的vfio-pci驅動程序。有關詳細信息,請參見DPDK項目官方文檔。

使用drivectl工具列出可用設備,請運行:

$ driverctl -v list-devices | grep -i net
0000:07:00.0 igb (I350 Gigabit Network Connection (Ethernet Server Adapter I350-T2))
0000:07:00.1 igb (I350 Gigabit Network Connection (Ethernet Server Adapter I350-T2))

你可使用此工具爲一個或者多個設備綁定驅動程序:

$ driverctl set-override 0000:07:00.0 vfio-pci

另外, 使用dpdk-devbind工具列出可用設備, 運行以下命令:

$ dpdk-devbind --status
Network devices using DPDK-compatible driver
============================================
<none>

Network devices using kernel driver
===================================
0000:07:00.0 'I350 Gigabit Network Connection 1521' if=enp7s0f0 drv=igb unused=igb_uio
0000:07:00.1 'I350 Gigabit Network Connection 1521' if=enp7s0f1 drv=igb unused=igb_uio

Other Network devices
=====================
...

同樣,使用dpdk-devbind工具爲一個或多個設備綁定驅動程序:

$ dpdk-devbind --bind=vfio-pci 0000:07:00.0

注意:
Open vSwitch 2.6.0增加了對DPDK 16.07的支持,此版本將之前的dpdk_nic_bind工具重命名爲dpdk-devbind。

更多信息,請參考DPDK官方文檔DPDK drivers.

三、多隊列

輪詢模式驅動程序(Poll Mode Driver, PMD)線程負責執行DPDK數據路徑的大部分處理工作。PMD線程和其使用的RX接收隊列的正確配置是必要的,以得到DPDK加速帶來的高性能。可以爲dpdk端口配置多個RX隊列,確保這不是性能的瓶頸。更多關於PMD線程配置信息,請參閱:doc:pmd

四、流控

只能在DPDK物理端口上啓用流控。在添加端口時於Tx發送端啓用流控,運行如下命令:

$ ovs-vsctl add-port br0 dpdk-p0 -- set Interface dpdk-p0 type=dpdk \
    options:dpdk-devargs=0000:01:00.0 options:tx-flow-ctrl=true

類似的,啓動Rx接收端流控, 運行如下命令:

$ ovs-vsctl add-port br0 dpdk-p0 -- set Interface dpdk-p0 type=dpdk \
    options:dpdk-devargs=0000:01:00.0 options:rx-flow-ctrl=true

使能流控自協商功能,運行如下命令:

$ ovs-vsctl add-port br0 dpdk-p0 -- set Interface dpdk-p0 type=dpdk \
    options:dpdk-devargs=0000:01:00.0 options:flow-ctrl-autoneg=true

在運行狀態下,爲已有端口啓用TX方向流控, 運行以下命令:

$ ovs-vsctl set Interface dpdk-p0 options:tx-flow-ctrl=true

流控參數的關閉可通過將false設置爲相應參數的值實現。要禁用Tx側的流量控制,請運行:

$ ovs-vsctl set Interface dpdk-p0 options:tx-flow-ctrl=false

五、接收校驗卸載

默認情況下,DPDK物理端口開啓了接收校驗卸載功能。

RX校驗卸載只能爲OVS-DPDK中的隧道流量提供性能改進,因爲隧道數據包的校驗和驗證卸載到了NIC網卡上。同時啓用RX校驗卸載可能會稍微降低非隧道流量的性能,特別是對於較小的數據包。

六、熱插拔

OVS支持端口熱插拔,允許使用在ovs-vswitchd進程啓動時未綁定到DPDK驅動的物理端口。

警告:

此功能並不能與所有NIC兼容。參考廠商文件獲取更多信息。

重要:

端口必須綁定到DPDK。

要hotplug 端口, 僅需向其它端口一樣添加它:

$ ovs-vsctl add-port br0 dpdkx -- set Interface dpdkx type=dpdk \
    options:dpdk-devargs=0000:01:00.0

可使用del-port命令分離端口:

$ ovs-vsctl del-port dpdkx

這將同時刪除端口並分離設備。如果成功,你應該看到如下的INFO日誌。例如:

INFO|Device '0000:04:00.1' has been detached

如果以上的日誌未顯示,使用如下命令分離端口:

$ ovs-appctl netdev-dpdk/detach 0000:01:00.0

警告:

如果設備是不可分離的,則不應進行分離,這可能會導致設備在使用add-port命令添加回來時表現異常。一個例子就是使用cxgbe驅動程序的Chelsio Terminator適配器;如果不確定檢查驅動程序文檔。

原文鏈接:https://blog.csdn.net/sinat_20184565/article/details/93525962

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章