最近公司啟動了一個新項目,是基於FD.io的開源項目VPP來進行開發的。由於VPP項目目前只支持對L2和L3數據包的處理,但是我們新項目希望加入對L4(主要是TCP和UDP)協議的處理並提供一套類似於BSD socket API來建立自己的網絡應用。對L4協議的處理我們選用了開源項目OpenFastPath實現的協議棧,所以需要將OFP實現的L4協議棧處理加入到VPP項目中並最終可以實現對TCP和UDP數據包的終結。基於以上的應用場景,本次項目涉及到VPP、OFP和ODP的應用。
鄭重聲明一下:本文和后續的關於VPP、OFP和ODP的內容,都屬於本人在項目開發中的一些學習和總結,由於本人的知識水平有限,有什么總結的不對的地方歡迎各位大神批評指正,希望朋友們不吝賜教同時也給本人一個學習和提高的機會!
本篇主要是對VPP項目做一個介紹。
一、簡介
VPP全稱Vector Packet Processing,是Cisco2002年開發的商用代碼。
2016年2月11號,Linux基金會創建FD.io項目。Cisco將VPP代碼的開源版本加入該項目,目前已成為該項目的核心。
VPP運行於用戶空間,支持多種收包方式,常用的是DPDK。
VPP主要有兩個主要功能:框架可擴展;成熟的交換/路由功能。
二、擴展性
1、結點操作
VPP平台是通過graphnode串聯起來處理數據包,類似於freebsd的netgraph。
通過插件的形式引入新的graph node或者重新排列數據包的gpragh node。將插件添加到插件目錄中,運行程序的時候就會自動加載插件。另外插件也可以根據硬件情況通過某個node直接連接硬件進行加速。
VPP平台可以用於構建任何類型的數據包處理應用。比如負載均衡、防火牆、IDS、主機棧。也可以是一個組合,比如給負載均衡添加一個vSwitch。
通過創建插件,可以任意擴展如下功能:
• 自定義新的圖結點
• 重新排列圖結點
• 添加底層API
添加插件如下圖所示:
2、可編程能力
VPP還提供了基於共享內存或者消息隊列的高性能內部API。目前VPP平台支持C和JAVA客戶端進行內部API綁定。
如下圖所以,我們完成一個外部應用對VPP進行操作:
以上的編程能力是針對內部API的調用,另外還可以支持遠程可編程能力。
遠程可編程能力可以通過Data Plane Management Agent來實現。
通過外部API與Data Plane Management Agent進行通信。Data Plane Management Agent通過內部API與VPP應用(引擎)進行通信。
這是一個非常靈活的方法,任何人可以添加,但是需要外部API和Data Plane Management Agent匹配,以實現特定需求的VPP應用。
下圖展示Agent對接VPP和外部程序:
案例Honeycomb Agent:
HoneycombAgent通過netconf和restconf發布了yang模型的VPP功能。 像OpenDaylight 這樣支持netconf/yang的控制器可以掛載Honeycomb 管理代理來工作。而OpenDaylight支持OpenStack Neutron,所以如下圖所示OpenStack Neutron可以集成到vpp來:
三、網絡功能
1、網絡特性
VPP擁有的網絡特性如下:
• 快速查找路由表、CAM表
• 任意n元組分類
• 商用級別的交換/路由功能
VPP能提供的所有功能如下:
2、網絡性能
多核基准性能例子 (UCS-C240 M3, 3.5gHz,所有內存通道轉發ipv4):
• 1 core: 9 MPPS in+out
• 2 cores: 13.4 MPPS in+out
• 4 cores: 20.0 MPPS in+out
下面幾個圖展示的是和OVS+DPDK的性能對比:
下圖是在Haswell x86 架構的E5-2698v3 2x16C 2.3GHz上測試,圖中顯示了12口10GE,16核,ipv4轉發:
以上資料可以參考FD.io的官方網站:https://fd.io/technology