VPP 總覽


FD.io項目介紹

FD.io(Fast data - Input/Output)是Linux基金會旗下的又一開源項目,其成立於2016年2月11日。該項目在通用硬件平台上提供了具有靈活性、可擴展、組件化等特點的高性能IO服務框架,用以迎接下一個網絡和存儲浪潮。該框架支持高吞吐量、低延遲、高資源利用率的user space IO服務,並可適用於多種硬件架構(x86, ARM, and PowerPC)和部署環境(bare metal, VM, container)。

 

圖 開放網絡生態系統概要

FD.io開源項目的關鍵組件是由Cisco捐贈的已商用的VPP(Vector Packet Processing )庫,VPP高度模塊化,用戶可以根據需求實現定制化的服務節點插件。

 

 

 

 

圖 FD.io項目架構

VPP和FD.io其他子項目如NSH_ SFC, Honeycomb, and ONE一起加速NFV的data plane。未來的代碼貢獻將來自開源社區,FD.io的成員期望在各個領域對FD.io進行拓展,例如防火牆、負載均衡、LISP、主機追蹤、IDS、硬件加速器集成等。

 

VPP簡介

VPP全稱Vector Packet Processing,據說是Cisco 2002年開發的商用代碼。2016年2月11號,Linux基金會創建FD.io項目。Cisco將VPP代碼的開源版本加入該項目,目前已成為該項目的核心。VPP商用版看不到我們暫且不說,單看這個開源版本,個人覺得還是一個初級版本,因為自從關注之后代碼更新還是很多,包括bug修復和功能開發。VPP運行於用戶空間,支持多種收包方式,我個人關注的是DPDK。

VPP有兩個關鍵特性:

  • 框架可擴展。(確實易擴展)
  • 成熟的交換/路由功能。(不是我說的,官方說的)

VPP技術原理

(https://www.sohu.com/a/134745174_468741)

所謂VPP向量報文處理是與傳統的標量報文處理相對而言的。傳統報文處理方式,同時也是人類常用的邏輯思維方式,即:報文是按照到達先后順序來處理,第一個報文處理完,處理第二個,依次類推;A callsB calls C….return return return,函數會頻繁嵌套調用,並最終返回。

由此可見,傳統標量報文處理有如下缺陷:

1、I-cache 抖動(cache時間局限性和空間局限性特點)

2、I-cache misses

3、除了擴大cache外,沒有變更方案。

相比較而言,向量報文處理則是一次處理多個報文,也相當於一次處理一個報文數組packet[n]如下圖:

 

 

 

圖 向量報文

VPP把一批底層硬件隊列Rx ring收到的包,組成一個Packet Vector或者是一組包,借助於報文處理圖Packet Processing graph來實現處理流程,圖節點graph node把整個過程分解為一個個先后連接的服務node。這一組包(packet vector)被第一個graph node節點的任務處理,然后依次被第二個graph node節點的任務處理,依次類推,如下圖所示:

圖 報文處理圖

由於向量報文中的第一個報文packet-1為I-cache進行了熱身,向量報文中剩下報文的處理性能可以直接達到極限,I-cache 缺失的固定開銷平攤到了整個向量處理中,使單個報文的處理開銷顯著降低。

由此可見,向量報文處理解決了標量處理的主要性能缺陷,並有具有如下優點:

1、解決了I-cache抖動問題

2、向量報文進行預取緩解了讀時延問題,高性能並且更加穩定

 

擴展性

節點操作

VPP平台是通過graph node串聯起來形成一條datapath來處理報文,類似於freebsd的netgraph。通過插件的形式引入新的graph node或者重新排列報文的graph node。將插件添加到插件目錄中,運行程序的時候就會自動加載插件。另外插件也可以根據硬件情況通過某個node直接連接硬件進行加速。VPP平台可以用於構建任何類型的報文處理應用。比如負載均衡、防火牆、IDS、主機棧。也可以是一個組合,比如給負載均衡添加一個vSwitch。

通過創建插件,可以任意擴展如下功能:

  • 自定義新的graph node。
  • 重新排列graph node。
  • 添加底層API。

可編程能力

VPP還提供了基於共享內存或者消息隊列的高性能內部API。目前VPP平台支持C和JAVA客戶端進行內部API綁定。
如下圖所以,我們可以實現一個外部應用來對VPP進行操作:

 

 

 以上的編程能力是針對內部API的調用,另外還可以支持遠程可編程能力。遠程可編程能力可以通過Data Plane Management Agent來實現。這里所說的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:
Honeycomb Agent通過netconf和restconf發布了yang模型的VPP功能。像OpenDaylight這樣支持netconf/yang的控制器可以掛載Honeycomb Management Agent來工作。而OpenDaylight支持OpenStack Neutron,所以如下圖所示OpenStack Neutron可以集成到vpp來:

 

 

 

 

網絡功能

(https://my-vpp-docs.readthedocs.io/en/latest/overview/index.html)

網絡特性

VPP擁有的網絡特性如下:

  • 快速查找路由表、CAM表。
  • 任意n元組分類。
  • 商用級別的交換/路由功能。

VPP能提供的所有功能如下:

 

 

 

網絡性能

FD.io VPP的一個優點是在相對低功耗的計算上具有高性能,這種性能基於以下特性:

  • 專為商用硬件設計的高性能用戶空間網絡堆棧:
  • L2,L3和L4功能和封裝。
  • 優化的數據包接口,支持多種用例:
    • 用於高速VM到VM連接的集成vhost用戶后端
    • 用於高速Container-to-Container連接的集成memif容器后端
    • 基於vhost的集成vhost接口數據包到Linux內核
  • 在主機上運行,​​在VM和Linux容器內運行,都是相同的代碼路徑
  • 利用最佳的開源驅動程序技術:DPDK
  • 大規模測試;線性核心擴展,使用數百萬個流和mac地址進行測試

這些功能旨在充分利用常見的微處理器優化技術,例如:

  • 通過處理向量中的數據包減少緩存和TLS未命中
  • 使用向量指令實現IPC增益,例如:SSE,AVX和NEON
  • 消除模式切換,上下文切換和阻塞,始終執行有用的工作
  • 緩存內置的緩沖區用於緩存和記憶效率

OVS更適用於SDN,因為他的流表更加靈活,實現的功能更加強大,尤其是在IaaS的主機中做網絡轉發比較常見。

而VPP更適用於NFV,適合做特定功能的網絡模塊,而且性能占優。

多核基准性能例子 (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轉發:

 

 

 

源碼架構

vpp數據平面分為四個不同的層:

  • 基礎架構層:包括vppinfra,vlib,svm和二進制api庫。源碼:/src/{vppinfra, vlib, svm, vlibapi, vlibmemory}
  • 通用網絡協議棧層:vnet。源碼:/src/vnet
  • 應用程序shell:vpp。源碼:/src/vpp

日益豐富的數據平面插件。源碼:/src/plugins

 
參考:
  https://my-vpp-docs.readthedocs.io/en/latest/overview/index.html
  https://www.sohu.com/a/134745174_468741


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM