DPDK學習之開篇介紹

一、前言html

  記得剛開始工做的時,老大將我安排到數據面組,當時第一次據說」數據面「這個概念,感受挺新鮮的。誤打誤撞就開始搞了,剛開始接觸的時候,因爲不懂其中的原理,以爲很神奇,由於報文的轉發是在應用層,經過一個進程進行轉發。而傳統的報文轉發是基於內核的,要想控制報文,須要寫驅動程序。後面接觸了一段時間,發現原來報文轉發是基於intel開源的DPDK開發的,分爲控制面和數據面。這就是當前比較火熱的軟件定義網路SDN的一種應用場景。DPDK應用程序是運行在用戶空間上利用自身提供的數據平面庫來收發數據包,繞過了Linux內核協議棧對數據包處理過程。Linux內核將DPDK應用程序看做是一個普通的用戶態進程,包括它的編譯、鏈接和加載方式和普通程序沒有什麼兩樣。intel爲何要搞一個DPDK出來呢?有什麼優點呢?運用了哪些技術呢?帶着這些疑問,加深學習一下。linux

二、背景分析git

  網路剛開始時,只是在小範圍內使用,併發量和響應時間要求並不高,而隨着網路的普及,網路的範圍愈來愈大,對服務器的併發量和響應時間要求愈來愈高,從而出現C10k問題。而如今C10k問題已經獲得解決,又出現新的挑戰,爲了知足日益增加的需求主要採用分佈式集羣來分擔負荷,應對大量的用戶請求。對網路的要求愈來愈高。編程

  網路的核心是報文的轉發過程,linux網路是經過內核協議棧進行轉發的,報文控制平面和數據轉發平面沒有分離,不適合處理大規模網絡數據包,由於linux分爲內核區和用戶區,報文先進入內核區而後拷貝到用戶區,供給上層應用程序處理。而且爲了全面的支持用戶空間的各個功能,協議棧中嵌入了大量用於對接的接口。若是能讓應用程序直接接管網絡數據包處理、內存管理以及CPU調度,那麼性能能夠獲得一個質的提高。服務器

  現在的處理器都是多核,並且內存也愈來愈大,能夠提升多核和大內存的擴展性,減小CPU多核之間任務的切換,內存cache miss,由於內存的訪問速度永遠也趕不上cache和cpu的頻率,爲了能讓性能平行擴展,最好是少訪問。網絡

  要提升網路報文轉發,從以下幾個方面着手:多線程

  1.控制層留給Linux作,其它數據層所有由應用程序來處理。
  2.減小系統調度、系統調用、系統中斷,上下文切換等
  3.摒棄Linux內核協議棧,將數據包傳輸到用戶空間定製協議棧
  4.使用多核編程技術替代多線程,將OS綁在指定核上運行
  5.針對SMP系統,使CPU儘可能使用所在NUMA系統節點的內存,減小內存刷寫
  6.使用大頁面,減小訪問
  7.採用無鎖技術解競爭併發

三、DPDK的優點分佈式

  DPDK攔截中斷,不觸發後續中斷流程,並繞過協議棧,經過UIO技術將網卡收到的報文拷貝到應用層處理,報文再也不通過內核協議棧。減小了中斷,DPDK的包所有在用戶控件使用內存池管理,內核控件與用戶空間的內存交互不用進行拷貝,只作控制權轉移,減小報文拷貝過程,提升報文的轉發效率。性能

  DPDK核心技術以下:

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

  (2)經過大頁內存,下降cache miss ,提升命中率,進而cpu訪問速度

  (3)經過CPU親和性,綁定網卡和線程到固定的core,減小cpu任務切換

  (4)經過無鎖隊列,減小資源競爭

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

四、參考資料

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

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

相關文章
相關標籤/搜索