當前位置:
首頁 > 最新 > DPDK盒子使用手冊——DPDK入門

DPDK盒子使用手冊——DPDK入門

本章分為兩節,第一節介紹數據平面開發套件DPDK(Data Plane Development Kit)的基礎知識,第二節介紹DPDK盒子的使用方法。

一、DPDK簡介

本節首先介紹DPDK出現的行業背景,然後介紹DPDK概述、DPDK關鍵技術、DPDK開源代碼,最後介紹DPDK Lib庫。

1.1 DPDK背景

在過去10年里,乙太網介面技術也經歷了飛速發展。從早期主流的10Mbit/s與100Mbit/s,發展到千兆網(1Gbit/s)。到如今,萬兆(10Gbit/s)網卡技術成為數據中心伺服器的主流介面技術,近年來,Intel等公司還推出了40Gbit/s、100Gbit/s的超高速網路介面技術。而CPU的運行頻率基本停留在10年前的水平,嚴重阻礙了速度的提升,為了迎接超高速網路技術的挑戰,DPDK(Data Plane Development Kit),一個以軟體優化為主的數據面技術應時而生,它為今天NFV(Network Function Virtualization)技術的發展提供了絕佳的平台可行性。

網路處理器能夠迅速將數據報文接收入系統,比如將64位元組的報文以10Gbit/s的線速也就是14.88Mp/s(百萬報文每秒)收入系統,並且交由CPU處理,這在早期Linux和伺服器平台上無法實現。傳統上,網卡驅動程序運行在Linux的內核態,以中斷方式來喚醒系統處理,這和歷史形成有關。早期CPU運行速度遠高於外設訪問,所以中斷處理方式十分有效,但隨著晶元技術與高速網路介面技術的一日千里式發展,報文吞吐需要高達10Gbit/s的埠處理能力,市面上已經出現大量的25Gbit/s、40Gbit/s甚至100Gbit/s高速埠,主流處理器的主頻仍停留在3GHz以下。I/O超越CPU的運行速率,是橫在行業面前的技術挑戰。用輪詢來處理高速埠開始成為必然,這構成了DPDK運行的基礎。

1.2 DPDK概述

什麼是DPDK?對於用戶來說,它可能是一個性能出色的包數據處理加速軟體庫;對於開發者來說,它可能是一個實踐包處理新想法的創新工場;對於性能調優者來說,它可能又是一個絕佳的成果分享平台。當下火熱的網路功能虛擬化,則將DPDK放在一個重要的基石位置。雖然很難用短短几語就勾勒出DPDK的完整輪廓,但隨著認識的深入,我們相信你一定能夠認可它傳播的那些最佳實踐方法,從而將這些理念帶到更廣泛的多核數據包處理的生產實踐中去。DPDK最初的動機很簡單,就是證明IA多核處理器能夠支撐高性能數據包處理。隨著早期目標的達成和更多通用處理器體系的加入,DPDK逐漸成為通用多核處理器高性能數據包處理的業界標杆。

1.3 DPDK關鍵技術

如今,DPDK 應該已經很好地回答了IA多核處理器是否可以應對高性能數據包處理這個問題。而解決好這樣一個問題,也不是用了什麼憑空產生的特殊技術,更多的是從工程優化角度的迭代和實踐的融合。簡單地盤點一下這些技術,歸納如下。

◆ 輪詢,這一點很直接,可避免中斷上下文切換的開銷。之前提到Linux也採用該方法改進對大吞吐數據的處理,效果很好。

◆用戶態驅動,在這種工作方式下,既規避了不必要的內存拷貝又避免了系統調用。一個間接的影響在於,用戶態驅動不受限於內核現有的數據格式和行為定義。對Mbuf頭格式的重定義、對網卡DMA操作的重新優化可以獲得更好的性能。而用戶態驅動也便於快速地迭代優化,甚至對不同場景進行不同的優化組合。

◆親和性與獨佔,DPDK工作在用戶態,線程的調度仍然依賴內核。利用線程的CPU親和綁定的方式,特定任務可以被指定只在某個核上工作。好處是可避免線程在不同核間頻繁切換,核間線程切換容易導致因Cache Miss和Cache Write Back造成的大量性能損失。如果更進一步地限定某些核不參與Linux系統調度,就可能使線程獨佔該核,保證更多Cache Hit的同時,也避免了同一個核內的多任務切換開銷。

