學習安排
在開始深入DPDK的時候我準備帶着這樣的幾個問題。
DPDK是幹什麼的?
DPDK存在的優勢是什麼?缺點又是什麼?
DPDK做什麼?
接下來的工作是什麼?
DPDK是幹什麼的?
通過查閱相關資料對這個問題有了一個初步的認識,DPDK(Data Plane Development Kit)通過名字就可以看出來這個是一個基於數據平面的開發套件。主要就是爲了實現高效靈活的數據包處理解決方案。其主體主要運行在用戶態,而不是我們常說的內核態(TCP/IP傳輸協議棧運行在內核態)。也可以這樣理解,DPDK就是繞過了TCP/IP協議棧將數據直接暴露在用戶空間。DPDK誕生的道理也比較簡單就是爲了證明IA處理器能夠支撐高性能數據包處理。
而目前主流的數據包處理平臺分爲三類:硬件加速器、網絡處理器、多核處理器。
n 硬件加速器:利用硬件模塊代替軟件算法充分利用硬件固有的快速特性,但是硬件加速也存在一定的問題,那就是針對不同的情況制定不同的電子電路系統,這樣很明顯的降低了該方式的靈活性和擴展性。
n 網絡處理器:設計的目的就是專門爲了處理數據包的一種可編程通用處理器。該技術採用多內核並行結構,一定程度上能提升數據包處理性能但是目前針對SDN這樣的大環境下,需要解決不同架構上的底層抽象等問題。而且成本比較高需要針對特定的領域設計,這也是限制發展的一大原因。
n 多核處理器:DPDK就是充分發揮多核處理器的性能,並加上大頁、輪詢以及CPU親和性的一系列優化不斷提升AI架構的性能,以提升數據包的轉發和處理能力,並結合着網絡負載和虛擬化的融合推動了NFV快速的發展。
簡單的來說,DPDK就是一套開發套件,通過提供各種不同的庫來優化和提升86系統架構對數據包處理的性能。
DPDK的優勢和劣勢是什麼?
上文中也提到了,DPDK是通過一系列庫提升cpu對數據包的處理。其實DPDK使用的技術也並不是特別高深,只要有三個UIO(用戶空間IO)、大頁、CPU親和性。這些特性本身都是linux系統本身提供的,雖然進行了封裝,但是使用的還是基本的技術。但是DPDK也有一定的侷限性,比如說在開發中開發週期長,代碼優化困難等問題。而且就目前所瞭解的是該技術僅支持linux操作系統(個人所瞭解),在測試的時候至少需要兩塊網卡,所以網卡只有一個的主機表示很無奈,再加一張網卡吧。
Dpdk能做什麼?
其實這個問題的回答比較寬泛,DPDK僅僅提供一個數據平面的接口,用戶完全可以利用這些接口做應用層的二次開發。比如開發基於DPDK在應用層的協議棧,防火牆等等。另外在負載均衡,DNS等等很多應用層的服務都是可以基於DPDK做重新設計和開發。
接下來怎樣開展工作?
光是理論的肯定不行,既然Intel公司提供了這樣一個優秀的開發套件,那麼利用該套件進行編程學習肯定是需要進行的下一步工作。但是問題來了,因爲沒有這方面開發的經驗,所以整個學習準備按照如下的方式組織:
進一步查閱和學習DPDK中存在的相關技術。
以實驗的方式記錄該套件的部署方式和實施。
分析樣例代碼,並深入源代碼(最好是能夠進行部分的樣例編寫和測試)。
準備設計和開發自己的應用。