DPDK


DPDK

數據平面開發套件(DPDK[1]   ,Data Plane Development Kit)是由6WIND, Intel等多家公司開發,主要基於 Linux系統運行,用於快速數據包處理的函數庫與驅動集合,可以極大提高數據處理性能和吞吐量,提高數據平面應用程序的工作效率。

關鍵技術

編輯

環境抽象層

DPDK開發者指南 - 環境抽象層

http://www.jianshu.com/p/dab2ab98f779

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為每個核心每個端口提供一個單獨的隊列。同樣的,每個端口的接收隊列只會被指派給唯一一個邏輯核心並接收它的輪詢。
http://www.jianshu.com/p/6d86fabb78d6

函數庫/接口

編輯

Malloc Library

提供分配任意大小內存的API。
http://www.jianshu.com/p/d69d8511cf63

Ring Library

提供對一種特殊的鏈表隊列的管理,具有先進先出、定長、無鎖、並發入/出隊等特性。
優點:工作更快,實現簡單,適用於塊數據的入/出隊;
缺點:定長、環多導致內存占用增加。
一個簡單的環結構 一個簡單的環結構
http://www.jianshu.com/p/7546211cff62 4

Mempool Library

內存池用於分配固定大小的對象。在DPDK中內存池用名字區分,並用環來存儲未使用的對象。
http://www.jianshu.com/p/d69d8511cf63

Librte_pdump庫

librte_pdump庫為DPDK中的數據包捕獲提供了一個框架。該庫將Rx和Tx mbufs的完整復制到新的mempool,

因此會降低應用程序的性能,故建議只使用該庫進行調試。

http://www.jianshu.com/p/3d79065cc0ef

DPDK capture原理
1.pdump庫的使用
2.KNI方式
3.用戶態實現報文捕獲和dump

http://www.jianshu.com/p/bc2bde0e4442?utm_campaign=maleskine&utm_content=note&utm_medium=pc_all_hots&utm_source=recommendation

Mbuf Library

用於分配和釋放緩沖區給DPDK應用來存儲緩存信息,使用上述的內存池來存儲。
一個單段緩沖區 一個單段緩沖區
http://www.jianshu.com/p/94e96c426c4c

IVSHMEM Library

為在虛擬機與主機或虛擬機間的零拷貝數據共享提供便利,得名於使用了 QEMU的IVSHMEM機制。

Link Bonding Poll Mode Driver Library

純軟件函數庫,允許多個PMD組合為單個邏輯PMD,類似於在linux中將多個網絡接口組合為一個邏輯接口。
組合PMD 組合PMD
http://www.jianshu.com/p/a808f11675e2

目前,Link Bonding PMD庫支持以下網卡綁定模式。

10.1.1.輪詢(模式0)
10.1.2.主動備份(模式1)
10.1.3.平衡策略
10.1.4.廣播策略
10.1.5.鏈路聚合802.3AD
10.1.6.傳輸負載均衡策略

Timer Library

為DPDK執行單元提供時間服務以實現反饋函數的異步執行。時鍾有單次工作的也有周期工作的,可載入一個核心上的時鍾后在另一個上執行。時鍾提供很高的精度,也可以在編譯時禁用以提高性能。
http://www.jianshu.com/p/1c1f840913ca

Hash Library

創建 散列表以提供快速查找功能。
http://www.jianshu.com/p/4db3afc630d6

LPM Library

為32位關鍵碼實現的 最長前綴匹配表查找方法。用於在IP轉發應用中找到最合適的路由匹配。

LPM6 Library

即LPM for IPv6,為128位關鍵碼實現的最長前綴匹配表查找方法,用於在IPv6轉發應用中找到最合適的路由匹配。

Packet Distributor Library

用於流量的動態負載均衡問題。使用時,使用中的邏輯核心會被考慮為兩種角色:其一是一個分配器核心,負責負載均衡或數據包分配;其二是一群工人核心,負責從分配器接收數據包並對它們進行處理。
數據包分發模式 數據包分發模式
http://www.jianshu.com/p/3d463fe5e1ad

Reorder Library

用於根據序號對緩沖區重排序。應用於上述的數據包分發中。
http://www.jianshu.com/p/7fd33c1b19d2

IP Fragmentation&Reassembly Library

實現IPv4和IPv6數據包的分片和重新組裝。
http://www.jianshu.com/p/f0ec711bf322

Vhost Library

實現用戶空間的虛擬主機驅動。同時支持vhost-cuse(字符設備)和vhost-user(套接字服務器)。它也為客戶機中相應的半虛擬化設備創造,管理,刪除虛擬主機設備(creates, manages and destroys vhost devices for corresponding virtio devices in the guest)。

其他內容

編輯

Multiprocess Support

多進程支持。用於允許一系列DPDK進程以透明的方式同時工作在Intel架構上。

Kernel NIC Interface

內核網卡接口。允許用戶空間應用進入Linux控制平面。該接口較現有的Linux TUN/TAP接口更快,允許用標准Linux網絡工具(如ethtool,ifconfig,tcpdump)對DPDK端口進行管理,還提供了到內核網絡棧的接口。
http://www.jianshu.com/p/73939c2cab40

Quality of Service Framework

QoS(服務質量)架構。包括帶QoS支持的數據包管道、分級調度(Hierarchical Scheduler)、丟包器(dropper)、流量計量(traffic metering)。
DPDK編程指南 QoS框架

http://www.jianshu.com/p/8fc89321a886

http://www.jianshu.com/p/bd31eb40c6c4

Power Management

能源管理。允許用戶空間應用通過調整CPU頻率或進入不同的C-state來節省電量。
http://www.jianshu.com/p/54ee270247a8

Packet Classification&Access Control

數據包分類與准入控制。用以基於一系列規則對輸入的數據包進行分類。

DPDK ACL算法介紹

http://www.jianshu.com/p/0f71f814d73e

Packet Framework

數據包分組架構。設計功能包括:
  1. 為建造復雜的數據包處理管道提供標准方法
  2. 為相同的管道程序塊提供在純軟件和硬件加速這兩種實現間切換的能力
  3. 在靈活性和性能間找到最佳的折中方案
  4. 提供邏輯上類似於Open Flow( SDN核心技術)的架構。

Port Hotplug Framework

端口熱插拔架構。允許DPDK應用在運行時接入和彈出端口。這需要內核對PCI熱插拔功能的支持。

通用流API

http://www.jianshu.com/p/405c99678e23

多進程支持

http://www.jianshu.com/p/812140d58394


免責聲明!

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



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