OVS DPDK
OVS在實現中分爲用戶空間和內核空間兩個部分。用戶空間擁有多個組件,它們主要負責實現數據交換和OpenFlow流表功能,還有一些工具用於虛擬交換機管理、數據庫搭建以及和內核組件的交互。內核組件主要負責流表查找的快速通道。OVS的核心組件及其關聯關係如圖
下圖顯示了OVS數據通路的內部模塊圖:
ovs-vswitchd主要包含ofproto、dpif、netdev模塊:
- ofproto模塊實現openflow的交換機;
- dpif模塊抽象一個單轉發路徑;
- netdev模塊抽象網絡接口(無論物理的還是虛擬的)。
openvswitch.ko主要由數據通路模塊組成,裏面包含着流表。流表中的每個表項由一些匹配字段和要做的動作組成。
DPDK加速的思想就是專注在這個數據通路上:
1、ovs with dpdk
組件介紹:
-
dpif-netdev:用戶態的快速通路,實現了基於netdev設備的dpif API。
-
Ofproto-dpif:實現了基於dpif層的ofproto API。
-
netdev-dpdk:實現了基於DPDK的netdev API,其定義的幾種網絡接口如下:
1)dpdk物理網口:其實現是採用高性能向量化DPDK PMD的驅動。
2)dpdkvhostuser與dpdkvhostcuse接口:支持兩種DPDK實現的vhost優化接口:vhost-user和vhost-cuse。vhost-user或vhost-cuse可以掛接到用戶態的數據通道上,與虛擬機的virtio網口快速通信。vhost-cuse是一個過渡性技術,vhost-user是建議使用的接口。爲了性能,在vhost burst收發包個數上,需要和dpdk物理網口設置的burst收發包個數相同。
3)dpdkr:其實現是基於DPDK librte_ring機制創建的DPDK ring接口。dpdkr接口掛接到用戶態的數據通道上,與使用了IVSHMEM的虛擬機合作可以通過零拷貝技術實現高速通信。
DPDK加速的OVS數據流轉發的大致流程如下:
- OVS的ovs-vswitchd接收到從OVS連接的某個網絡端口發來的數據包,從數據包中提取源/目的IP、源/目的MAC、端口等信息。
- OVS在用戶態查看精確流表和模糊流表,如果命中,則直接轉發。
- 如果還不命中,在SDN控制器接入的情況下,經過OpenFlow協議,通告給控制器,由控制器處理。
- 控制器下發新的流表,該數據包重新發起選路,匹配;報文轉發,結束。
DPDK加速的OVS與原始OVS的區別在於,從OVS連接的某個網絡端口接收到的報文不需要openvswitch.ko內核態的處理,報文通過DPDK PMD驅動直接到達用戶態ovs-vswitchd裏。