衝破內核限制:使用 DPDK 提高網絡應用程序的性能
一、DPDK
數據平面開發套件 (DPDK,Data Plane Development Kit) 是由 6WIND,Intel 等多家公司開發,主要基於 Linux 系統運行,用於快速數據包處理的函數庫與驅動集合,可以極大提高數據處理性能和吞吐量,提高數據平面應用程序的工作效率。
1.1 工作環境
DPDK 的環境抽象層嚮應用與函數庫隱藏了底層環境的細節,因而能擴展到任何處理器上使用。就操作系統來說,它提供了對 Linux 和 FreeBSD 的支持。
1.2 工作原理
DPDK 使用了輪詢 (polling) 而不是中斷來處理數據包。在收到數據包時,經 DPDK 重載的網卡驅動不會通過中斷通知 CPU,而是直接將數據包存入內存,交付應用層軟件通過 DPDK 提供的接口來直接處理,這樣節省了大量的 CPU 中斷時間和內存拷貝時間。
1.3DPDK 技術核心技術
DPDK 網絡
①網絡協議棧
dpdk-arpdpdk-icmpdpdk-udpdpdk-ipdpdk-tcp
②dpdk 組件
dpdk-mpdpdk-acldpdk-knidpdk-timerdpdk-bpfdpdk-mbuf
③dpdk 經典項目
dpdk-dnsdpdk-gatewaydpdk-natdpdk-ddosdpdk-firewall
dpdk -switchdpdk-pktgen
DPDK 框架
①可拓展的矢量數據包處理框架 vpp(c/c++)
vpp命令詳解mac/ip轉發pluginddos nodeload_balance pluginNAT pluginflowtable pluginvpp源碼
②DPDK 的虛擬交換機框架 OV
S 0vS三大組件ovs-vswitchd ,ovsdb-server,openvswitch.ko0vS報文處理機制0vS 4種數據路徑VXLAN數據協議
③golang 的網絡開發框架 nff-go(golang)
AntiddosFirewallIpsecnetcap
④輕量級的 switch 框架 snabb(lua)
12vpnSnabbnfvIpfixlwaftr
⑤高效磁盤 io 讀寫 spdk©
NVMe,I/OAT,IDXD, Virtio,VMD後端塊設備NVMe/RBD/AIO 存儲服務bdev與Blobstore 存儲協議iSCSI,NVMe,vhost-scsi
DPDK 源碼
①內核驅動
igb_uioVfiokni
②內存
MbufMempool
③協議
IpsecBpfPciFlow_classify
④虛擬化
VhostVirtio
⑤cpu
RcuRingSched
⑥安全
SecurityCryptodevcompressdev
性能測試
①性能指標
吞吐量
bps拆鏈/建鏈pps併發最大時延最小時延平均時延負載包速fps丟包率
②測試方法
測試用例vpp sandboxperf3灌包rfc2544
③測試工具
perf3TrexTestpmdpktgen-dpdk
1.4DPDK 技術特點
傳統的數據包捕獲瓶頸往往在於 Linux Kernel,數據流需要經過 Linux Kernel,就會帶來 Kernel Spcae 和 User Space 數據拷貝的消耗;系統調用的消耗;中斷處理的消耗等。
DPDK 針對 Linux Kernel 傳統的數據包捕獲模式的問題,進行了一定程度的優化。DPDK 的優化可以概括爲:
-
UIO+mmap 實現零拷貝(zero copy)
-
UIO+PMD 減少中斷和 CPU 上下文切換
-
HugePages 減少 TLB miss
-
其他代碼優化
內核弊端:
-
1、中斷處理:當網絡中大量數據包到來時,會頻繁產生中斷請求,頻繁的中斷會產生較高的性能開銷、並造成上下文的切換產生時延。
-
2、內存拷貝:網絡數據包到來時,網卡通過 DMA 等拷貝到內核緩衝區,內核協議棧再從內核空間拷貝到用戶態空間,在 Linux 內核協議棧中,這個耗時操作甚至佔到了數據包整個處理流程的 57.1%。
-
3、局部性失效:目前主流處理器都是多個 CPU 核心的,這意味着一個數據包的處理可能跨多個 CPU 核心。比如:一個數據包可能中斷在 cpu0,內核態處理在 cpu1,用戶態處理在 cpu2,這樣跨多個核心,容易造成 CPU 緩存失效,造成局部性失效。
DPDK 優點:
從前面的分析得知目前網絡 IO 的實現的方式中,內核是導致性能瓶頸的原因所在,要解決性能問題就需要繞過內核,直接在用戶態收發包。
-
1、內核 bypass:通過 UIO(Userspace I/O)旁路數據包,實現用戶態數據包收發,減少上下文切換以及內存拷貝。
-
2、使用多核編程代替多線程編程:設置 CPU 的親和性,將線程和 CPU 核進行一比一綁定,減少彼此之間調度切換。
-
3、使用大頁內存代替普通的內存:減少 cache-miss。
-
4、採用無鎖技術:解決資源競爭問題。
二、技術原理與架構
由於採用軟件轉發和軟件交換技術,單服務器內部的轉發能力是 NFV 系統的主要性能瓶頸。在各類高速轉發的 NFV 應用中,數據報文從網卡中接收,再傳送到虛擬化的用戶態應用程序(VNF)處理,整個過程要經歷 CPU 中斷處理、虛擬化 I/O 與地址映射轉換、虛擬交換層、網絡協議棧、內核上下文切換、內存拷貝等多個費時的 CPU 操作和 I/O 處理環節。
業內通常採用消除海量中斷、旁路內核協議棧、減少內存拷貝、CPU 多核任務分擔、Intel VT 等技術來綜合提升服務器數據平面的報文處理性能,普通用戶較難掌握。業界迫切需要一種綜合的性能優化方案,同時提供良好的用戶開發和商業集成環境,DPDK 加速技術方案成爲其中的典型代表。
DPDK 是一個開源的數據平面開發工具集,提供了一個用戶空間下的高效數據包處理庫函數,它通過環境抽象層旁路內核協議棧、輪詢模式的報文無中斷收發、優化內存 / 緩衝區 / 隊列管理、基於網卡多隊列和流識別的負載均衡等多項技術,實現了在 x86 處理器架構下的高性能報文轉發能力,用戶可以在 Linux 用戶態空間開發各類高速轉發應用,也適合與各類商業化的數據平面加速解決方案進行集成。
英特爾在 2010 年啓動了對 DPDK 技術的開源化進程,於當年 9 月通過 BSD 開源許可協議正式發佈源代碼軟件包,爲開發者提供支持。開源社區的參與者們大幅推進了 DPDK 的技術創新和快速演進, 而今它已發展成爲 SDN 和 NFV 的一項關鍵技術。
2.1 軟件架構
DPDK 的組成架構如下圖所示,相關技術原理概述如下:
圖中,在最底部的內核態(Linux Kernel)DPDK 有兩個模塊:KNI 與 IGB_UIO。其中,KNI 提供給用戶一個使用 Linux 內核態的協議棧,以及傳統的 Linux 網絡工具(如 ethtool, ifconfig)。IGB_UIO(igb_uio.ko 和 kni.ko. IGB_UIO)則藉助了 UIO 技術,在初始化過程中將網卡硬件寄存器映射到用戶態。
如圖所示,DPDK 的上層用戶態由很多庫組成,主要包括核心部件庫(Core Libraries)、平臺相關模塊 (Platform)、網卡輪詢模式驅動模塊(PMD-Natives&Virtual)、QoS 庫、報文轉發分類算法(Classify)等幾大類,用戶應用程序可以使用這些庫進行二次開發,下面分別簡要介紹。
核心部件庫
該模塊構成的運行環境是建立在 Linux 上,通過環境抽象層 (EAL) 的運行環境進行初始化,包括:HugePage 內存分配、內存 / 緩衝區 / 隊列分配與無鎖操作、CPU 親和性綁定等;其次,EAL 實現了對操作系統內核與底層網卡 I/O 操作的屏蔽(I/O 旁路了內核及其協議棧),爲 DPDK 應用程序提供了一組調用接口,通過 UIO 或 VFIO 技術將 PCI 設備地址映射到用戶空間,方便了應用程序調用,避免了網絡協議棧和內核切換造成的處理延遲。另外,核心部件還包括創建適合報文處理的內存池、緩衝區分配管理、內存拷貝、以及定時器、環形緩衝區管理等。
平臺相關模塊
其內部模塊主要包括 KNI、能耗管理以及 IVSHMEM 接口。其中,KNI 模塊主要通過 kni.ko 模塊將數據報文從用戶態傳遞給內核態協議棧處理,以便用戶進程使用傳統的 socket 接口對相關報文進行處理;能耗管理則提供了一些 API,應用程序可以根據收包速率動態調整處理器頻率或進入處理器的不同休眠狀態;另外,IVSHMEM 模塊提供了虛擬機與虛擬機之間,或者虛擬機與主機之間的零拷貝共享內存機制,當 DPDK 程序運行時,IVSHMEM 模塊會調用核心部件庫 API,把幾個 HugePage 映射爲一個 IVSHMEM 設備池,並通過參數傳遞給 QEMU,這樣,就實現了虛擬機之間的零拷貝內存共享。
輪詢模式驅動模塊
PMD 相關 API 實現了在輪詢方式下進行網卡報文收發,避免了常規報文處理方法中因採用中斷方式造成的響應延遲,極大提升了網卡收發性能。此外,該模塊還同時支持物理和虛擬化兩種網絡接口,從僅僅支持 Intel 網卡,發展到支持 Cisco、Broadcom、Mellanox、Chelsio 等整個行業生態系統, 以及基於 KVM、VMWARE、 XEN 等虛擬化網絡接口的支持。
DPDK 還定義了大量 API 來抽象數據平面的轉發應用,如 ACL、QoS、流分類和負載均衡等。並且,除以太網接口外,DPDK 還在定義用於加解密的軟硬件加速接口(Extensions)。
2.2 大頁技術
處理器的內存管理包含兩個概念:物理內存和虛擬內存。Linux 操作系統裏面整個物理內存按幀(frames)來進行管理,虛擬內存按照頁(page)來進行管理。
內存管理單元(MMU)完成從虛擬內存地址到物理內存地址的轉換。內存管理單元進行地址轉換需要的信息保存在一個叫頁表(page table)的數據結構裏面,頁表查找是一種極其耗時的操作。爲了減少頁表的查找過程,Intel 處理器實現了一塊緩存來保存查找結果,這塊緩存被稱爲 TLB(Translation Lookaside Buffer),它保存了虛擬地址到物理地址的映射關係。所有虛擬地址在轉換爲物理地址以前,處理器會首先在 TLB 中查找是否已經存在有效的映射關係,如果沒有發現有效的映射,也就是 TLS miss,處理器再進行頁表的查找。頁表的查找過程對性能影響極大,因此需要儘量減少 TLB miss 的發生。x86 處理器硬件在缺省配置下,頁的大小是 4K,但也可以支持更大的頁表尺寸,例如 2M 或 1G 的頁表。使用了大頁表功能後,一個 TLB 表項可以指向更大的內存區域,這樣可以大幅減少 TLB miss 的發生。早期的 Linux 並沒有利用 x86 硬件提供的大頁表功能,僅在 Linux 內核 2.6.33 以後的版本,應用軟件纔可以使用大頁表功能,具體的介紹可以參見 Linux 的大頁表文件系統(hugetlbfs)特性。
DPDK 則利用大頁技術,所有的內存都是從 HugePage 裏分配,實現對內存池 (mempool) 的管理,並預先分配好同樣大小的 mbuf,供每一個數據包使用。
2.3 輪詢技術
傳統網卡的報文接收 / 發送過程中,網卡硬件收到網絡報文,或發送完網絡報文後,需要發送中斷到 CPU,通知應用軟件有網絡報文需要處理。在 x86 處理器上,一次中斷處理需要將處理器的狀態寄存器保存到堆棧,並運行中斷服務程序,最後再將保存的狀態寄存器信息從堆棧中恢復。整個過程需要至少 300 個處理器時鐘週期。對於高性能網絡處理應用,頻繁的中斷處理開銷極大降低了網絡應用程序的性能。
爲了減少中斷處理開銷,DPDK 使用了輪詢技術來處理網絡報文。網卡收到報文後,直接將報文保存到處理器 cache 中(有 DDIO(Direct Data I/O)技術的情況下),或者保存到內存中(沒有 DDIO 技術的情況下),並設置報文到達的標誌位。應用軟件則週期性地輪詢報文到達的標誌位,檢測是否有新報文需要處理。整個過程中完全沒有中斷處理過程,因此應用程序的網絡報文處理能力得以極大提升。
2.4CPU 親和技術
現代操作系統都是基於分時調用方式來實現任務調度,多個進程或線程在多核處理器的某一個核上不斷地交替執行。每次切換過程,都需要將處理器的狀態寄存器保存在堆棧中, 並恢復當前進程的狀態信息,這對系統其實是一種處理開銷。將一個線程固定一個核上運行, 可以消除切換帶來的額外開銷。另外將進程或者線程遷移到多核處理器的其它核上進行運行時,處理器緩存中的數據也需要進行清除,導致處理器緩存的利用效果降低。
CPU 親和技術,就是將某個進程或者線程綁定到特定的一個或者多個核上執行,而不被遷移到其它核上運行,這樣就保證了專用程序的性能。
DPDK 使用了 Linux pthread 庫,在系統中把相應的線程和 CPU 進行親和性綁定, 然後相應的線程儘可能使用獨立的資源進行相關的數據處理。
2.5UIO 技術
dpdk 能夠繞過內核協議棧,本質上是得益於 UIO 技術,通過 UIO 能夠攔截中斷,並重設中斷回調行爲,從而繞過內核協議棧後續的處理流程。UIO 設備的實現機制其實是對用戶空間暴露文件接口,比如當註冊一個 UIO 設備 uioX,就會出現文件 /dev/uioX,對該文件的讀寫就是對設備內存的讀寫。除此之外,對設備的控制還可以通過 /sys/class/uio 下的各個文件的讀寫來完成。
2.6 內存池技術
dpdk 在用戶空間實現了一套精巧的內存池技術,內核空間和用戶空間的內存交互不進行拷貝,只做控制權轉移。這樣,當收發數據包時,就減少了內存拷貝的開銷。
2.7 大頁內存管理
dpdk 實現了一組大頁內存分配、使用和釋放的 API,上層應用可以很方便使用 API 申請使用大頁內存,同時也兼容普通的內存申請。
2.8 無鎖環形隊列
dpdk 基於 Linux 內核的無鎖環形緩衝 kfifo 實現了自己的一套無鎖機制。支持單生產者入列 / 單消費者出列和多生產者入列 / 多消費者出列操作,在數據傳輸的時候,降低性能的同時還能保證數據的同步。
2.9poll-mode 網卡驅動
DPDK 網卡驅動完全拋棄中斷模式,基於輪詢方式收包,避免了中斷開銷。
2.10NUMA
dpdk 內存分配上通過 proc 提供的內存信息,使 CPU 核心儘量使用靠近其所在節點的內存,避免了跨 NUMA 節點遠程訪問內存的性能問題。
2.11 多核調度框架
dpdk 基於多核架構,一般會有主從核之分,主核負責完成各個模塊的初始化,從核負責具體的業務處理。
三、DPDK 在 AWCloud 中的應用
DPDK(Data Plane Development Kit)數據平面開發工具集,爲 Intel architecture(IA)處理器架構下用戶空間高效的數據包處理提供庫函數和驅動的支持,它不同於 Linux 系統以通用性設計爲目的,而是專注於網絡應用中數據包的高性能處理。DPDK 應用程序是運行在用戶空間上利用自身提供的數據平面庫來收發數據包,繞過了 Linux 內核協議棧對數據包處理過程。加速數據的處理,用戶可以在用戶空間定製協議棧,滿足自己的應用需求。相對傳統的基於內核的網絡數據處理,DPDK 對從內核層到用戶層的網絡數據流程進行了重大突破。
DPDK 功能用於加速雲主機和物理主機處理網絡數據包的速度。配合大頁內存和 CPU Affinity 等一系列技術,繞過系統對網絡數據包處理的繁瑣過程,提升網絡性能。
雲平臺採用 DPDK 技術滿足網絡性能優化,如下圖所示:
3.1 高性能網絡技術
傳統的網絡設備(交換機、路由器等)爲了快速處理數據包而嵌入了 NP 處理器(Network Process), 內置硬件電路實現高速轉發數據包。隨着雲計算的發展以 CPU 爲核心、操作系統是 linux, 網絡設備都是虛擬化,沒有 NP 處理器。
傳統網絡框架處理流程:
隨着雲計算產業的異軍突起,網絡技術的不斷創新,越來越多的網絡設備基礎架構逐步向基於通用處理器平臺的架構方向融合,從傳統的物理網絡到虛擬網絡,從扁平化的網絡結構到基於 SDN 分層的網絡結構,無不體現出這種創新與融合。
這在使得網絡變得更加可控制和成本更低的同時,也能夠支持大規模用戶或應用程序的性能需求,以及海量數據的處理。究其原因,其實是高性能網絡編程技術隨着網絡架構的演進不斷突破的一種必然結果。
C10K 到 C10M 問題的演進
如今,關注的更多是 C10M 問題(即單機 1 千萬個併發連接問題)。很多計算機領域的大佬們從硬件上和軟件上都提出了多種解決方案。從硬件上,比如說,現在的類似很多 40Gpbs、32-cores、256G RAM 這樣配置的 X86 服務器完全可以處理 1 千萬個以上的併發連接。
但是從硬件上解決問題就沒多大意思了,首先它成本高,其次不通用,最後也沒什麼挑戰,無非就是堆砌硬件而已。所以,拋開硬件不談,我們看看從軟件上該如何解決這個世界難題呢?
這裏不得不提一個人,就是 Errata Security 公司的 CEO Robert Graham,他在 Shmoocon 2013 大會上很巧妙地解釋了這個問題。
他提到了 UNIX 的設計初衷其實爲電話網絡的控制系統而設計的,而不是一般的服務器操作系統,所以,它僅僅是一個數據負責數據傳送的系統,沒有所謂的控制層面和數據層面的說法,不適合處理大規模的網絡數據包。最後他得出的結論是:
OS 的內核不是解決 C10M 問題的辦法,恰恰相反 OS 的內核正式導致 C10M 問題的關鍵所在。
基於 OS 內核的數據傳輸有什麼弊端?
1、中斷處理。當網絡中大量數據包到來時,會產生頻繁的硬件中斷請求,這些硬件中斷可以打斷之前較低優先級的軟中斷或者系統調用的執行過程,如果這種打斷頻繁的話,將會產生較高的性能開銷。
2、內存拷貝。正常情況下,一個網絡數據包從網卡到應用程序需要經過如下的過程:數據從網卡通過 DMA 等方式傳到內核開闢的緩衝區,然後從內核空間拷貝到用戶態空間,在 Linux 內核協議棧中,這個耗時操作甚至佔到了數據包整個處理流程的 57.1%。
3、上下文切換。頻繁到達的硬件中斷和軟中斷都可能隨時搶佔系統調用的運行,這會產生大量的上下文切換開銷。另外,在基於多線程的服務器設計框架中,線程間的調度也會產生頻繁的上下文切換開銷,同樣,鎖競爭的耗能也是一個非常嚴重的問題。
4、局部性失效。如今主流的處理器都是多個核心的,這意味着一個數據包的處理可能跨多個 CPU 核心,比如一個數據包可能中斷在 cpu0,內核態處理在 cpu1,用戶態處理在 cpu2,這樣跨多個核心,容易造成 CPU 緩存失效,造成局部性失效。如果是 NUMA 架構,更會造成跨 NUMA 訪問內存,性能受到很大影響。
5、內存管理。傳統服務器內存頁爲 4K,爲了提高內存的訪問速度,避免 cache miss,可以增加 cache 中映射表的條目,但這又會影響 CPU 的檢索效率。
6、協議棧的低效性。Linix 誕生之初就是爲電話電報控制而設計的,它的控制平面和數據轉發平面沒有分離,不適合處理大規模網絡數據包。並且爲了全面的支持用戶空間的各個功能,協議棧中嵌入了大量用於對接的接口, 如果能讓應用程序直接接管網絡數據包處理、內存管理以及 CPU 調度,那麼性能可以得到一個質的提升。爲了達到這個目標,第一個要解決的問題就是繞過 Linux 內核協議棧,因爲 Linux 內核協議棧性能並不是很優秀,如果讓每一個數據包都經過 Linux 協議棧來處理,那將會非常的慢。像 Wind River 和 6 Wind Gate 等公司自研的內核協議棧宣稱比 Linux UDP/TCP 協議棧性能至少提高 500% 以上,因此能不用 Linux 協議棧就不用。不用協議棧的話當然就需要自己寫驅動了,應用程序直接使用驅動的接口來收發報文。PF_RING,Netmap 和 intelDPDK 等可以幫助你完成這些工作,並不需要我們自己去花費太多時間。Intel 官方測試文檔給出了一個性能測試數據,在 1S Sandbridge-EP 8*2.0GHz cores 服務器上進行性能測試,不用內核協議棧在用戶態下吞吐量可高達 80Mpps(每個包處理消耗大約 200 cpu clocks),相比之下,使用 Linux 內核協議棧性能連 1Mpps 都無法達到。
7、多核協同問題。多核的可擴展性對性能提升也是非常重要的,因爲服務器中 CPU 頻率提升越來越慢,納米級工藝改進已經是非常困難的事情了,但可以做的是讓服務器擁有更多的 CPU 和核心,像國家超級計算中心的天河二號使用了超過 3w 顆 Xeon E5 來提高性能。在程序設計過程中,即使在多核環境下也很快會碰到瓶頸,單純的增加了處理器個數並不能線性提升程序性能,反而會使整體性能越來越低。一是因爲編寫代碼的質量問題,沒有充分利用多核的並行性,二是服務器軟件和硬件本身的一些特性成爲新的瓶頸,像總線競爭、存儲體公用等諸多影響性能平行擴展的因素。那麼,我們怎樣才能讓程序能在多個 CPU 核心上平行擴展:儘量讓每個核維護獨立數據結構;使用原子操作來避免衝突;使用無鎖數據結構避免線程間相互等待;設置 CPU 親緣性,將操作系統和應用進程綁定到特定的內核上,避免 CPU 資源競爭;在 NUMA 架構下儘量避免遠端內存訪問
綜合以上問題,可以看出內核本身就是一個非常大的瓶頸所在。那很明顯解決方案就是想辦法繞過內核。
3.2 解決方案探討
針對以上弊端,分別提出以下技術點進行探討:
-
控制層和數據層分離。將數據包處理、內存管理、處理器調度等任務轉移到用戶空間去完成,而內核僅僅負責部分控制指令的處理。這樣就不存在上述所說的系統中斷、上下文切換、系統調用、系統調度等等問題。
-
使用多核編程技術代替多線程技術,並設置 CPU 的親和性,將線程和 CPU 核進行一比一綁定,減少彼此之間調度切換。
-
針對 NUMA 系統,儘量使 CPU 核使用所在 NUMA 節點的內存,避免跨內存訪問。
-
使用大頁內存代替普通的內存,減少 cache-miss。
-
採用無鎖技術解決資源競爭問題。
經很多前輩先驅的研究,目前業內已經出現了很多優秀的集成了上述技術方案的高性能網絡數據處理框架,如 wind、windriver、netmap、dpdk 等,其中,Intel 的 dpdk 在衆多方案脫穎而出,一騎絕塵。DPDK 目前支持的 CPU 體系架構包括 x86、ARM、PowerPC(PPC),支持的網卡列表:包括主流使用 Intel 82599(光口)、Intel x540(電口)。
dpdk 全稱 data plane development kit(數據平面轉發工具),爲 Intel 處理器架構下用戶空間高效的數據包處理提供了庫函數和驅動的支持,數據包的控制層和數據層分開,dpdk 繞過 linux 內核協議棧將數據包的接受處理放到應用層。
也就是 dpdk 繞過了 Linux 內核協議棧對數據包的處理過程,在用戶空間實現了一套數據平面來進行數據包的收發與處理。在內核看來,dpdk 就是一個普通的用戶態進程,它的編譯、連接和加載方式和普通程序沒有什麼兩樣。
四、DPDk 應用場景
dpdk 作爲優秀的用戶空間高性能數據包加速套件,現在已經作爲一個 “膠水” 模塊被用在多個網絡數據處理方案中,用來提高性能。如下是衆多的應用。
4.1 網絡虛擬化
網絡虛擬化是一種將物理網絡資源虛擬化爲多個邏輯網絡資源的技術,它可以幫助企業節省網絡設備成本,提高網絡資源利用率。DPDK 可以幫助網絡虛擬化平臺實現高性能、低延遲的數據包處理,從而提高虛擬網絡的性能和可靠性。
4.2 雲計算
雲計算是一 - 種將計算資源虛擬化爲多個邏輯計算資源的技術,它可以幫助企業節省計算資源成本,提高計算資源利用率。DPDK 可以幫助雲計算平臺實現高性能、低延遲的數據包處理,從而提高雲計算的性能和可靠性。
4.3 網絡安全
網絡安全是一種保護網絡資源免受惡意攻擊的技術,它可以幫助企業保護網絡資源的安全性和可靠性。DPDK 可以幫助網絡安全平臺實現高性能、低延遲的數據包處理,從而提高網絡安全的性能和可靠性。
4.45G 通信
5G 通信是一 - 種新一代的移動通信技術,它可以幫助企業實現更快、更可靠的移動通信服務。DPDK 可以幫助 5G 通信平臺實現高性能、低延遲的數據包處理,從而提高 5G 通信的性能和可靠性。
4.5 數據面(虛擬交換機)
-
OVS:Open vSwitch 是一個多核虛擬交換機平臺,支持標準的管理接口和開放可擴展的可編程接口,支持第三方的控制接入。
-
VPP:是 cisco 開源的一個高性能的包處理框架,提供了交換 / 路由功能,在虛擬化環境中,使它可以當做一個虛擬交換機來使用。在一個類 SDN 的處理框架中,它往往充當數據面的角色。經研究表明,VPP 性能要好於 ovs+dpdk 的組合,但它更適用於 NFV,適合做特定功能的網絡模塊。
-
Lagopus:是另一個多核虛擬交換的實現,功能和 OVS 差不多,支持多種網絡協議,如 Ethernet,VLAN,QinQ,MAC-in-MAC,MPLS 和 PBB,以及隧道協議,如 GRE,VxLan 和 GTP。
-
Snabb: 是一個簡單且快速的數據包處理工具箱。
4.6 數據面(虛擬路由器)
-
OPENCONTRAIL:一個集成了 SDN 控制器的虛擬路由器,現在多用在 OpenStack 中,結合 Neutron 爲 OpenStack 提供一站式的網絡支持。
-
CloudRouter:一個分佈式的路由器。
4.7 用戶空間協議棧
-
mTCP:是一個針對多核系統的高可擴展性的用戶空間 TCP/IP 協議棧。
-
IwIP:針對 RAM 平臺的精簡版的 TCP/IP 協議棧實現。
-
Seastar:是一個開源的,基於 C++ 11/14 feature,支持高併發和低延遲的異步編程高性能庫。
-
f-stack:騰訊開源的用戶空間協議棧,移植於 FreeBSD 協議棧,粘合了 POSIX API,上層應用(協程框架,Nginx,Redis),純 C 編寫,易上手。
五、DPDK 的影響力
通信行業
通信行業正逐步遷移至虛擬化,以便在其網絡環境中增強彈性、靈活性和標準化,隨着時間的推移,這種趨勢的發展已經變得更加多元化。SDN、NFV、DPDK、Openflow 和 Open vSwitch 都得以使用。移動網的 PGW 網元和寬帶網絡的 BRAS 類轉發設備,對轉發性能有着非常高的要求。如果用 x86 架構的 NFV 服務器取代上述設備,由於 Linux 內核的限制和通用 I/O 報文讀寫方式,這種基於傳統 Linux 和虛擬化技術的轉發平面萬兆端口普遍僅有 1 Gbit/s 以內的轉發能力;而目前的電信級硬件轉發設備可以輕鬆做到 64 byte 小報文不分組丟失線速轉發。
下一代防火牆
持續優化網路安全需要不斷改進防火牆的實施,這將受益於 DPDK 並不斷髮展。下一代防火牆也可以是 NFV 解決方案的一部分。用於簡單數據分組過濾的基本防火牆已演進多年,可以執行更加高級的應用,比如入侵檢測與防禦 (IPS)、網絡殺毒、IPsec、SSL 和應用控制等。這些功能均位於數據平臺,要求對數據流進行深度數據包檢查、具備加密和壓縮功能,以及執行大量數據分組內容處理。下一代防火牆在設計時運用了採用 DPDK 的 Wind River 網絡加速平臺以及 QuickAssist 。DPDK 提供了相應的機制,支持通過其他高性能方法來替代 Linux 系統調用,從而避免 Linux 內核出現的常見問題。Wind River 網絡加速平臺能夠加速 Apache 服務器 等本機 Linux 應用,併爲移植在網絡加速引擎上的安全應用提供更高的加速性能。
大數據分析
關於涉及大數據分析的使用案例,Aspera 公司與英特爾公司研究了超高速數據傳輸解決方案,該解決方案能夠在裸機和虛擬化硬件平臺上幫助商用互聯網連接達到可預測的超高 WAN 傳輸速度,包括超過往返時間爲數百毫秒的網絡,以及常見遠距離 WAN 幾個百分點的數據分組丟失率。藉助 DPDK,軟件工程師可減少收發數據分組所需的內存副本數量。Aspera 公司因此成功地將測試系統上單個流數據的傳輸速度提高至 37.75 Gbit/s,加上以太網幀和 IP 數據分組標頭,網絡利用率達到了 39 Gbit/s。通過在基於內核的虛擬機 (KVM) 管理程序上進行測試,對虛擬化平臺的傳輸性能開始了初步研究,並實現了 16.1 Gbit/s 的初始傳輸速度。
電網
作爲全球最大的電力公司,中國國家電網公司承擔着向大約 11 億人口供電的堅決任務。SGCC 依賴高性能計算集羣確保電網的安全和平穩運行。伴隨着中國電網規模的不斷擴大,SGCC 急需增強其全數字實時仿真系統,以滿足國家日益增長的電力供應需求。DPDK 是其中一項關鍵組件,幫助將 ADPSS 的延遲降到 50μs 之內。這也是爲 3,000 臺發電機和 30,000 根電網線路創建大型電力系統仿真的必要條件。
六、DPDK 市場發展
DPDK 的大多數應用最初是在電信領域。隨着 CSP 採用網絡虛擬化來降低運營成本並加快新服務的部署,他們虛擬化了需要高吞吐量和 / 或低延遲的用例,例如路由器,防火牆,無線電訪問網絡(RAN)和演進的分組核心(EPC)。虛擬化平臺的供應商,在這些情況下,VNF 和應用程序
已在其產品中利用了 DPDK,以實現 CSP 的性能目標。隨着 CSP 探索新的邊緣託管應用,例如視頻緩存,監控,增強現實(AR),輔助駕駛,零售和工業物聯網,DPDK 仍然是實現積極性能目標的關鍵技術。
類似 DPDK 最先在電信應用程序中, 對數據包處理功能的性能要求一樣, DPDK 越來越多地應用於企業和雲當中。例如,在 2018 年,VMware 引入了他們的 NSX-T 數據中心軟件定義基礎結構的基於 DPDK 的邊緣配置。此版本的 NSX-T 地址需要具有可變數據包大小的高數據包吞吐量的應用程序以及支持具有以下功能的高速 NIC 的服務器高達 100Gbps 的北 / 南流量。通常,南北向流的包大小各不相同,數據包處理要求,即使它們只佔總流量的不到 20%。在此用例中,通過使用帶有小數據包(64 字節)的 DPDK,英特爾和 VMware 的分析表明,性能提高了五倍。
同時有幾家公司已將 DPDK 用於金融應用,其中低延遲帶來了巨大的競爭優勢。例如,在高頻交易(HFT)中,延遲會直接影響交易者的交易效率 算法策略及其超越競爭對手的能力。信息週刊
估計,對於一家大型經紀公司來說,一毫秒每年價值 1 億美元。DPDK 是這個市場解決方案供應商開發所依賴的關鍵技術。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/aZ7HCcp_EvFzn9F2AoW1dA