DPDK Programmer’s Guide(2)概述

官方文檔查看地址:
http://doc.dpdk.org/guides/prog_guide/overview.html
PDF下載地址:
https://www.intel.com/content/www/us/en/embedded/technology/packet-processing/dpdk/dpdk-programmers-guide.html
2. 概述

本節將全面概述數據平面開發工具包(DPDK)的體系結構。

DPDK的主要目標是爲數據平面應用程序中的快速數據包處理提供一個簡單、完整的框架。用戶可以使用這些代碼來理解所使用的一些技術、構建原型或添加自己的協議棧。使用DPDK的其他生態系統選項是可用的。

該框架通過創建環境抽象層(EAL)爲特定環境創建了一組庫,該抽象層可能特定於Intel®體系結構(32位或64位)、Linux*用戶空間編譯器或特定平臺的模式。這些環境是通過使用make文件和配置文件創建的。創建EAL庫之後,用戶可以鏈接到這個庫來創建自己的應用程序。除了EAL之外,還提供了其他庫,包括散列、最長前綴匹配(LPM)環庫(Hash, Longest Prefix Match (LPM) and rings libraries)。本文提供了示例應用程序,幫助用戶瞭解如何使用DPDK的各種特性。

DPDK實現了包處理的run to completion模型,其中所有資源必須在調用數據平面應用程序之前分配,作爲邏輯處理核心上的執行單元運行。該模型不支持調度程序,所有設備都通過輪詢訪問。不使用中斷的主要原因是中斷處理帶來性能開銷

除了run-to-completion模型之外,還可以通過環(ring)在CPU核之間傳遞包或消息來使用管道(pipeline)模型。這允許分階段執行工作,並可能允許更有效地使用CPU核上的代碼。

2.1開發環境

DPDK項目安裝需要Linux和相關的工具鏈,例如一個或多個編譯器、彙編器、make實用程序、編輯器和各種庫來創建DPDK組件和庫。

一旦爲特定的環境和體系結構創建了這些庫,就可以使用它們創建用戶的數據平面應用程序。

當爲Linux用戶空間創建應用程序時,使用glibc庫。對於DPDK應用程序,在編譯應用程序之前必須配置兩個環境變量(RTE_SDKRTE_TARGET)。以下是如何設置變量的例子:

export RTE_SDK=/home/user/DPDK
export RTE_TARGET=x86_64-native-linux-gcc

有關設置開發環境的信息,請參閱DPDK入門指南(DPDK Getting Started Guide)。

2.2環境抽象層

環境抽象層(EAL)提供了一個通用接口,它嚮應用程序和庫隱藏環境細節。EAL提供的服務包括:

  • DPDK loading and launching(加載和啓動DPDK)
  • Support for multi-process and multi-thread execution types(支持多進程和多線程執行類型)
  • Core affinity/assignment procedures(核心親和力/作業程序)
  • System memory allocation/de-allocation(系統內存分配/釋放)
  • Atomic/lock operations(原子/鎖操作)
  • Time reference(時間參考)
  • PCI bus access(PCI總線訪問)
  • Trace and debug functions(跟蹤和調試功能)
  • CPU feature identification(CPU功能鑑定)
  • Interrupt handling(中斷處理)
  • Alarm operations(報警操作)
  • Memory management (malloc)(內存管理(malloc))

在環境抽象層(Environment Abstraction Layer)中對EAL進行了全面的描述。

2.3核心組件

核心組件是一組庫,提供高性能包處理應用程序所需的所有元素。

在這裏插入圖片描述
rte_timer:計時器設施。基於EAL提供的HPET接口。
rte_malloc:使用libc的malloc()分配命名內存zones。
rte_mempool:處理一個對象池通過使用一個環來來存儲它們。允許批量入/出隊列和每個cpu緩存。
rte_mbuf:對承載網絡數據的包緩衝區的操作。
rte_ring:固定大小的無鎖FIFO,用於在表中存儲對象。
rte_debug:提供調試助手
rte_eal + libc:環境抽象層:RTE加載、內存分配、時間引用、PCI訪問、日誌記錄。

2.3.1環管理器(librte_ring)
環形結構在一個有限大小的表中提供了一個無鎖的多生產者、多消費者FIFO API。它比無鎖隊列有一些優勢;易於實現,適應批量操作,速度更快。內存池管理器(librte_mempool)使用一個環,它可以用作邏輯CPU核心上連接在一起的核心和/或執行塊之間的通用通信機制

這個環緩衝區及其用法在環庫( Ring Library)中有詳細的描述。

2.3.2內存池管理器(librte_mempool)
內存池管理器負責分配內存中的對象池。池按名稱標識,並使用一個環存儲空閒對象。它還提供了一些其他可選服務,比如每個核心對象緩存和對齊幫助器,以確保填充對象以使它們在所有RAM通道上均勻分佈。

這個內存池分配器在Mempool庫中描述。

2.3.3網絡包緩衝區管理(librte_mbuf)
mbuf庫提供了創建和銷燬DPDK應用程序可能用於存儲消息緩衝區的緩衝區的功能。消息緩衝區在啓動時創建,並使用DPDK mempool庫存儲在mempool中。這個庫提供一個API來分配/釋放mbufs,操作用於攜帶網絡數據包的數據包緩衝區。

在Mbuf庫中描述了網絡包緩衝區管理。

2.3.4計時器管理器(librte_timer)
此庫爲DPDK執行單元提供計時器服務,提供異步執行函數的能力。它可以是周期函數調用,也可以是一次性調用。它使用環境抽象層(EAL)提供的定時器接口來獲取精確的時間引用,並且可以根據需要在每個CPU核的基礎上進行初始化。

庫文檔在計時器庫( Timer Library)中可用。

2.4以太網*輪詢模式驅動程序架構
DPDK包括用於1個GbE、10個GbE和40個GbE的輪詢模式驅動程序(PMDs)和準虛擬化virtio以太網的控制器,這些控制器設計用於在沒有異步、基於中斷的信令機制的情況下工作。

參見輪詢模式驅動程序(Poll Mode Driver)章節。

2.5包轉發算法支持
DPDK包含散列(librte_hash)和最長前綴匹配(LPM,librte_lpm)庫,以支持相應的包轉發算法。

有關更多信息,請參見散列庫和LPM庫( Hash Library and LPM Library )章節。

2.6librte_net
librte_net庫是IP協議定義和便利宏的集合。它基於FreeBSD* IP棧中的代碼,包含協議編號(用於IP頭)、IP相關宏、IPv4/IPv6頭結構和TCP、UDP和SCTP頭結構。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章