DPDK-Data Plane Development Kit 數據平面開發套件

背景

因特網和其他互聯網必須承載的通信量在持續增長和變化。如今,實時響應的萬維網的廣泛使用和音頻、圖像、視頻的使用增長,驅動了服務質量需求的增長。爲了應對這種增長,TCP/IP體系結構發展了 QoS(服務質量)以支持各種類型的擁有各種服務質量需求的通信量。數據平面(Data Plane)是QoS框架的三平面之一,承擔了通信中分組的隊列管理,排隊調度,擁塞避免等直接在數據流上進行操作的機制,對提高網絡通信的效率起着至關重要的作用。  [2] 
在此基礎上,人們期望用更低的成本和更短的產品開發週期來提供多樣的網絡單元與豐富的功能,如應用處理、控制處理、包處理、信號處理等。爲了適應這一新的產業趨勢,基於Intel x86架構的DPDK面世了。
 

綜述

DPDK是一個 linux基金會的開源項目。  [3]   開發DPDK的主要目的,是在數據平面應用中爲快速的數據包處理提供一個簡單而完善的架構。在理解此工具集之後,開發人員可以以此爲基礎進行新的原型設計,或簡單地爲我所用。  [4] 
DPDK架構通過創建EAL(Environment Abstraction Layer,環境抽象層)來爲不同的工作環境創造函數庫集,創建後開發者即可把自己的應用與函數庫進行鏈接。該架構也包含跟蹤調試, PCIe總線接入等功能,並有相關樣例幫助開發者學習如何使用這些功能。
 

工作環境

DPDK的環境抽象層嚮應用與函數庫隱藏了底層環境的細節,因而能擴展到任何處理器上使用。就操作系統來說,它提供了對Linux和 FreeBSD的支持。
 

工作原理

DPDK使用了輪詢(polling)而不是中斷來處理數據包。在收到數據包時,經DPDK重載的網卡驅動不會通過中斷通知CPU,而是直接將數據包存入內存,交付應用層軟件通過DPDK提供的接口來直接處理,這樣節省了大量的CPU中斷時間和內存拷貝時間。  [4] 

關鍵技術

 

環境抽象層

DPDK的創造的環境抽象層(EAL, Environment Abstraction Layer)主要負責對計算機底層資源(如硬件和內存空間)的訪問,並對提供給用戶的接口實施了實現細節的封裝。其初始化例程決定了如何分配這些資源(PCI設備、計時器、控制檯等)。
EAL提供的典型服務包括:
  • 加載和啓動DPDK:DPDK及其應用程序會被鏈接爲單一應用,因此需要通過某種方式進行加載DPDK。
  • 核關聯/分配過程:EAL提供了將執行單元分配給特定核並創建執行實例的機制。
  • 預留系統內存:EAL爲預留不同的內存區域提供便利,例如用於設備交互的物理內存區域。
  • 抽象PCI地址:EAL提供了訪問PCI地址空間的接口。
  • 跟蹤和調試功能:日誌、堆棧轉儲等。
  • 實用的功能:libc中所沒有提供的自旋鎖和原子計數器。
  • CPU功能識別:在運行時確定CPU是否支持特定功能,確定當前CPU是否支持編譯產生的二進制指令集。
  • 中斷處理:向特定中斷源註冊/註銷回調的接口。
  • 時鐘功能:用於設置/刪除在特定時間運行的回調函數接口。
 

輪詢模式驅動

DPDK包括1Gb,10Gb,40Gb和半虛擬化抽象層的輪詢模式驅動(PMD, Poll Mode Driver)。PMD由用戶空間的特定的驅動程序提供的 API組成,用於對設備和它們相應的隊列進行設置。拋棄了基於中斷的異步信號發送機製爲該架構帶來很大的開銷節省。避免中斷性能瓶頸是DPDK提升數據包處理速度的關鍵之一。
DPDK環境爲數據包處理應用考慮了兩種模型:運行至完成(run-to-completion)模型和管道(pipeline)模型。在運行至完成模型中,一個API向某個特定端口的接收描述符環輪詢以接收數據包。接着這個數據包在同一個核上被處理,之後被一個發送用API放到端口的傳輸描述符環上;在管道模型中,一個核心會通過API對一個或多個端口的接收描述符環進行輪詢,數據包通過環被接收和傳遞給另一個核心,然後在這個核心上被處理,之後可能被髮送用API放到端口的傳輸描述符環上。
運行至完成是一個同步模型,每個指派給DPDK的邏輯核心執行如下所示的循環:
  1. 通過PMD接收用API來提取輸出數據包
  2. 根據轉發,一一處理收到的數據包
  3. 通過PMD發送用API發送輸出數據包
相反,管道模型是一個異步模型,有的邏輯核心只執行數據包提取,而有的只執行處理,收到的數據包在這些邏輯核心之間通過環來傳遞。提取核心執行如下的循環:
  1. 通過PMD接收用API來提取輸出數據包
  2. 通過隊列提供數據包給處理核心
處理核心執行如下的循環:
  1. 從隊列中提取數據包
  2. 根據重傳(如果被轉發)處理數據包
爲了避免不必要的中斷性能瓶頸,執行環境禁止任何異步通知機制的使用。在任何需要或合適的時候,異步通信都應儘可能採用環的方式。
在多核環境中避免鎖競爭是一個重要的問題。爲了處理這個問題,PMD被設計爲可以儘可能地在單核私有資源下工作。例如,PMD爲每個核心每個端口提供一個單獨的隊列。同樣的,每個端口的接收隊列只會被指派給唯一一個邏輯核心並接收它的輪詢。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章