交換機、路由器、防火墻等網(wǎng)絡(luò)設(shè)備通常需要實時處理大量數(shù)據(jù)包。在現(xiàn)代網(wǎng)絡(luò)中,數(shù)據(jù)包處理是一個非常重要的環(huán)節(jié)。傳統(tǒng)上,高效的數(shù)據(jù)包處理需要使用專門且昂貴的硬件,而數(shù)據(jù)平面開發(fā)套件 ( DPDK )能在低成本商用硬件上做到這一點。通過使用商用硬件,還可以將網(wǎng)絡(luò)功能轉(zhuǎn)移到云端,并在虛擬化環(huán)境中運行它們。
DPDK最初是由 Intel 于2010年發(fā)起的,Intel 的 Venky Venkatesan 被稱為“ DPDK之父”。2017年4月,DPDK成為Linux基金會下的一個項目。目前,許多開源項目已經(jīng)采用了DPDK,包括 MoonGen、mTCP、Ostinato、Lagopus、Fast Data (FD.io)、Open vSwitch、OPNFV 和 OpenStack。
| DPDK框架當(dāng)然,DPDK也面臨著一些挑戰(zhàn),包括無法支持某些網(wǎng)卡;對 Windows 的支持有限;調(diào)試比較困難;版本兼容性問題等。
01.DPDK如何改進數(shù)據(jù)包處理?
傳統(tǒng)的數(shù)據(jù)包處理方式是數(shù)據(jù)包先到內(nèi)核最后再到用戶層進行處理。這種方式會增加額外的延遲和CPU開銷,嚴重影響數(shù)據(jù)包處理的性能。DPDK 繞過內(nèi)核,在用戶空間中實現(xiàn)快速數(shù)據(jù)包處理。它本質(zhì)上是一組網(wǎng)絡(luò)驅(qū)動程序和庫。環(huán)境抽象層 ( EAL ) 從應(yīng)用程序中抽象出特定于硬件的操作。下圖顯示了在數(shù)據(jù)包到達應(yīng)用程序之前,POSIX調(diào)用的傳統(tǒng)處理是如何通過內(nèi)核空間的。DPDK縮短了這條路徑,并直接在NIC和用戶空間應(yīng)用程序之間移動數(shù)據(jù)包。
傳統(tǒng)的處理是中斷驅(qū)動的,當(dāng)數(shù)據(jù)包到達時,NIC會中斷內(nèi)核。DPDK轉(zhuǎn)而使用輪詢,避免了與中斷相關(guān)的開銷。這是由輪詢模式驅(qū)動程序 ( PMD ) 執(zhí)行的。另一個重要的優(yōu)化是零拷貝。在傳統(tǒng)網(wǎng)絡(luò)中,數(shù)據(jù)包從內(nèi)核空間的套接字緩沖區(qū)復(fù)制到用戶空間。DPDK避免了這種情況。DPDK的用戶空間對開發(fā)人員很有吸引力,因為不需要修改內(nèi)核。任何基于DPDK 的網(wǎng)絡(luò)堆棧都可以針對特定應(yīng)用進行優(yōu)化。
02.DPDK采用的數(shù)據(jù)包處理模型是什么?
大致有兩種處理模型:
# Run-to-CompletionCPU內(nèi)核處理數(shù)據(jù)包的接收、處理和傳輸。可以使用多個內(nèi)核,每個內(nèi)核與專用端口關(guān)聯(lián)。通過接收端擴展 ( RSS ),到達單個端口的流量可以分配到多個內(nèi)核。
# Pipeline每個內(nèi)核專用于特定的工作負載。例如,一個內(nèi)核可能處理數(shù)據(jù)包的接收/傳輸,而其他內(nèi)核則負責(zé)應(yīng)用程序處理。數(shù)據(jù)包通過memory rings在內(nèi)核之間傳遞。
對于單核多CPU部署,一個CPU分配給操作系統(tǒng),另一個分配給基于DPDK的應(yīng)用程序。對于多核部署,無論是否使用超線程,都可以為每個端口分配多個內(nèi)核。決定使用哪種模型取決于處理每個數(shù)據(jù)包所需的周期、跨軟件模塊的數(shù)據(jù)交換范圍、某些內(nèi)核的特定優(yōu)化、代碼可維護性等。
03.DPDK是否需要TCP / IP堆棧才能工作?
DPDK不包括TCP / IP堆棧。如果應(yīng)用程序需要用戶空間網(wǎng)絡(luò)堆棧,可以使用 F-Stack、mTCP、TLDK、Seastar 和 ANS 。它們通常提供阻塞和非阻塞套接字API,其中一些是基于 FreeBSD 實現(xiàn)的。由于省略了網(wǎng)絡(luò)堆棧,DPDK不會出現(xiàn)通用實現(xiàn)的低效率問題。應(yīng)用程序可以包括針對其用例進行優(yōu)化的網(wǎng)絡(luò)模塊,也可能存在一些不需要更高層(L2 以上)處理的用例。
04.在DPDK之前,廠商如何實現(xiàn)高效的數(shù)據(jù)包處理?
在DPDK之前,有專門的硬件可以進行高效的數(shù)據(jù)包處理。此類硬件可能使用定制的 ASIC、可編程 FPGA 或網(wǎng)絡(luò)處理單元 ( NPU ),這些專用硬件以優(yōu)化的方式完成數(shù)據(jù)包分類、流量控制、TCP / IP處理、加/解密、VLAN標記等任務(wù)。然而,此類硬件的購買和維護成本昂貴。升級和安全補丁的應(yīng)用非常耗時,并且需要全職的網(wǎng)絡(luò)管理員。一種解決方案是從專用硬件轉(zhuǎn)向商用現(xiàn)成 ( COTS ) 硬件。雖然這更具成本效益且更易于維護,但性能卻受到了影響。數(shù)據(jù)包從網(wǎng)卡 ( NIC ) 移動到操作系統(tǒng) ( OS ),并通過操作系統(tǒng)內(nèi)核堆棧進行處理。即使使用快速NIC,內(nèi)核堆棧也是一個瓶頸。系統(tǒng)調(diào)用、中斷、上下文切換、包復(fù)制和逐包處理都會降低性能。DPDK解決了COTS硬件上的性能問題,無需昂貴的定制硬件即可獲得高效的數(shù)據(jù)包處理。
05.業(yè)界誰在使用DPDK?
負載均衡、流分類、路由、訪問控制(防火墻)和流量監(jiān)管是DPDK的典型用途。DPDK不僅適用于電信行業(yè),也已在云環(huán)境和企業(yè)中使用。流量生成器 (TRex) 和存儲應(yīng)用(SPDK) 使用DPDK。下圖列出了DPDK支持的開源項目。
Open vSwitch ( OVS ) 移植到DPDK后表現(xiàn)出了 7 倍的性能提升。在物聯(lián)網(wǎng)應(yīng)用中,數(shù)據(jù)包很小,DPDK減少了延遲并允許每秒處理更多此類數(shù)據(jù)包。
在 5G 中,用戶平面功能 ( UPF ) 處理用戶數(shù)據(jù)包。延遲、抖動和帶寬是需要滿足的關(guān)鍵性能指標。一些研究人員已經(jīng)提出將DPDK用于5G UPF的實現(xiàn)。在邊緣網(wǎng)絡(luò)部署UPF時, 可以使用DPDK API連接UPF應(yīng)用 ( UPF -C) 和 SmartNIC ( UPF -U)。
06.DPDK面臨哪些挑戰(zhàn)?
DPDK需要一定的專業(yè)知識,開發(fā)人員需要學(xué)習(xí)DPDK的編程模型。他們需要知道如何管理內(nèi)存、如何在不復(fù)制的情況下傳遞數(shù)據(jù)包,以及如何使用多核架構(gòu)。例如,PID 命名空間可能會導(dǎo)致管理fbarray出現(xiàn)問題;使用mmap而不指定地址的進程可能會導(dǎo)致問題;線程必須正確分配給CPU內(nèi)核,才能獲得一致的性能;此外,DPDK庫還給開發(fā)人員提供了多種實現(xiàn)選擇,選擇錯誤會影響性能。由于繞過了內(nèi)核,失去了Linux 內(nèi)核提供的所有保護、實用程序( ifconfig、tcpdump)和協(xié)議(ARP 、IPSec)。調(diào)試和確定網(wǎng)絡(luò)問題的根本原因也是一項挑戰(zhàn)。最后,由于使用輪詢而不是中斷,因此即使只處理幾個數(shù)據(jù)包,DPDK也會導(dǎo)致 100% 的CPU使用率。
07.還有哪些替代選擇?
使用 Snabbswitch、Netmap 或 StackMap 可以通過內(nèi)核旁路實現(xiàn)更快的數(shù)據(jù)包處理。與DPDK一樣,它們在用戶空間中處理數(shù)據(jù)包。數(shù)據(jù)包完全繞過內(nèi)核堆棧。Snabbswitch 是用 Lua 編寫的,而DPDK是用 C 編寫的。PacketShader 對基于GPU的硬件進行內(nèi)核旁路。另一種方法是修改 Linux 內(nèi)核。例如 eXpress Data Path ( XDP ) 和基于遠程直接內(nèi)存訪問 ( RDMA ) 的網(wǎng)絡(luò)堆棧。其他有效的工具還包括 packet_mmap (但不會繞過內(nèi)核)和 PF_RING (帶有 ZC 驅(qū)動程序)。
審核編輯:黃飛
-
交換機
+關(guān)注
關(guān)注
21文章
2726瀏覽量
101462 -
路由器
+關(guān)注
關(guān)注
22文章
3822瀏覽量
116092 -
AI
+關(guān)注
關(guān)注
88文章
34421瀏覽量
275707 -
數(shù)據(jù)包
+關(guān)注
關(guān)注
0文章
269瀏覽量
24901 -
DPDK
+關(guān)注
關(guān)注
0文章
13瀏覽量
1831
原文標題:技術(shù)前沿:AI之高效數(shù)據(jù)包處理DPDK
文章出處:【微信號:AIOT大數(shù)據(jù),微信公眾號:AIOT大數(shù)據(jù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
CC1101在快速接收兩個數(shù)據(jù)包的處理方式?
CC1101在快速接收兩個數(shù)據(jù)包的處理方式是怎么樣的?
網(wǎng)絡(luò)數(shù)據(jù)包捕獲機制研究
基于Jpcap的數(shù)據(jù)包捕獲器的設(shè)計與實現(xiàn)
數(shù)據(jù)包過濾原理

什么是數(shù)據(jù)包?
高速數(shù)據(jù)包處理硬件加速技術(shù)

基于Intel dpdk數(shù)據(jù)包捕獲技術(shù)研究

利用以太網(wǎng)和DPDK驅(qū)動程序推動5G技術(shù)

如何使用DPDK和GPUdev增強內(nèi)聯(lián)數(shù)據(jù)包處理

使用 NVIDIA DOCA GPUNetIO 進行內(nèi)聯(lián) GPU 數(shù)據(jù)包處理
Linux如何操作將數(shù)據(jù)包發(fā)送出去

使用P4和Vivado工具簡化數(shù)據(jù)包處理設(shè)計

請問高端網(wǎng)絡(luò)芯片如何處理數(shù)據(jù)包呢?

評論