本節書摘來自華章出版社《深入淺出dpdk》一書中的第1章,第1.5節軟體包處理的潛力——再識dpdk,作者朱河清,梁存銘,胡雪焜,曹水 等,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
1.5 軟體包處理的潛力——再識dpdk
dpdk很好地将ia上包處理的性能提升到一個高度,這個高度已經達到很多網絡應用場景的最低要求,使得滿足要求的場景下對于網絡業務軟化産生積極的作用。
1.5.1 dpdk加速網絡節點
在了解了ia上包處理面臨的根本性挑戰後,我們會對dpdk所取得的性能提升感到異常興奮。更令人興奮的是,按照dpdk所倡導的方法,随着處理器的每一代更新,在ia上的性能提升以很高的斜率不斷發酵。當千兆、萬兆接口全速轉發已不再是問題時,dpdk已将目标伸向百萬兆的接口。
dpdk軟體包内有一個最基本的三層轉發執行個體(l3fwd),可用于測試雙路伺服器整系統的吞吐能力,實驗表明可以達到220gbit/s的資料封包吞吐能力。值得注意的是,除了通過硬體或者軟體提升性能之外,如今dpdk整系統封包吞吐能力上限已經不再受限于cpu的核數,目前瓶頸在于pcie(io總線)的lane數。換句話說,系統性能的整體i/o天花闆不再是cpu,而是系統所提供的所有pcie lane的帶寬,能插入多少個高速以太網接口卡。
在這樣的性能基礎上,網絡節點的軟化就成為可能。對于網絡節點上運轉的不同形态的網絡功能,一旦軟化并适配到一個通用的硬體平台,随之一個自然的訴求可能就是軟硬體解耦。解耦正是網絡功能虛拟化(nfv)的一個核心思想,而硬體解耦的多個網絡功能在單一通用節點上的隔離共生問題,是另一個核心思想虛拟化诠釋的。當然這個虛拟化是廣義的,在不同層面可以有不同的支撐技術。
nfv有很多訴求,業務面高性能,控制面高可用、高可靠、易運維、易管理等。但沒有業務面的高性能,後續的便無從談起。dpdk始終為高性能業務面提供堅實的支撐,除此以外,dpdk立足ia的cpu虛拟化技術和io的虛拟化技術,對各種通道做持續優化改進的同時,也對虛拟交換(vswitch)的轉發面進化做出積極貢獻。應對絕對高吞吐能力的要求,dpdk支援各種i/o的sr-iov接口;應對高性能虛拟主機網絡的要求,dpdk支援标準virtio接口;對虛拟化平台的支撐,dpdk從kvm、vmware、xen的hypervisor到容器技術,可謂全平台覆寫。
可以說,在如火如荼的網絡變革的大背景下,dpdk以強勁的驅動力加速各種虛拟化的網絡功能部署到現實的網絡節點上。
1.5.2 dpdk加速計算節點
dpdk之于網絡節點,主要集中在資料面轉發方面,這個很容易了解;對于計算節點,dpdk也擁有很多潛在的機會。
c10k是it界的一個著名命題,甚至後續衍生出了關于c1m和c10m的讨論。其闡述的一個核心問題就是,随着網際網路發展,随着資料中心接口帶寬不斷提升,計算節點上各種網際網路服務對于高并發下的高吞吐有着越來越高的要求。詳見[ref1-5]。
但是單一接口帶寬的提高并不能直接導緻高并發、高吞吐服務的發生,即使用到了一系列系統方法(異步非阻塞,線程等),但網絡服務受限于核心協定棧多核水準擴充上的不足以及建立拆除連接配接的高開銷,開始逐漸阻礙進一步高并發下高帶寬的要求。另一方面,核心協定棧需要考慮更廣泛的支援,并不能為特定的應用做特殊優化,一般隻能使用系統參數進行調優。
當然,核心協定棧也在不斷改進,而以應用為中心的趨勢也會不斷推動使用者态協定棧的湧現。有基于bsd協定棧移植的,有基于多核模型重寫的原型設計,也有将整個linux核心包裝成庫的。它們大多支援以dpdk作為i/o引擎,有些也将dpdk的一些優化想法加入到協定棧的優化中,取得了比較好的效果。
可以說,由dpdk加速的使用者态協定棧将會越來越多地支撐起計算節點上的網絡服務。
1.5.3 dpdk加速存儲節點
可以說,了解dpdk的核心方法,并加以恰當地實踐,可以将i/o在ia多核的性能提升有效地拓展到更多的應用領域,并産生積極的意義。
1.5.4 dpdk的方法論
dpdk采用了很多具體優化方法來達到性能的提升,有一些是利用ia軟體優化的最佳實踐方法,還有一些是利用了ia的處理器特性。這裡希望脫離這一個個技術細節,嘗試着去還原一些核心的指導思想,試圖從方法論的角度去探尋dpdk成功背後的原因,但願這樣的方法論總結,可以在開拓未知領域的過程中對大家有所助益。
1.專用負載下的針對性軟體優化
專用處理器通過硬體架構專用優化來達到高性能,dpdk則利用通用處理器,通過優化的專用化底層軟體來達到期望的高性能。這要求dpdk盡可能利用一切平台(cpu,晶片組,pcie以及網卡)特性,并針對網絡負載的特點,做針對性的優化,以發掘通用平台在某一專用領域的最大能力。
2.追求可水準擴充的性能
利用多核并行計算技術,提高性能和水準擴充能力。對于産生的并發幹擾,遵循臨界區越薄越好、臨界區碰撞越少越好的指導原則。資料盡可能本地化和無鎖化,追求吞吐率随核數增加而線性增長。
3.向cache索求極緻的實作優化性能
相比于系統優化和算法優化,實作優化往往較少被提及。實作優化對開發者的要求展現在需要對處理器體系結構有所了解。dpdk可謂集大量的實作優化之大成,而這些方法多數圍繞着cache進行,可以說能娴熟地駕馭好cache,在追求極緻性能的路上就已經成功了一半。
4.理論分析結合實踐推導
性能的天花闆在哪,調優是否還有空間,是否值得花更多的功夫繼續深入,這些問題有時很難直接找到答案。分析、推測、做原型、跑資料、再分析,通過這樣的螺旋式上升,慢慢逼近最優解,往往是實踐道路上的導航明燈。條件允許下,有依據的理論量化計算,可以更可靠地明确優化目标。