◆降低訪存開銷,網路數據包處理是一種典型的I/O密集型(I/O Bound)工作負載。無論是CPU指令還是DMA,對於內存子系統(Cache+DRAM)都會訪問頻繁。利用一些已知的高效方法來減少訪存的開銷能夠有效地提升性能。比如利用內存大頁能有效降低TLB Miss,比如利用內存多通道的交錯訪問能有效提高內存訪問的有效帶寬,再比如利用對於內存非對稱性的感知可以避免額外的訪存延遲。

◆軟體調優,調優本身並不能說是最佳實踐。這裡其實指代的是一系列調優實踐,比如結構的Cache Line對齊,比如數據在多核間訪問避免跨Cache Line共享,比如適時地預取數據,再如多元數據批量操作。這些具體的優化策略散布在DPDK各個角落。

◆利用IA新硬體技術,IA的最新指令集以及其他新功能一直是DPDK致力挖掘數據包處理性能的源泉。拿Intel ? DDIO技術來講,這個Cache子系統對DMA訪存的硬體創新直接助推了性能跨越式的增長。有效利用SIMD(Single Instruction Multiple Data)並結合超標量技術(Superscalar)對數據層面或者對指令層面進行深度並行化,在性能的進一步提升上也行之有效。另外一些指令(比如cmpxchg),本身就是Lockless數據結構的基石,而Crc32指令對與4 Byte Key的哈希計算也是改善明顯。

◆充分挖掘網卡的潛能,經過DPDK I/O加速的數據包通過PCIe網卡進入系統內存,PCIe外設到系統內存之間的帶寬利用效率、數據傳送方式(coalesce操作)等都是直接影響I/O性能的因素。在現代網卡中,往往還支持一些分流(如RSS,FDIR等)和Offload(如Checksum,TSO等)功能。DPDK充分利用這些硬體加速特性,幫助應用更好地獲得直接的性能提升。

隨著DPDK不斷豐滿成熟,也將自身逐步拓展到更多的平台和場景。從Linux到FreeBSD,從物理機到虛擬機,從加速網路I/O到加速存儲I/O,DPDK在不同緯度發芽生長。在NFV大潮下,無論是NFVI(例如,Virtual Switch)還是VNF,DPDK都用堅實有力的性能來提供基礎設施保障。

1.4 DPDK源碼介紹

本節以Release 17.02.0版本為例,介紹DPDK源碼包含的以下幾個子目錄。

文件介紹:

◆ lib:DPDK庫的源碼。

◆ drivers:DPDK輪詢驅動的源碼。

◆ app:DPDK應用程序的源碼(自動化測試)。

◆ examples:DPDK應用程序樣例源碼。

◆ devtools:開發DPDK代碼後,檢測代碼是否符合規範的腳本。

◆ usertools:DPDK的常用安裝配置腳本。

◆ Config、buildtools、mk:框架相關的Makefiles,腳本和配置文件。

1.5 DPDK Lib庫介紹

DPDK庫文件放在$(RTE_SDK)/lib目錄中。習慣上,我們調用庫的代碼來提供API給應用程序。通常,這裡會產生一個靜態庫(.a),不過內核模塊也在這個文件夾下。

在下面表格中對Lib庫的功能做進一步說明。

二、DPDK盒子

本節主要介紹盒子的硬體結構和連接使用方法。

2.1 DPDK盒子介紹

簡單來說,DPDK盒子是一個定製的、Mini的硬體盒子,預裝Linux系統和DPDK軟體,通過該盒子,使用者可以學習如何使用DPDK,也可以方便的開發基於DPDK的應用。DPDK盒子已經開發過三代了,下面簡要介紹一下。

第一代盒子

第一代DPDK盒子的組成:一個單板計算機(MinnowboardTurbot);IntelAtomE3826處理器(1M緩存,1.46GHz);SilverjawLure子板,Mini PCI槽;英特爾乙太網控制器I350(雙千兆),插入迷你PCI槽。

第二代盒子

第二代DPDK盒子(RCC-DFF 2220系統)組成:雙核IntelAtomC2338 CPU,2GB內存,2GbE乙太網埠,Nano-ITX外形,預裝DPDK軟體。

第三代盒子

第三代DPDK盒子(DPDK-2340四核系統)組成:四核IntelAtomE3845 CPU,2GB內存,2GbE i210乙太網埠,可支持四個RSS序列,預裝32GB SSD & DPDK。這次升級,無論處理器,內存,還是外觀都得到了大大加強。

第三代DPDK盒子(DPDK-2340四核系統)硬體規格:

◆英特爾四核Atom E3845 CPU,1.91GHz主頻,帶有AES-NI指令集

