DPDK編程指南 2.概述
本章節給出了DPDK架構的一個全局概述。
DPDK的主要目的就是為數據面快速報文處理應用程序提供一個簡潔完整的框架。用戶可以通過代碼來理解其中使用的一些技術,構建自己的應用程序或添加自己的協議棧。Alternative ecosystem options that use the DPDK are available。
通過創建環境抽象層(EAL),DPDK框架為每個特殊的環境創建了一組運行庫。這個庫特定於Intel架構(32或64位),Linux*用戶空間編譯器或其他特定的平臺。這些環境通過一些makefile和配置文件創建。一旦EAL庫編譯完成,用戶可以通過鏈接這些庫來構建自己的應用程序。除了EAL,還有一些其他的庫,包括哈希算法、最長前綴匹配、環形緩沖區等。DPDK提供了一些應用程序實例來指導如何使用這些特定來創建自己的應用程序。
DPDK實現了報文處理的RTC模型,在這種模型中,數據面應用程序在調用之前必須預先分配好所有的資源,並作為執行單元運行在邏輯核上。這種模型並不支持調度,且所有的設備通過輪詢的方式訪問。不使用中斷方式的主要原因就是中斷處理增加了性能開銷。
作為RTC模型的擴展,通過使用Ring在不同邏輯核之間傳遞報文和消息,也可以實現報文處理的流水線模型(Pipeline)。流水線模型允許操作分階段進行,在多核代碼執行中可能更高效。
2.1.開發環境
DPDK工程創建要求Linux環境及相關的工具鏈,例如一個或多個編譯工具、匯編程序、make工具、編輯器及DPDK組件用到的庫。
當指定環境和架構的庫編譯出來時,這些庫就可以用於創建我們自己的數據面處理程序。
創建Linux用戶空間應用程序時,需要用到glibc庫。對於DPDK應用程序,必須使用兩個全局環境變量(RTE_SDK和RTE_TARGET),這兩個變量需要在編譯應用程序之前配置好:
export RTE_SDK=/home/user/DPDK
export RTE_TARGET=x86_64-native-linuxapp-gcc
也可以參考《DPDK入門指南》來獲取更多搭建開發環境的信息。
2.2.環境適配層
環境適配層為應用程序和庫提供了通用的接口,隱藏了底層環境細節。EAL提供的服務有:
- DPDK的加載和啟動
- 多線程和多進程執行方式支持
- CPU親和性設置
- 系統內存分配和釋放
- 原子操作和鎖操作
- 定時器引用
- PCI總線訪問
- 跟蹤調試功能
- CPU特性識別
- 中斷處理
- 警告操作
- 內存管理
EAL更詳細的描述請參閱本文檔“環境適配層”章節。
2.3.核心組件
核心組件指的是一系列庫,用於為高性能包處理程序提供所有必須的元素。核心組件及其之間的關系如下圖所示:
Figure 2 1 Core Components Architecture
2.3.1.環形緩沖區管理(librte_ring)
Ring數據結構提供了一個無鎖的多生產者,多消費者的FIFO表處理接口。相對於無鎖隊列來講,它容易部署,適合大量的操作,而且更快。Ring庫在“內存池庫(librte_mempool)”中使用,而且,ring還用於不同邏輯核上處理單元之間的通信。
環形緩沖區及其使用可以參考章節“環形緩沖區庫”描述。
2.3.2.內存池管理(librte_mempool)
內存池管理的主要職責就是在內存中分配指定數目對象的Pool。每個Pool以名稱來唯一標識,並且使用一個Ring來存儲空閑的對象節點。它還提供了一些其他的服務,如對象節點的每核緩存備份,及自動對齊以保證對象能夠均衡分布到內存通道上。
內存池分配器的具體行為請參考章節“內存池庫”描述。
2.3.3.網絡報文緩沖區管理(librte_mbuf)
報文緩沖區庫提供了創建和銷毀報文緩沖區的能力,DPDK應用程序中使用這些緩沖區來存儲消息。這些緩沖區通常在程序開始時通過DPDK的內存池庫(librte_mempool)申請並存儲在內存池中。緩沖區庫(librte_mbuf)提供了報文申請和釋放的API,通常情況下,消息Buffer用於緩存消息,報文Buffer用於緩存網絡報文。
報文緩沖區管理的具體行為請參考章節“緩沖區庫”描述。
2.3.4.定時器管理(librte_timer)
這個庫位DPDK的執行單元提供了定時器服務,為函數異步執行提供支持。定時器可以設置成周期調用,或者只調用一次。使用EAL提供的接口可以獲取高精度時鐘,並且能在每個核上根據需要初始化。
具體請參考章節“定時器庫”描述。
2.4.以太網輪詢模式驅動架構
DPDK的PMD驅動支持1G、10G、40G。 同時DPDK提供了虛擬的以太網控制器,被設計成非異步,基於中斷信號的模式。
詳細內容參考 章節“輪詢模式驅動”描述。
2.5.報文轉發算法支持
DPDK提供了哈希(librte_hash)、最長前綴匹配(librte_lpm)算法庫用於支持相應的分組轉發算法。
詳細內容查看章節“哈希算法” 和“最長前綴匹配” 。
2.6.網絡庫(librte_net)
這個庫包括IP協議的一些定義及常見的宏定義。這些定義都是基於FreeBSD*中IP協議棧的代碼,包括協議號(用於IP頭部)、IP相關的宏、IPv4/IPv6頭部結構體以及TCP、UDP和STCP頭部結構體。
原文鏈接:http://www.jianshu.com/p/3a843bb24333
作者:半天妖
鏈接:http://www.jianshu.com/p/3a843bb24333
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
DPDK編程指南 2.概述