目錄
參考文獻
https://networkbuilders.intel.com/docs/open-vswitch-enables-sdn-and-nfv-transformation-paper.pdf
OvS 架構
openvswitch.ko :在內核態負責 “快速路徑” 的數據轉發。轉發靠流表來完成,每一個流表都包含很多的匹配項(match fields)和相應的動作(actions)。
- match fields:定義了能夠標識一個數據包的頭部字段。
- actions:定義了能夠對這個數據包操作的動作,比如:添加或去除 VLAN 標籤、修改數據包的某個頭部字段,以及控制數據包從端口的進出等等。
ovs-vswitchd:在用戶態負責 “慢速路徑” 的數據轉發。
- ofproto:OpenFlow 交換機實現。
- netdev:和網絡設備(包括物理的和虛擬的)交互的抽象接口層。
- dpif:用戶空間數據轉發路徑的實現。
OvS-DPDK 架構
上圖中的深色模塊就是引入 DPDK 的相關模塊。
- ofproto-dpif:實現了 ofproto 模塊 API,直接操作 dpif 層。
- dpif-netdev:用戶空間中 “快速路徑” 的實現,它實現了 dpif 模塊 API,可以直接操作 netdev 設備,能夠實現數據包在用戶空間的快速處理,減少和內核空間的切換開銷。
- netdev-dpdk:應用 DPDK 庫實現了 netdev 模塊 API,提供了多種類型的接口,如下:
- Physical ports(PMD):使用 vfio 或者 igb_uio 實現的端口。
- vHost(dpdkvhostuser and dpdkvhostcuse):使用 librte_vhost 庫實現的端口,用戶可以基於這兩種端口類型創建 vhost-user 和 vhost-cuse 端口來完成用戶空間的數據轉發,並且能夠實現和 VM 的快速通信,只要提供 virtio 後端驅動 vhost 即可,virtio/vhost 被證實是用於 VM 通信的一套快速、安全、標準的接口。
- dpdkr:使用 librte_ring 實現,用戶可以基於這種端口類型創建 dpdk-ring 端口來完成用戶空間的數據轉發,它能夠實現和 VM 之間快速的零拷貝通信(使用 IVSHMEM 或者其他進程間通信方式)。
OvS-DPDK 在 VNF 中的應用
- DPDK 在宿主機中提供 OvS 數據平面,同時在 VNF 中加速網元應用。這種方案由於採用純軟件的形式實現,可編程靈活,DPDK 的參與也使得性能大大提高,基本可以媲美純硬件的形式。
- SR-IOV pNIC 直接將 VF 直通到 VNF 中,然後在 VNF 中使用 DPDK 進行加速。