dpdk基礎教程 框架簡介

2021-08-21 01:27:20 字數 1773 閱讀 5913

一、dpdk是什麼

---------

dpdk是專為快速收發包所開發的一系列的庫檔案和驅動**。dpdk最初的動機很簡單,為了證明intel架構多核處理器能夠支撐高效能資料報處理,現在dpdk逐漸成為通用多核處理器高效能資料報處理的業界標桿。

可以用來

1)在極短的時間裡面完成收發包

2)開發快速的抓包演算法。

3)執行第三方的快速路徑棧

二、傳統資料報處理流程下的弊端

---------------

在講解dpdk解決了什麼問題之前,我們先來看看高速資料報處理領域存在的難題

傳統網路裝置驅動包處理的流程如下:

1、資料到達網絡卡裝置

2、網**過dma取資料

3、取到資料後,網絡卡傳送中斷,喚醒處理器。

4、驅動軟體填充讀寫緩衝區資料結構

5、資料報文到達核心協議棧

6、將資料報文從核心態拷貝到使用者態

7、使用者態進而處理資料

報文傳統資料報處理方式存在以下兩個難題

1.每來一次報文,就觸發一次中斷,網際網路時代的頻寬從千兆到萬兆,甚至運營商級別的頻寬都達到了100萬兆,採用中斷模式時,大量資料的到來會導致頻繁的中斷觸發,系統承受不了如此頻繁的中斷。

2.資料報需要從核心態拷貝到使用者態,當資料量巨大時,這個拷貝操作會大幅的降低資料報處理效能。

三、dpdk使用的技術以及解決的問題

------------------

dpdk框架通過使用一些工程技術很少的解決了上述問題。

3.1 輪詢

採用類似網路程式設計中的poll模型來接收資料報,可避免中斷上下文切換帶來的開銷

3.2 使用者態驅動

linux下使用者態使用的技術是uio技術,後面會做詳細的介紹。在這種工作模式下,可避免不必要的核心拷貝,又避免了系統呼叫。乙個間接的影響在於,使用者態驅動不再受限於核心現有的資料格式和行為定義。

3.3 親和性和獨佔

dpdk工作在使用者態,但是執行緒的排程還是依賴於核心。利用cpu的親和性繫結,可以讓指定任務執行在某個cpu邏輯核心上,避免了執行緒在不同核心之間頻繁切換,不同核心之間切換容易導致cache miss和cache write back,從而造成效能下降。

3.4 大頁記憶體

利用大頁記憶體可以有效的降低tlb miss,從而減少訪存的開銷。

3.5 軟體調優

比如結構體的cache line對齊

比如資料在多核間訪問避免跨cache line訪問

比如適時的預讀取資料

比如多元資料批量操作

3.6 充分挖掘網絡卡效能,使用硬體的新特性

三、dpdk應用場景

------------------

而dpdk最大的優點就是改進小封包吞吐量與作業負荷效能,傳統的網路架構都是針對大封包吞吐量進行最佳化,而intel® dpdk可以解決小封包所帶來效能不佳的問題。

這幾年電信網路雲化逐漸成為不可逆轉的趨勢,而電信網路是典型的管道類業務,用ovs遠遠無法滿足動輒上百g的**需求,

因此dpdk被廣泛應用。

華為,愛立信,思科等電信裝置商的高**電信雲裝置基本都已經支援dpdk,在全球上百家主流運營商部署測試活商用,如at&t,vodafone,中國移動等。

除了應用在企業終端外, intel dpdk 也可以在軟體定義網路 (sdn) 與網路功能虛擬化 (nfv) 中扮演著重要的角色。

相信讀完這篇部落格,你對dpdk的理解有了乙個總體上的認識。從下節開始,我開始講解一些dpdk開發中的基礎概念,

了解這些概念有助於後續更好的理解和使用dpdk框架

下一課傳送門

Python基礎教程 簡介

python 是乙個高層次的結合了解釋性 編譯性 互動性和物件導向的指令碼語言。python 的設計具有很強的可讀性,相比其他語言經常使用英文關鍵字,其他語言的一些標點符號,它具有比其他語言更有特色語法結構。python 是一種解釋型語言 這意味著開發過程中沒有了編譯這個環節。類似於php和perl...

postman基礎教程 01簡介

postman是乙個比較簡單方便的介面測試工具,會寫幾篇文章總結一下postman的基本使用 postman上手容易,提供錄製外掛程式,提高case編寫速度,官方文件齊全,使用者眾多,但是也存在劣勢比如可擴充套件性較差,無法與資料庫結合,非開源,case校驗方式較少 日常使用足夠了,後面會總結一下用...

Django框架 基礎教程(總)

django是乙個開放源 的web應用框架,由python寫成。django遵守bsd版權,初次發布於2005年7月,並於2008年9月發布了第乙個正式版本1.0 mvc框架,全稱角model view controller,是軟體工程的一種架構模式,這個模式把軟體系統分為三個部分 模型 model...