DPDK架構與特點


當年在某公司實習的時候,當時老大給了我一份DPDK的文檔,說是將來很有用,熟悉DPDK對能力提高也有幫助,就試着翻譯了

《Intel DPDK Getting Started Guide》和半個《Intel DPDK Programmers Guide》,后來忙着論文就沒再搞了。現在,發現

pf_ring的統計虛高了,只好重新擁抱DPDK了。

DPDK的代碼量還是很龐大的,分析代碼之前理清庫里面的各個部分的關系很有必要,下面的一張圖很好的表現了各部分關系。

先介紹DPDK中的幾個縮寫吧:

RTE:Run-Time Environment 

EAL:Environment Abstraction Layer

PMD: Poll-Mode Driver

Memory Manager (librte_malloc,內存管理器)

Librte_malloc 庫提供一組API,用於從hugepages創建的memzones中分配內存而不是在堆中分配。這有助於改善Linux用戶空間環境下典型的從堆中大量分配4KB頁面而容易引起TLB不命中。

Memory Pool Manager (librte_mempool,內存池管理器)

內存池管理器負責分配的內存中的pool對象。一個pool由名稱標識,並使用一個ring來存儲空閑對象。它提供了其他一些可選的服務,例如每個core的對象緩存和對齊方式幫助器,以確保將填充的對象在所有內存通道上均勻分布。

Ring Manager (librte_ring,環形隊列管理器)

在一個有限大小的表中,ring結構提供了一個無鎖的多生產者多消費者的FIFO API。相較於無鎖隊列,它有一些的優勢 ;更容易實現,適應於大容量操作和速度更快。一個ring用在內存池管理器(librte_mempool),也可用作cores和(或)在一個邏輯core之上的連接在一起的執行塊的通用溝通機制。

Network Packet Buffer Management (librte_mbuf,網絡報文緩沖管理)

mbuf 庫提供了創建和銷毀緩沖區,英特爾 ® DPDK 應用程序可能用來存儲消息緩沖。創建消息緩沖區在啟動時間和存儲在 mempool,並使用英特爾 ® DPDK mempool 庫。

此庫提供一組 API,用於分配或釋放 mbufs,操縱控制消息緩沖區(ctrlmbuf) ——普通的消息緩沖區,還操作數據包緩沖區 (pktmbuf) ­——用來進行網絡數據包。

Timer Manager (librte_timer,定時器管理)

timer庫向英特爾 ® DPDK 執行單位提供定時器服務,保證以異步方式執行函數的能力。它可以是定期調用,或只是一次性調用。它使用環境抽象層 (EAL) 提供的到的 HPET 接口來獲取精確時間的引用,並根據需求在每個核心啟動。

上面的介紹有點抽象,還是直接看代碼的目錄更具體些。

 

 接下來講講DPDK的特點。

 


免責聲明!

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



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