DPDK學習之開篇介紹


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所用到的技術,加深理解。

4、參考資料

http://www.jianshu.com/p/0ff8cb4deaef  

https://chenghuiyu.gitbooks.io/openstack_neutron_dpdk/content/doc/3-dpdk/dpdk-tech.html 


免責聲明!

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



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