1、前言
記得剛開始工作的時,老大將我安排到數(shù)據(jù)面組,當時第一次聽說”數(shù)據(jù)面“這個概念,感覺挺新鮮的。誤打誤撞就開始搞了,剛開始接觸的時候,由于不懂其中的原理,覺得很神奇,因為報文的轉(zhuǎn)發(fā)是在應(yīng)用層,通過一個進程進行轉(zhuǎn)發(fā)。而傳統(tǒng)的報文轉(zhuǎn)發(fā)是基于內(nèi)核的,要想控制報文,需要寫驅(qū)動程序。后面接觸了一段時間,發(fā)現(xiàn)原來報文轉(zhuǎn)發(fā)是基于intel開源的DPDK開發(fā)的,分為控制面和數(shù)據(jù)面。這就是當前比較火熱的軟件定義網(wǎng)路SDN的一種應(yīng)用場景。DPDK應(yīng)用程序是運行在用戶空間上利用自身提供的數(shù)據(jù)平面庫來收發(fā)數(shù)據(jù)包,繞過了Linux內(nèi)核協(xié)議棧對數(shù)據(jù)包處理過程。Linux內(nèi)核將DPDK應(yīng)用程序看作是一個普通的用戶態(tài)進程,包括它的編譯、連接和加載方式和普通程序沒有什么兩樣。intel為什么要搞一個DPDK出來呢?有什么優(yōu)勢呢?運用了哪些技術(shù)呢?帶著這些疑問,加深學(xué)習一下。
2、背景分析
網(wǎng)路剛開始時,只是在小范圍內(nèi)使用,并發(fā)量和響應(yīng)時間要求并不高,而隨著網(wǎng)路的普及,網(wǎng)路的范圍越來越大,對服務(wù)器的并發(fā)量和響應(yīng)時間要求越來越高,從而出現(xiàn)C10k問題。而現(xiàn)在C10k問題已經(jīng)得到解決,又出現(xiàn)新的挑戰(zhàn),為了滿足日益增長的需求主要采用分布式集群來分擔負荷,應(yīng)對大量的用戶請求。對網(wǎng)路的要求越來越高。
網(wǎng)路的核心是報文的轉(zhuǎn)發(fā)過程,linux網(wǎng)路是通過內(nèi)核協(xié)議棧進行轉(zhuǎn)發(fā)的,報文控制平面和數(shù)據(jù)轉(zhuǎn)發(fā)平面沒有分離,不適合處理大規(guī)模網(wǎng)絡(luò)數(shù)據(jù)包,因為linux分為內(nèi)核區(qū)和用戶區(qū),報文先進入內(nèi)核區(qū)然后拷貝到用戶區(qū),供給上層應(yīng)用程序處理。并且為了全面的支持用戶空間的各個功能,協(xié)議棧中嵌入了大量用于對接的接口。如果能讓應(yīng)用程序直接接管網(wǎng)絡(luò)數(shù)據(jù)包處理、內(nèi)存管理以及CPU調(diào)度,那么性能可以得到一個質(zhì)的提升。
如今的處理器都是多核,而且內(nèi)存也越來越大,可以提高多核和大內(nèi)存的擴展性,減少CPU多核之間任務(wù)的切換,內(nèi)存cache miss,因為內(nèi)存的訪問速度永遠也趕不上cache和cpu的頻率,為了能讓性能平行擴展,最好是少訪問。
要提高網(wǎng)路報文轉(zhuǎn)發(fā),從如下幾個方面著手:
1.控制層留給Linux做,其它數(shù)據(jù)層全部由應(yīng)用程序來處理。
2.減少系統(tǒng)調(diào)度、系統(tǒng)調(diào)用、系統(tǒng)中斷,上下文切換等
3.摒棄Linux內(nèi)核協(xié)議棧,將數(shù)據(jù)包傳輸?shù)接脩艨臻g定制協(xié)議棧
4.使用多核編程技術(shù)替代多線程,將OS綁在指定核上運行
5.針對SMP系統(tǒng),使CPU盡量使用所在NUMA系統(tǒng)節(jié)點的內(nèi)存,減少內(nèi)存刷寫
6.使用大頁面,減少訪問
7.采用無鎖技術(shù)解競爭
3、DPDK的優(yōu)勢
DPDK攔截中斷,不觸發(fā)后續(xù)中斷流程,并繞過協(xié)議棧,通過UIO技術(shù)將網(wǎng)卡收到的報文拷貝到應(yīng)用層處理,報文不再經(jīng)過內(nèi)核協(xié)議棧。減少了中斷,DPDK的包全部在用戶控件使用內(nèi)存池管理,內(nèi)核控件與用戶空間的內(nèi)存交互不用進行拷貝,只做控制權(quán)轉(zhuǎn)移,減少報文拷貝過程,提高報文的轉(zhuǎn)發(fā)效率。
DPDK核心技術(shù)如下:
?。?)通過UIO技術(shù)將報文拷貝到應(yīng)用空間處理
?。?)通過大頁內(nèi)存,降低cache miss ,提高命中率,進而cpu訪問速度
?。?)通過CPU親和性,綁定網(wǎng)卡和線程到固定的core,減少cpu任務(wù)切換
(4)通過無鎖隊列,減少資源競爭
接下來深入學(xué)習總結(jié)一下dpdk所用到的技術(shù),加深理解。