DPDK學習之開篇介紹

2021-09-14 06:48:40 字數 1630 閱讀 2433

1、前言

記得剛開始工作的時,老大將我安排到資料麵組,當時第一次聽說」資料面「這個概念,感覺挺新鮮的。誤打誤撞就開始搞了,剛開始接觸的時候,由於不懂其中的原理,覺得很神奇,因為報文的**是在應用層,通過乙個程序進行**。而傳統的報文**是基於核心的,要想控制報文,需要寫驅動程式。後面接觸了一段時間,發現原來報文**是基於intel開源的dpdk開發的,分為控制面和資料面。這就是當前比較火熱的軟體定義網路sdn的一種應用場景。dpdk應用程式是執行在使用者空間上利用自身提供的資料平面庫來收發資料報,繞過了linux核心協議棧對資料報處理過程。linux核心將dpdk應用程式看作是乙個普通的使用者態程序,包括它的編譯、連線和載入方式和普通程式沒有什麼兩樣。intel為什麼要搞乙個dpdk出來呢?有什麼優勢呢?運用了哪些技術呢?帶著這些疑問,加深學習一下。

2、背景分析

網路剛開始時,只是在小範圍內使用,併發量和響應時間要求並不高,而隨著網路的普及,網路的範圍越來越大,對伺服器的併發量和響應時間要求越來越高,從而出現c10k問題。而現在c10k問題已經得到解決,又出現新的挑戰,為了滿足日益增長的需求主要採用分布式集群來分擔負荷,應對大量的使用者請求。對網路的要求越來越高。

網路的核心是報文的**過程,linux網路是通過核心協議棧進行**的,報文控制平面和資料**平面沒有分離,不適合處理大規模網路資料報,因為linux分為核心區和使用者區,報文先進入核心區然後拷貝到使用者區,供給上層應用程式處理。並且為了全面的支援使用者空間的各個功能,協議棧中嵌入了大量用於對接的介面。如果能讓應用程式直接接管網路資料報處理、記憶體管理以及cpu排程,那麼效能可以得到乙個質的提公升。

如今的處理器都是多核,而且記憶體也越來越大,可以提高多核和大記憶體的擴充套件性,減少cpu多核之間任務的切換,記憶體cache miss,因為記憶體的訪問速度永遠也趕不上cache和cpu的頻率,為了能讓效能平行擴充套件,最好是少訪問。

要提高網路報文**,從如下幾個方面著手:

1.控制層留給linux做,其它資料層全部由應用程式來處理。

2.減少系統排程、系統呼叫、系統中斷,上下文切換等

3.摒棄linux核心協議棧,將資料報傳輸到使用者空間定製協議棧

4.使用多核程式設計技術替代多執行緒,將os綁在指定核上執行

5.針對smp系統,使cpu盡量使用所在numa系統節點的記憶體,減少記憶體刷寫

6.使用大頁面,減少訪問

7.採用無鎖技術解競爭

3、dpdk的優勢

dpdk攔截中斷,不觸發後續中斷流程,並繞過協議棧,通過uio技術將網絡卡收到的報文拷貝到應用層處理,報文不再經過核心協議棧。減少了中斷,dpdk的包全部在使用者控制項使用記憶體池管理,核心控制項與使用者空間的記憶體互動不用進行拷貝,只做控制權轉移,減少報文拷貝過程,提高報文的**效率。

dpdk核心技術如下:

(1)通過uio技術將報文拷貝到應用空間處理

(2)通過大頁記憶體,降低cache miss ,提高命中率,進而cpu訪問速度

(3)通過cpu親和性,繫結網絡卡和執行緒到固定的core,減少cpu任務切換

(4)通過無鎖佇列,減少資源競爭

接下來深入學習總結一下dpdk所用到的技術,加深理解。

ABP理論學習之開篇介紹

返回總目錄 為了和2016年春節賽跑,完成該系列部落格,我犧牲了今天中午的時間來完成該系列的第一篇 開篇介紹。開篇介紹嘛,讀過大學教材的同學都知道,這玩意總是那麼無聊,跟考試沒關係,乾脆直接跳過,呵呵,多麼美好的大學時光啊!不過,現在想想,開篇介紹確實不怎麼重要,它只是告訴我們今後我要開始講什麼了,...

ABP理論學習之開篇介紹

返回總目錄 為了和2016年春節賽跑,完成該系列部落格,我犧牲了今天中午的時間來完成該系列的第一篇 開篇介紹。開篇介紹嘛,讀過大學教材的同學都知道,這玩意總是那麼無聊,跟考試沒關係,乾脆直接跳過,呵呵,多麼美好的大學時光啊!不過,現在想想,開篇介紹確實不怎麼重要,它只是告訴我們今後我要開始講什麼了,...

機器學習之開篇

機器學習,本質來講,就是基於大數量的資料,尋找一種規律。然後根據找尋出的規律將未知目標值的資料確認目標值的過程。期間涉及到了資料,演算法。近幾年由於計算機硬體的公升級,大規模計算成為可能,所以機器學習又開始興起。資料是學習的 起初你拿到的是一堆陌生的資料,老闆可能給你一項任務,目標是在這一堆資料中確...