Programmer’s Guide算法
Release 2.1.0緩存
翻譯的目的是強化本身對dpdk的理解,看看2.1版本和如今使用的版本的差別,其次就是可能要走了,爲那些要上手dpdk,可是又不想看英文資料的同志們作貢獻,英語很差,有些地方多是本身理解的不對,或者是理解了翻譯不出來,看到不咋對的仍是去看英文資料對照一下吧,請叫我紅領巾,哈哈哈。網絡
文檔提供了關於軟件架構.開發環境的信息和優化指導.多線程
對於範例程序和編譯指令以及運行每一個例子的星系,請查看<DPDK Sample Applications User Guide>架構
對於編譯和運行程序總的說明見<DPDK Getting Started Guide>就是那個dpdk2.1開發入門手冊。框架
1.1 文檔總覽異步
這個仍是參見入門手冊吧,每一個文檔都有這個….ide
1.2 相關的出版物函數
下面這個文檔提供了使用dpdk開發程序相關的資料:性能
Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3A: System Programming Guide
Part1:架構概覽
這部分提供了DPDK架構概覽。dpdk的目的是針對數據平臺上快速包處理,提供一個簡單的,完整的框架。用戶使用代碼來理解一些技術細節,在其之上開發協議或者是計入本身的協議棧。這二者使用dpdk都是能夠實現的。
dpdk框架經過創建一個EAL來實現建立一系列的針對特定環境的庫,這是對於intel32/64位架構,linxu用戶態編譯或者是特定平臺的特殊模式。這些環境的建立時經過使用Make文件和配置文件。一旦EAL庫建立,用戶會將其鏈接到本身建立的程序上。在EAL以外的其它庫,包括哈希算法,最長前綴匹配,ring操做這些庫也都提供。範例程序用來向用戶展現如何使用dpdk的各類特性。
dpdk實現了包處理的完整的模式,在調用數據平臺處理程序前須要分配全部的資源,執行單元運行在邏輯處理核上。(這個我理解的是相對於物理核,intel的超線程將其弄成了兩個邏輯核,啥時候看到農企的超線程啊)。這種模式下不支持系統調度和全部的網卡設備都是輪詢方式的訪問。不使用中斷的方式就是由於中斷處理程序對性能的影響(深有感觸啊)。
此外對於那種運行到完成的模式,管道模式就是經過使用ring在覈之間傳遞報文或者是消息也被用到。這就可使得工做被分割成多步在不一樣的核上執行,這樣代碼運行的更加有效,計算性能用的更完全。
2.1 開發環境
這部分仍是看入門手冊吧,感受有點重疊了。
2.2 環境抽象層EAL
EAL提供了通用的接口,而隱藏了和環境相關的細節。EAL提供的服務有:
l DPDK加載和啓動
l 支持多進程和多線程的執行方式
l cpu親和性的設置
l 系統內存的分配和釋放
l 原子操做
l 定時器
l 訪問PCI總線
l 調試功能
l CPU 編號
l 中斷處理
l 告警操做內存管理
詳細信息看第三章《EAL》
2.3 核心模塊
核心模塊的一系列庫對高性能包處理程序提供了全部必須的接口。
Fig.2.1:核心模塊結構
2.3.1 ring管理(librte_ring)
ring結構提供了一個無鎖的多生產者,多消費者的先進先出的對指定大小表處理的API。它比無鎖隊列有不少好處,更容易部署,適合大量的操做且更快。ring在《Memory Pool Manager (librte_mempool)》中用到且能夠最爲不一樣的核之間或者是在邏輯核上的處理單元直接聯繫的通用通訊機制。
ring 緩存和它的用法見《Ring Library》
2.3.2 Memory Pool管理(librte_mempool)
Memory Pool管理的職責是在內存中分配指定數目對象的pool。每一個pool都有以名字區別的id且使用ring來存儲未使用的對象。它還提供了其它服務,例如對應core的處理對象入CPU緩存和自動對齊以確保對象都均勻相等處於每一個內存通道上。內存pool的分配見《Mempool Library》
2.3.3 網絡報文緩存管理(librte_mbuf)
mbuf庫提供了建立和銷燬buffer的能力,後者可能被dpdk程序用於存儲消息緩存。消息緩存能夠經過使用dpdk的mempool庫在程序啓動時建立且存於mempool中。這個庫提供了API申請和釋放mbufs,操做控制消息buffer(ctrlm-buf)用於普通的消息buffer,以及報文buffer(pktmbuf)用於傳輸網絡報文。
具體看《Mbuf Library》
2.3.4 定時器管理(librte_timer)
這個庫向dpdk執行單元提供定時器服務,提供異步執行某一個函數的能力。能夠是週期性的調用,也能夠是隻有一次的調用。 使用EAL提供的定時器接口獲取高精度時鐘且能在每一個核上基於須要初始化。
具體參見《timer libarary》
2.4 網卡的輪詢模式驅動PMD架構
dpdk包含支持1gbe,10gbbe和40gbe的PMD,且提供虛擬的以太網控制器,設計成工做在非異步的狀況下,基於信號的中斷機制。
參見《Poll Mode Driver》
2.5 包轉發算法支持
dpdk有哈希(librte_hash)和最長前綴匹配(LPM,librte_lpm)庫來支持包轉發。
詳見《Hash Library》和《LPM Library》
2.6 librte_net
這個庫收集了ip協議定義和方便的宏定義。這些都基於FreeBSD IP協議棧的代碼且包含協議號(IP頭用到的),ip相關的宏定義,IPv4和IPv6頭結構和SCTP頭結構。