基于DPDK的Open vSwitch概述
作者簡介
Robin Giller ?
英特爾網絡平臺集團的項目經理
本文是關于基于DPDK(數據面開發套件)的Open vSwitch[1](OvS-DPDK)的概述,這是一種高性能,開源的虛擬交換機,本文還提供了有關OvS-DPDK功能的更為深入的技術文章的鏈接。本文是為希望深入了解OvS與DPDK集成的用戶所撰寫的。
注意:用戶可以下載OVS主分支[2]或2.6分支[3]的壓縮文件,及其安裝步驟[4]。?
(藍色字部分鏈接見文末,下同)
▼
PART 1
OvS-DPDK高級架構
OpenvSwitch是一個生產質量的多層虛擬交換機,在開源Apache*2.0 license下獲得許可。它通過OpenFlow*協議及其OVSDB管理接口支持SDN控制語義。OpenvSwitch可以從openvswitch.org[5],GitHub[6]*獲得,也可通過Linux*發行版獲得。?
原有的 OpenvSwitch通常通過內核空間數據路徑轉發數據包(參見圖1)。在內核數據路徑中,交換機的“快速路徑”包括一個對接收報文的轉發和操作規則的簡單流表。異常數據包(流中的第一個數據包)與內核快速路徑表中的任何現有條目都不匹配,并被發送到用戶空間守護程序進行處理(慢速路徑)。在用戶空間處理流中的第一個數據包之后,守護進程將更新內核空間中的流表,以便該流的后續數據包可以在快速路徑中處理而不會發送到用戶空間。根據此方法,對于大部分接收到的數據包,原始OvS可以消除在內核和用戶空間之間進行昂貴的上下文切換。但是,可達到的數據包吞吐量受到Linux網絡協議棧的轉發帶寬限制,這不適用于需要高速率數據包處理的用例;例如,電信運營商場景。
DPDK是一組用戶空間庫,使用戶能夠創建高性能優化的數據包處理應用程序(可在DPDK.org[7]上找到相關信息)。實際上,它提供了一系列輪詢模式驅動程序(PMD),可以繞過內核網絡協議棧,在用戶空間和物理接口之間直接傳輸數據包。通過消除內核網絡協議棧的中斷處理和遍歷,可以顯著提升轉發性能。將OvS與DPDK集成后,交換機快速路徑在用戶空間中,異常路徑與內核方案下的數據包路徑相同。圖1是DPDK與OvS的集成示意圖。? ??
圖1:DPDK(數據面開發套件)數據平面與原始Open vSwitch*的集成
下圖2顯示了OvS-DPDK的高級架構。OvS交換端口由網絡設備(或netdevs)表示。Netdev-dpdk是一個DPDK加速過的網絡設備,它通過三個獨立的接口:一個物理接口(由DPDK中的librte_eth庫處理)和兩個虛擬接口(librte_vhost和librte_ring),使用DPDK加速交換機的I/O性能,這些物理和虛擬的接口會連接到虛擬交換機上。
其他OvS架構層提供了進一步的功能,并和例如SDN控制器相連接。Dpif-netdev提供用戶空間轉發,ofproto是實現OpenFlow交換的OvS庫。它通過網絡與OpenFlow控制器通信并通過ofproto提供軟件和硬件接口的數據交換功能。ovsdb服務器維護該OvS實例的最新交換表信息并將其傳送給SDN控制器。接下來的章節將提供交換/轉發表的詳細信息,更多有關OvS體系結構的信息[8],可通過openvswitch.org網站獲取。?
圖2:使用DPDK(數據面開發套件)高級架構的OpenvSwitch *
▼
PART 2
OvS-DPDK交換表層次結構
從物理或虛擬接口進入OvS-DPDK的數據包根據其頭部字段來確定唯一標識符或散列,然后將其與三個主要交換表之一中的條目進行匹配,三個主要交換表是:完全匹配緩存(EMC),數據路徑分類器(dpcls)或ofproto分類器。除非找到匹配,否則數據包的標識符將按順序遍歷這三個表,若找到匹配,則將執行表中匹配規則指示的相應操作并且在完成所有動作后將數據包轉出交換機。該方案如圖3所示。? ?
圖3:使用DPDK(數據面開發套件)交換表層次結構的OpenvSwitch *
這三個表具有不同的特性和相應吞吐量性能/延遲。EMC為有限數量的表條目提供最快的處理。數據包的標識符必須與此表中的所有字段的條目完全匹配 ,包括源IP和端口的5元組,目標IP和端口,以及協議,這是為了最高速度處理,否則它將未命中EMC并傳遞給dpcls。dpcls包含更多表條目(排列在多個子表中)并啟用數據包標識符的通配符匹配(例如,指定目標IP和端口,但允許任何源)。這提供了大約一半的EMC吞吐量性能,并且可以滿足更多的表條目。將dpcls中匹配的數據包流配置在EMC中,可以以最高速度處理具有相同標識符的后續分組。?
未命中 dpcls會導致數據包被發送到ofproto分類器,以便OpenFlow控制器可以決定數據包操作。此路徑的性能最低,比EMC慢10倍以上。ofproto分類器中的匹配會導致新表條目建立在切換更快的表中,以便可以更快地處理同一流中的后續數據包。
▼PART 3
OvS-DPDK功能和性能
在撰寫本文時,OvS主代碼分支上提供了以下高級的OvS-DPDK功能:
·??????v16.07的DPDK支持(每個新DPDK版本支持的版本增量)
·??????vHost-user支持
·??????vHost重連
·??????vHost多隊列
·??????本地隧道支持:VxLAN,GRE,Geneve
·??????VLAN支持
·??????MPLS支持
·??????Ingress/egress/QoS策略
·??????巨幀支持
·??????連接跟蹤
·??????統計:DPDKvHost和擴展的DPDK統計數據
·??????調試:DPDKpdump支持
·??????鏈接聚合
·??????鏈接狀態
·??????VFIO支持
·???????DPDK端口的ODL/OpenStack檢測
·??????vHost-user NUMA感知
圖4突出顯示了原有OvS和OvS-DPDK之間的最新性能比較。這顯示了Phy-OvS-Phy使用場景下的每秒數據包吞吐量,表明OvS-DPDK比原有的OvS性能提升約為10倍,在啟用英特爾?超線程技術(英特爾?HT技術)的情況下增加到約12倍(標記為1C2T,或圖中帶有兩個邏輯線程的物理核心)。類似地,Phy-OvS-VM-OvS-Phy用戶場景表明OvS-DPDK相對于原有OvS的性能提高了約9倍。
圖4:性能比較 – 原有OpenvSwitch *(OvS)和帶數據平面開發套件的OvS
此數據的硬件和軟件配置以及更多用例結果可在英特爾?開放式網絡平臺(英特爾?ONP)性能報告[9]中找到。
OvS-DPDK獲取方式
OvS-DPDK可以在openvswitch.org[10]存儲庫中找到,也可以通過如下所示Linux發行版獲得。最新的里程碑版本是OvS2.6(2016年9月),發布時間為6個月。
代碼可供下載,如下所示:OvS主分支[11];OvS 2.6版本分支[12]。主分支的安裝步驟[13]以及2.6版本分支的安裝步驟[14]都可獲得。??
基于DPDK的OvS打包版本可從以下網址獲得:
紅帽*OpenStack平臺[15]
Ubuntu*[16]
Mirantis * OpenStack[17]
Open Platform for NFV*[18]
附加信息
要了解有關OvS-DPDK的更多信息,請查看以下視頻和文章,來自英特爾?開發人員專區,01.org,英特爾?網絡構建商和英特爾?網絡建設者大學。
用戶指南
?使用基于DPDK的OvS進行VM間NFV應用[19]
在Ubuntu上使用基于DPDK的OvS[20]
開發者指南
基于DPDK的OpenvSwitch? - 如何使用DPDK數據路徑構建和安裝Open vSwitch[21]
使用基于DPDK的OpenvSwitch - 包括高級性能調優信息[22]
文章和視頻
基于DPDK的OvS的速率限制配置和使用[23]
?基于DPDK的OvS的QoS配置和使用[24]
基于DPDK的OvS中vHost user多隊列配置[25]
OvS-DPDK中vhost user的NUMA感知[26]
基于DPDK的OvS中的Pdump[27]
在OpenStack中使能OvS-DPDK[28]
基于DPDK的Open vSwitch *中的巨幀[29]
基于DPDK的vSwith中vhost-user客戶端模式[30]
OVS-DPDK數據通分類器- 第1部分[31]
OvS-DPDK數據通路分類器- 第2部分[32]
OvS-DPDK中的鏈路聚合配置和使用[33]
使用英特爾?VTuneAmplifier分析OvS-DPDK中的性能瓶頸[34]
在DevStack中使基于OvS和DPDK的Neutron[35]
使用OVS-DPDK構建和測試簡單的NFV 跨VM使用場景(YouTube視頻系列)[36]
OvS與DPDK里程碑發布網絡研討會
在OpenStack中使用DPDK啟用OvS2.5.0[37]
在OpenStack中使用DPDK啟用OvS2.4.0[38]
在OpenStack中使用DPDK啟用OvS2.6.0[39]
INB大學
OvS-DPDK深入研究[40]
DPDK Open vSwitch:加速虛機訪問路徑[41]
白皮書
?OvS-DPDK使能SDN和NFV[42]
有問題?請隨時關注Open vSwitch討論郵件[43]線程上的問答。?
【序號鏈接網址】
https://software.intel.com/en-us/user/1386481
http://docs.openvswitch.org/en/latest/intro/install/dpdk/
https://github.com/openvswitch/ovs/archive/master.zip
http://github.com/openvswitch/ovs/archive/branch-2.6.zip
https://github.com/openvswitch/ovs/blob/branch-2.6/INSTALL.DPDK.md
http://openvswitch.org/
https://github.com/openvswitch/ovs/blob/master/Documentation/topics/porting.rst
http://dpdk.org/
https://github.com/openvswitch/ovs/blob/master/Documentation/topics/porting.rst
https://download.01.org/packet-processing/ONPS2.1/Intel_ONP_Release_2.1_Performance_Test_Report_Rev1.0.pdf
http://openvswitch.org/
https://codeload.github.com/openvswitch/ovs/zip/master
https://codeload.github.com/openvswitch/ovs/zip/branch-2.6
https://github.com/openvswitch/ovs/blob/master/Documentation/intro/install/dpdk.rst
https://github.com/openvswitch/ovs/blob/branch-2.6/INSTALL.DPDK.md
https://access.redhat.com/products/red-hat-openstack-platform"\t "_blank
http://releases.ubuntu.com/16.04/" \t"_blank
https://www.mirantis.com/products/mirantis-openstack-software/"\t "_blank
https://www.opnfv.org/brahmaputra"\t "_blank
https://software.intel.com/en-us/articles/using-open-vswitch-with-dpdk-for-inter-vm-nfv-applications
https://software.intel.com/en-us/articles/using-open-vswitch-with-dpdk-on-ubuntu
http://docs.openvswitch.org/en/latest/intro/install/dpdk/
http://docs.openvswitch.org/en/latest/howto/dpdk/
https://software.intel.com/en-us/articles/rate-limiting-configuration-and-usage-for-open-vswitch-with-dpdk
https://software.intel.com/en-us/articles/qos-configuration-and-usage-for-open-vswitch-with-dpdk
https://software.intel.com/en-us/articles/configure-vhost-user-multiqueue-for-ovs-with-dpdk
https://software.intel.com/en-us/articles/vhost-user-numa-awareness-in-open-vswitch-with-dpdk
https://software.intel.com/en-us/articles/dpdk-pdump-in-open-vswitch-with-dpdk
https://01.org/openstack/blogs/stephenfin/2016/enabling-ovs-dpdk-openstack
https://software.intel.com/en-us/articles/jumbo-frames-in-open-vswitch-with-dpdk
https://software.intel.com/en-us/articles/vhost-user-client-mode-in-open-vswitch-with-dpdk
https://software.intel.com/en-us/articles/ovs-dpdk-datapath-classifier
http://software.intel.com/en-us/articles/ovs-dpdk-datapath-classifier-part-2
http://software.intel.com/en-us/articles/link-aggregation-configuration-and-usage-in-open-vswitch-with-dpdk
https://software.intel.com/en-us/articles/analyzing-open-vswitch-with-dpdk-bottlenecks-using-vtune-amplifier
https://software.intel.com/en-us/articles/using-open-vswitch-and-dpdk-with-neutron-in-devstack
https://www.youtube.com/playlist?list=PLg-UKERBljNwc7kz6bsRnwPb4kTBSldLs
https://www.brighttalk.com/webcast/12229/209935"\t "_blank
https://www.brighttalk.com/webcast/12229/194949"\t "_blank
http://www.brighttalk.com/webcast/12229/232617/open-vswitch-with-dpdk-in-ovs-2-6-0
https://networkbuilders.intel.com/university/course/open-vswitch-with-dpdk-architectural-deep-dive
https://networkbuilders.intel.com/university/course/dpdk-open-vswitch-accelerating-the-path-to-the-guest"\t "_blank
https://networkbuilders.intel.com/docs/open-vswitch-enables-sdn-and-nfv-transformation-paper.pdf
http://mail.openvswitch.org/mailman/listinfo/discuss
? ? 轉載須知 ??
推薦閱讀?總結
以上是生活随笔為你收集整理的基于DPDK的Open vSwitch概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于深度学习的高精度野生动物检测识别系统
- 下一篇: iOS CMPedometer 获取计步