VPP簡介
- VPP(Vector Packet Processing)是思科旗下的一款可拓展的開源框架,提供容易使用的、高質量的交換、路由功能
- 特點:高性能、運行在普通的cpu上。
- 優點:高性能、技術成熟、模塊化、靈活性,有豐富的特征集。
- 可以允許任何人插入新的結點無需改動內核代碼。
模塊化、靈活性、可延展性
- VPP構建基於“包處理圖”,意味着可以“插入”新的結點,變得容易拓展,可以自定義一些特定的功能。
- 插件如何運行:運行時,VPP平台從RX rings抓取所有可用包組成一個包向量,構建一個包處理圖(包括插件)。並且圖結點松耦合,使得新的插件易於使用,容易和現存圖結點結合。
包處理的革新
- 包處理由逐個處理變為處理一批的包(向量包)
VPP使用
- 你可以在VPP source tree上獨立地構建一個插件。
- VPP可以用於構建各種包處理應用,可以基於負載均衡、防火牆等等,比如把負載均衡加到vSwitch上。
- VPP引擎運行在純用戶空間上,你不需要源代碼即可擴展這個引擎的功能。
- 新的自定義圖結點
- 重組圖結點
- 新的低級別APIs
傳統方法
- 所謂VPP向量報文處理是與傳統的標量報文處理相對而言的。傳統報文處理方式,同時也是人類常用的邏輯思維方式,即:報文是按照到達先后順序來處理,第一個報文處理完,處理第二個,依次類推;A callsB calls C….return return return,函數會頻繁嵌套調用,並最終返回。
- 簡而言之,傳統報文處理是對到來的包逐個處理,不加分類。
- 由此可見,傳統標量報文處理有如下缺陷:
-
I-cache 抖動(cache時間局限性和空間局限性特點)
-
I-cache misses
-
除了擴大cache外,沒有變更方案。
VPP方法
- 簡而言之,向量包處理采用了“分類”的思想,將一批報文分為一類,用一個圖結點表示。按類處理,如果cache命中,則這一批報文都命中;否則則一批都未命中。未命中時,由傳統的n個包未命中n次變為n個包未命中1次。
- VPP把一批底層硬件隊列Rx ring收到的包,組成一個Packet Vector或者是一組包,借助於報文處理圖Packet Processing graph來實現處理流程,圖節點graph node把整個過程分解為一個個先后連接的服務node。這一組包(packet vector)被第一個graph node節點的任務處理,然后依次被第二個graph node節點的任務處理,依次類推,
- 由於向量報文中的第一個報文packet-1為I-cache進行了熱身,向量報文中剩下報文的處理性能可以直接達到極限,I-cache 缺失的固定開銷平攤到了整個向量處理中,使單個報文的處理開銷顯著降低。
由此可見,向量報文處理解決了標量處理的主要性能缺陷,並有具有如下優點:
- 緩解了I-cache抖動問題
- 向量報文進行預取緩解了讀時延問題,高性能並且更加穩定
為什么叫向量包
- 這種方法解決了堆棧地址上堆棧深度/ D緩存未命中相關的問題。 它改善了“電路時間”。 “電路”是抓取來自設備RX環的所有可用分組的循環,形成由按照RX順序的分組索引組成的“幀”(矢量),通過有向圖節點運行分組,並返回到RX 環。 隨着數據包處理的繼續,電路時間基於提供的負載達到穩定的平衡。
豐富的特性
- VPP可應用於