◆緊湊型nano-ITX外形120x120mm

◆2GB DDR3L non-ECC內存,1067MT/s,內置固定內存(不可擴展)

◆32GB M.2 SSD

◆2x 10/100 /1000Base-TX GbE乙太網埠(Intel乙太網控制器I210)

◆陽極氧化黑色外殼(美國製造)

◆1x USB 2.0埠

◆1x USB 3.0埠

◆高速和低速MinnowBoard Lure連接器

◆電源/狀態LED

◆控制台:HDMI

◆視頻:Intel高清顯卡1xHDMI輸出埠

◆AC/DC自適應開關電源適配器

◆運行溫度:0°C至70°C

◆FCC Part 15 Class A

◆CE Class A

◆IEC-60950

◆RoHS/WEEE

◆使用MinnowBoard Turbot四核心板——開源硬體嵌入式平台,可用於基於4 Core Intel Atom E3845 CPU的DPDK盒子中。

2.2 DPDK盒子使用指導

第一代DPDK盒子連接方法

第一代盒子的使用方法可參考第二代盒子。

第二代DPDK盒子連接方法

1. 通過USB2控制線連接電腦和DPDK盒子。

2. 在電腦上下載並安裝USB驅動(cp210x USB to UART)。

3. 打開Windows設備管理器並查看COM埠分配。

4. 打開Console客戶端工具(如putty、Xshell),選擇「Serial」,並將速度(波特率)設置為115200,埠號(根據實際查到的)設置為「COM3」,然後點擊「Open」連接盒子。

5. 登陸客戶端,用戶名「root」,密碼「password」。

6. 登錄盒子後,可以運行dpdk文件下官方的Examples,如下圖所示。

7. 例如,要運行helloworld用例,可按照下面步驟,先編譯後執行。

第三代DPDK盒子連接方法

1. 使用HDMI轉VGA連接線連接顯示器和DPDK盒子。

2. 將鍵盤和滑鼠的USB連接線連接DPDK盒子後面的USB口。

3. 登陸客戶端,用戶名「test」,密碼「tester」。

4. 登錄盒子後,可以運行dpdk文件官方的Examples,如下圖所示。

5. 例如,要運行helloworld用例,可按照下面步驟,先編譯後執行。

其他用例的執行可參考dpdk.org官方網站,或本系列文檔第二部分內容的實例講解。

DPDK盒子功能介紹

DPDK盒子第一個用處就是作為學習DPDK的平台,對於剛剛接觸DPDK的初學者,該平台主要的好處是提供了一個「已知」系統:可預測網路界面設置;可預測資源用性;出錯範圍有限;應用程序以標準方式運行,有已知標記知道要做什麼,知道有哪些資源,培訓者知道有多少內存,知道典型問題是什麼,運行系統時培訓者對於能進行的主題很熟悉。如果要建立許多驅動,可以挑選一些驅動,這是一個「已知」系統,可以限制出錯範圍。對於學生而言,還有一大優勢是可以看到、感受到這個盒子,親自建立系統,獲得更多親身感知的經驗。

除了初學者學習如何使用DPDK之外,開發者也可以在小盒子上輕鬆開發基於DPDK的小微型應用並進行部署,例如,做成一個家庭或者小型企業的網關,充當防火牆,進行流量監控等等。鑒於DPDK盒子的便攜性,開發者還可以使用基於DPDK的Pktgen,輕鬆將DPDK盒子改裝成一個發包器,用於支持客戶,現場Demo或者其他需要攜帶型發包儀器的場合。

經過本章的介紹,初學者已經對DPDK原理和DPDK盒子的使用有了基本的認識,更具體的應用案例將在後續的第二章、第三章進行詳細介紹,敬請關注。

說明:第三代DPDK盒子因沒有安裝網卡驅動,導致盒子暫時無法連接外網,用戶如果需要連接網路或者下載文件到盒子里,可以用以下方法解決。

1.下載igb的網卡驅動,並拷貝到盒子里,安裝驅動,把其中一個網卡綁定到igb驅動,該網口就可以連網使用。

2.先將文件下載到U盤,再通過USB拷貝到盒子里。

3.有USB WiFi的用戶,將USB WiFi插到盒子USB口,連接網路。

參考文獻:

朱河清等.深入淺出DPDK[M].北京:機械工業出版社,2016:1-10


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 SDNLAB 的精彩文章:

容器堆棧須知的八個要素
主流商用SD-WAN方案真的算是SDN嗎?

TAG:SDNLAB |