VPP源碼架構介紹

VPP架構:

VPP介紹

VPP:(the vector packet processor)是一個可擴展框架,可提供開箱即用的交換機/路由器功能。是Linux基金會下開源項目FD.io的一個子項目,由思科貢獻的開源版本,目前是FD.io的最核心的項目。

 

VPP實現的優點是其高性能,成熟的技術,其模塊化和靈活性以及豐富的功能集。

 

VPP技術基於成熟的技術,據說支撐了超過十億美元的思科產品。它的模塊化設計框架允許任何人「插入」新的圖形節點,而不需要更改核心/內核代碼。

VPP背景:

基於思科貢獻VPP開源代碼的動機,思科公司的傑出諮詢工程師兼FD.io技術指導委員會主席Ed Warnicke稱:「在雲基礎設施和NFV基礎設施中,都需要轉發數據包,所以,能否轉發數據包是成功的關鍵。FD.io打破了這潭死水,解決靈活度與性能方面存在的老問題。思科樂於開源VPP來推動行業發展。」

愛立信的傑出工程師兼FD.io技術指導委員會的成員JoelHalpern補充說,FD.io就是在促進IP轉發方面做得更好。VPP軟件可以實現零丟幀處理480 Gb/s的數據包。

目前各大廠商包括AT&T,Comcast,中興,華爲,博科,思科,愛立信,Metaswitch,英特爾,Cavium,紅帽和Inocybe均在此投入大量的資源。

AT&T即將構建的SDN的 「Nirvana」堆棧中即將採用FD.io架構,OPNFV也在發佈的Danube代碼中納入了FD.io。


 

VPP整體架構

本文主要側重在VPP源碼分析層面上的理解:以VPP17.04版本爲例,整體的源碼結構如下圖:


 由上圖分析,VPP源碼模塊主要包括以下幾個層次,且關係如下:

Plugins:主要爲實現一些功能,在程序啓動的時候加載,一般情況下會在插件中加入一些node節點去實現相關功能

Vnet:提供網絡資源能力:比如設備,L2,L3,L4功能,session管理,控制管理,流量管理等

VLIB:主要提供基本的應用管理庫:buffer管理,graph node管理,線程,CLI,trace等

VPP Infra:提供一些基本的通用的功能函數庫:包括內存管理,向量操作,hash, timer等