Intel 推出 DPDK 開發包的意義是什麼?

2022-06-02 19:09:10 字數 2576 閱讀 4925

基於intel dpdk的包處理器,相較於基於核心網路協議棧的包處理器,優勢和價值在**?

基於dpdk的包處理效能,是否會比基於核心協議棧高,如果高會高多少,核心網路協議棧的瓶頸又主要在**?

市場

一句話:intel推出dpdk,就是為了讓自己的硬體產品賣得更好。

功能多了,靈活度高了,效能又不賴,誰不願意買喲?

dpdk只適合在x86平台下使用,其達到相當高的效能水平,仰賴的也完全是intel硬體內部的獨特機制(詳情參照樓上技術剖析)。這非常明顯地抬高了intel硬體產品的身價。

這應該是intel的主要目的。

需求

dpdk在我目前關注的領域(ip的做,非ip的也做;未來三五年的技術驗證做,未來三五十年的概念原型也做),主要是用於開發核心尚不具備的新功能。就更新速度而言,核心更新慢,基於dpdk的網路功能更新快。

將一種新的網路功能寫入核心並納入發行版linux,需要較為複雜的除錯和完善過程。一般要求該功能已經相當成熟可靠,且複雜度不高,適合在核心中執行。

而dpdk為廠商提供了更廣闊的發揮空間,可以說很好地推動了新機制、新技術的試驗和改良

首先dpdk總的來說是乙個2層的東西,也就是說本來驅動做的事情放到使用者層來做了,並且根據體系結構提供了各種各樣的優化,一般只用來做io,當然也提供了很多3層的庫,**的庫,lpm的庫等,dpdk並沒有提供開源的高效能tcp/ip協議棧。

不清楚樓主說的基於核心協議棧的包處理器具體指什麼,如果是指linux核心本身的協議棧的話,其實主要還是相容性和通用性。當然也有一些硬體實現的tcp offline engine,但是受限於硬體網絡卡記憶體的限制,在tcp的併發量和效能上並不會比基於dpdk的高。

至於具體效能,其實是可以量化的,10gbps ,64bytes包長,如果乙個包的處理時間大於67ns,那麼肯定會丟包,也就是說所有處理基本只能全部在cache裡,長時間穩定的不丟包還是很難做到的。

至於dpdk的輪詢機制,不管有沒有包,cpu都是100%,一旦收包的這個執行緒繫結的cpu被別的執行緒搶占,那麼效能會大幅度下降。

dpdk高效能限制非常非常多,配置也基本無法通用,要充分考慮numa+nuio等各種體系結構,一旦cpu配置錯了,效能渣得要死。

dpdk出來之前,也有很多類似的解決方案,基本原理都是大同小異,ioengine,netmap,ntop 10g系列。

不過dpdk和他們相比效能上沒有多大優勢,配置和操作上比他們都複雜的多,不穩定性也大,但是dpdk有乙個他們沒法比的巨大優勢,就是dpdk支援幾乎所有intel 網絡卡,包括最新出的網絡卡。如果過幾年不想在你的驅動程式裡手動新增新的intel網絡卡支援,那麼選擇dpdk沒錯的。

還有乙個,就是可以用gdb除錯了。

首先,dpdk和核心網路協議棧不是對等的概念。

dpdk只是單純的從驅動拿資料,然後組織成資料塊給人用,跑在使用者態。功能相當於linux的裝置無關介面層,處於socket之下,驅動之上。只不過linux協議棧的這部分在核心態。

你說的包處理器,很多時候是不用linux核心協議棧的,而是用專用包處理程式,類似於dpdk加上層應用處理。通常會有些硬體加速器,包處理效率更高些。缺點是一旦用不上某些功能,那些加速器就白費了。而純軟體處理就非常靈活,不過代價就是功耗和效能。

純dpdk效能非常高,intel自己給出的資料是,處理乙個包80時鐘週期。乙個3.6ghz的單核雙線程至強,64位元組小包,純**能力超過90mpps,也就是每秒9千萬包。

不知你有沒有看出來,80週期是乙個非常驚人的數字?正常情況下,處理器訪問一下ddr3記憶體都需要200個週期,而包處理程式所需要操作的資料,是從pcie裝置送到ddr記憶體的,然後再由處理器讀出來,也就是說,通常至少需要200週期。為啥現在80週期就能完成所有處理?我查了下文件,發現原因是使用了stashing或者叫direct cache access技術,對於pcie網絡卡發過來的包,會存在乙個特殊字段。x86的pcie控制器看到這個欄位後,會把包頭自動塞到處理器的快取,無序處理器來干預。由於包頭肯定是會被讀取的,這樣相當於提前**,訪問的時間大大縮短。

如果加上linux socket協議棧,比如跑個純http包**,那麼根據我的測量,會掉到3000-4000週期處理乙個包,單核雙線程在2.4mpps,每秒兩百四十萬包,效能差40倍。

效能高在哪?關鍵一點,dpdk並沒有做socket層的協議處理,當然快。其他的,主要是使用輪詢替代中斷,還有避免核心態到使用者態拷貝,並繫結核,避免執行緒切換開銷,還有避免進入系統呼叫的開銷,使用巨頁等。

還有很關鍵的一點,當執行緒數大於12的時候,使用linux協議棧會遇到互斥的瓶頸,用效能工具看的話,你會發現大部分的時間消耗在spin_lock上。解決方法之一是如github上面的fastsocket,改寫核心協議棧,使包始終在乙個核上處理,避免競爭等。缺點是需要經常自己改協議棧,且應用程式相容性不夠。

另外乙個方法是使用虛擬機器,每個特徵流只在乙個核處理,並用虛擬機器隔絕競爭,底層用dpdk做**,上層用虛擬機器做包處理,這樣保證了原生的linux協議棧被呼叫,做到完全相容應用程式。不過這種方法好像還沒有人做成開源的,最近似的是dpdk+虛擬交換機ovs的乙個專案。

如果你只想要dpdk的高效能加tcp/ip/udp的處理,不考慮相容性,那麼還可以去買商業**,我看了下**商的**介紹,純**效能大概在500-1000週期左右乙個包。

C 的HTTP開發包 HttpLib

select count from tb user info where dayofweek create date 3 and to days create date to days now and user role id 82 今日,在 codeplex 上看到乙個開源專案,對 http 協議...

你的密碼安全嗎? Intel推出密碼安全測試工具

網路購物現在很流行,但隨之帶來的資金安全性問題也逐漸被越來越多的人所所重視。密碼作為最重要的一道防範,你的密碼設定的足夠安全嗎?英特爾最近推出了乙個網頁可以幫助你確認一下密碼的安全性,通過筆者的實際測試,筆者常用的一些密碼在很快的時間內就會被破解,實在是令人擔憂啊!英特爾密碼測試網頁 感興趣的朋友不...

Redis 的 C 開發包 使用例子

1.首先安裝完畢redis 2.安裝boost 庫 4.上 include redisclient.h include include using namespace boost using namespace std shared ptrconnect client intmain shared ...