Vector Packet Processing(VPP) (一)簡介

目錄

一、簡介

二、擴展性

1、結點操作

2、可編程能力

三、網絡功能

1、網絡特性

2、網絡性能


最近公司啓動了一個新項目,是基於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

 

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