0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

高性能網(wǎng)絡框架之XDP技術解析

jf_uPRfTJDa ? 來源: 移動Labs ? 2023-11-05 11:19 ? 次閱讀

導讀

談到高性能網(wǎng)絡處理,DPDK已成為用戶態(tài)網(wǎng)絡數(shù)據(jù)處理的基礎框架,其中最廣泛熟知的項目就是OVS-DPDK。然而由于DPDK完全旁路內(nèi)核,這會導致TCP/UDP等協(xié)議棧需要在用戶態(tài)重新實現(xiàn),且迄今還沒有較好的通用用戶態(tài)協(xié)議棧開源項目出現(xiàn)。在這種情況下,XDP借助于eBPF虛擬機技術在網(wǎng)卡驅(qū)動層實現(xiàn)高性能網(wǎng)絡框架,且其原生運行在內(nèi)核態(tài)可直通內(nèi)核TCP/UDP協(xié)議棧。XDP作為一種數(shù)據(jù)面高性能框架技術為平衡高速數(shù)據(jù)處理和協(xié)議棧兼容開辟了一個新的道路。

作者:韓文

單位:中國移動智慧家庭運營中心安全產(chǎn)品

1XDP的基本概念

XDP全稱eXpress Data Path,即快速數(shù)據(jù)路徑,是Linux內(nèi)核提供的高性能、可編程的網(wǎng)絡數(shù)據(jù)包處理框架。XDP會直接接管網(wǎng)卡的RX方向數(shù)據(jù)包,通過在內(nèi)核運行eBPF指令快速的處理報文并無縫對接內(nèi)核協(xié)議棧。

XDP不是內(nèi)核旁路,是在網(wǎng)卡和內(nèi)核協(xié)議棧之間增加了一個快速數(shù)據(jù)路徑。XDP借助于eBPF技術從而繼承了其可編程、即時實現(xiàn)、安全等優(yōu)良特性。

XDP智能網(wǎng)卡是XDP概念的延伸。在支持eBPF指令的智能網(wǎng)卡上,將CPU上XDP對應的eBPF指令下沉加載到智能網(wǎng)卡,這樣可以同時實現(xiàn)CPU資源節(jié)約和規(guī)則硬件卸載。

XDP借助eBPF技術提供了一個高性能網(wǎng)絡處理框架,用戶根據(jù)標準eBPF編程指南來自定義網(wǎng)絡處理行為。同時內(nèi)核新增AF_XDP協(xié)議族,在內(nèi)核XDP框架中被匹配的數(shù)據(jù)包通過其送抵用戶態(tài),這又將XDP的支持從內(nèi)核拓展到用戶態(tài)應用場景。

2XDP的整體框架

如下圖1,我們通過XDP整體框架圖來展示其在內(nèi)核系統(tǒng)中的相對位置以及其如何滿足數(shù)據(jù)平面開發(fā)框架的要求。

3aaea7f6-7aef-11ee-939d-92fbcf53809c.png

圖1 XDP整體框架圖

圖1包含了網(wǎng)卡設備、XDP框架、TCP/IP協(xié)議棧、Socket接口、應用層等各個層面,覆蓋了網(wǎng)絡數(shù)據(jù)包從網(wǎng)卡到服務端的數(shù)據(jù)流全過程。圖1中間的灰色部分(XDP Packet Processor)是XDP框架,其數(shù)據(jù)面處理單元在內(nèi)核中的相對位置處于網(wǎng)卡驅(qū)動和協(xié)議棧之間,實際運行在驅(qū)動層。從網(wǎng)卡到CPU處理器的網(wǎng)絡數(shù)據(jù)包經(jīng)由網(wǎng)卡驅(qū)動首先到達XDP框架,被運行在XDP框架中的用戶自定義eBPF程序處理,數(shù)據(jù)包的處理結(jié)果為丟棄(Drop)、轉(zhuǎn)發(fā)(Forward)、本地接受(Receive Local)等,結(jié)果為本地接受的網(wǎng)絡數(shù)據(jù)包延續(xù)原有內(nèi)核路徑繼續(xù)進入TCP/IP協(xié)議棧處理,結(jié)果為轉(zhuǎn)發(fā)或者丟棄的網(wǎng)絡數(shù)據(jù)包則直接在XDP框架中被直接處理(這部分流量在現(xiàn)實網(wǎng)絡中占據(jù)大頭,其執(zhí)行路徑相對傳統(tǒng)的內(nèi)核路徑被大大縮短)。圖1中間灰色部分(XDP Packet Processor)中的黑色虛線展示了上層控制對XDP框架中的eBPF程序進行加載/更新/配置等通道能力,內(nèi)核提供對應的系統(tǒng)調(diào)用來實現(xiàn)控制面對數(shù)據(jù)面的管控。圖1XDP整體框架圖完整的展示了XDP作為一個高性能網(wǎng)絡數(shù)據(jù)面和控制面集合的整體框架。

3XDP應用開發(fā)介紹

XDP框架以eBPF技術為基礎。BPF是一個通用目的RISC指令集。1992年,BPF第一次在Berkeley實驗室被提出。2013年,BPF被加強從而得到eBPF,并在2014年正式并入Linux內(nèi)核。eBPF提供了一種在各種內(nèi)核和應用事件發(fā)生時運行一小段程序的機制。如下圖2,我們講述eBPF的開發(fā)/運行過程及在XDP上的具體應用。

3ad6c0e2-7aef-11ee-939d-92fbcf53809c.png

圖2 典型eBPF開發(fā)、運行流程圖

圖2展示了一個典型的eBPF開發(fā)、運行全過程。開發(fā)者C語言的一個子集(內(nèi)核運行,不可用標準C庫)開發(fā)程序,然后用LLVM/clang編譯器將其編譯成eBPF指令(Bytecode),在eBPF驗證器(Verifier)檢驗通過后被內(nèi)核中的即時編譯器(JIT Compiler)將eBPF指令映射成處理器的原生指令(opcode)再加載到內(nèi)核各個模塊預設的鉤子(Hooks)處。其中XDP框架是內(nèi)核在網(wǎng)卡驅(qū)動開辟的一個網(wǎng)絡數(shù)據(jù)快速路徑的鉤子(Hooks)。內(nèi)核其他典型鉤子(Hooks)分別為內(nèi)核函數(shù) (kprobes)、用戶空間函數(shù) (uprobes)、系統(tǒng)調(diào)用、fentry/fexit、跟蹤點、網(wǎng)絡路由、TC、TCP擁塞算法、套接字等模塊。

XDP是內(nèi)核基于eBPF實現(xiàn)對網(wǎng)絡快速路徑的一個具體應用。下圖3我們羅列了內(nèi)核中支持eBPF鉤子(Hooks)節(jié)點的典型應用。

3ae928a4-7aef-11ee-939d-92fbcf53809c.png

圖3 eBPF支持眾多內(nèi)核鉤子應用

相比于傳統(tǒng)的用戶態(tài)/內(nèi)核態(tài)程序,eBPF/XDP有如下典型特征:

(1)如下圖4所示,內(nèi)核即時編譯器(in-kernel JIT Compiler)會將eBPF字節(jié)碼映射成性能更優(yōu)的處理器原生指令以實現(xiàn)高性能,同時其程序校驗器(verifier)會校驗程序安全性并提供沙箱運行環(huán)境。其安全檢查包含判斷是否有循環(huán),程序長度是否超過限制,程序內(nèi)存訪問是否越界,程序是否包含不可達的指令等。最強優(yōu)勢是可以在不中斷工作負載下實現(xiàn)實時更新。

3b065ece-7aef-11ee-939d-92fbcf53809c.png

圖4 eBPF加載、檢驗、編譯示意圖

(2)eBPF程序的內(nèi)核態(tài)與用戶態(tài)數(shù)據(jù)交換通過BPF maps來實現(xiàn),其類似進程間通信的共享內(nèi)存訪問。其支持的數(shù)據(jù)類型有Hash表、數(shù)組、LRU緩存(Least Recently Used)、 環(huán)形隊列、堆棧軌跡、LPM路由表(Longest Prefix match)。如下圖5所示,BPF Map承擔了用戶態(tài)和內(nèi)核態(tài)的數(shù)據(jù)交互角色。

3b1b38a8-7aef-11ee-939d-92fbcf53809c.png

圖5 BFP Map銜接用戶態(tài)和內(nèi)核態(tài)的數(shù)據(jù)交互

(3)eBPF通過提供輔助函數(shù)來彌補標準C庫的缺失。常見的如獲取隨機數(shù)、獲取當前時間、map訪問、獲取進程/cgroup上下文、處理網(wǎng)絡數(shù)據(jù)包和轉(zhuǎn)發(fā)、訪問套接字數(shù)據(jù)、執(zhí)行尾調(diào)用、訪問進程棧、訪問系統(tǒng)調(diào)用參數(shù)等,在實際開發(fā)中可通過man bpf-helpers命令獲取更多幫助信息。下圖6展示了一個bpf命名開頭的獲取隨機數(shù)輔助函數(shù)。

3b2b7970-7aef-11ee-939d-92fbcf53809c.png

圖6 BPF輔助函數(shù)范例-獲取隨機數(shù)

(4)相比純內(nèi)核kmodule等開發(fā)模式,eBPF提供了一種獨特的尾調(diào)用和函數(shù)調(diào)用機制。因受內(nèi)核??臻g寶貴及eBPF不支持循環(huán),遞歸深度限制(最大32)等原因,eBPF引入尾調(diào)用和函數(shù)調(diào)用來實現(xiàn)eBPF程序間跳轉(zhuǎn)。尾調(diào)用和函數(shù)調(diào)用機制對性能優(yōu)化做了充分設計,其中尾調(diào)用能復用當前的棧幀并跳轉(zhuǎn)至另外一個eBPF程序,具體細節(jié)請參考bpf_tail_call輔助函數(shù)使用手冊。由于eBPF程序彼此獨立,尾調(diào)用機制在事實上給開發(fā)者提供了以函數(shù)為單元的編排能力。從Linux 4.16和LLVM 6.0開始,eBPF開始支持函數(shù)調(diào)用,并且在內(nèi)核5.9以后支持尾調(diào)用和函數(shù)調(diào)用的協(xié)同工作。尾調(diào)用的缺點是生成的程序鏡像大但是省內(nèi)存;函數(shù)調(diào)用的優(yōu)點是鏡像小但是內(nèi)存消耗大。開發(fā)者可根據(jù)實際需要靈活選擇不同的方式。下圖7展示了eBPF程序尾調(diào)用和函數(shù)調(diào)用的混合協(xié)作過程,其中tail call為尾調(diào)用,bpf2bpf call為函數(shù)調(diào)用。

3b4449fa-7aef-11ee-939d-92fbcf53809c.png

圖7 eBPF程序尾調(diào)用和函數(shù)調(diào)用的混合協(xié)作

4XDP的同類技術對比

以目前最廣泛使用的用戶態(tài)數(shù)據(jù)面開發(fā)框架DPDK為對標,我們通過如下數(shù)據(jù)流圖來說明XDP和DPDK的實現(xiàn)差異。如下圖8,DPDK完全旁路內(nèi)核且運行在用戶態(tài),XDP在內(nèi)核中運行在網(wǎng)卡和內(nèi)核協(xié)議棧之間。DPDK是脫離內(nèi)核的一個全新數(shù)據(jù)平面開發(fā)框架,而XDP則是依附于內(nèi)核的一個快速數(shù)據(jù)路徑(相比原先的內(nèi)核網(wǎng)絡慢路徑)。

3b5f3cc4-7aef-11ee-939d-92fbcf53809c.png

圖8 數(shù)據(jù)流在XDP和DPDK數(shù)據(jù)平面上的走向差異

如下是XDP和DPDK具體的對比情況:

(1)DPDK會獨占CPU資源且需要大頁內(nèi)存。XDP對CPU不獨占也不需要大頁內(nèi)存。XDP對硬件的要求較DPDK更低。

(2)以DPDK為數(shù)據(jù)面框架的項目會是重開發(fā)人力資源投入,可參考典型項目FD.IO(VPP)和OVS-DPDK。XDP為內(nèi)核原生自帶的快速數(shù)據(jù)通道,是輕量級數(shù)據(jù)面框架。

(3)DPDK需要網(wǎng)卡驅(qū)動和用戶態(tài)協(xié)議棧等各層面的代碼支持和許可證支持。XDP直接由Linux基金會維護和發(fā)布,具體技術生態(tài)由其子項目IO Visor來維護。

(4)DPDK在大容量高吞吐等場景有優(yōu)勢。XDP在云原生等場景有優(yōu)勢。

目前XDP有如下應用場景的典型項目:

DDoS防御

防火墻

基于XDP的負載均衡

協(xié)議棧前處置

云原生應用服務優(yōu)化 (如對K8S,OpenStack,Docker等服務改進項目)

流量控制

5基于eBPF/XDP的著名開源項目

Cilium是使用eBPF和XDP為容器提供快速的內(nèi)核內(nèi)網(wǎng)絡和安全策略實施的開源項目。Cilium項目為Pod和外部服務之間的流量實現(xiàn)了分布式負載平衡,并且能夠完全取代kube-proxy,在eBPF中使用高效的哈希表,允許幾乎無限的擴展。它還支持高級功能,如集成入口和出口網(wǎng)關、帶寬管理和服務網(wǎng)格,并提供深度網(wǎng)絡和安全可見性和監(jiān)控。

如下圖9所示,eBPF/XDP(小蜜蜂)處于容器、Pod等服務和網(wǎng)卡之間,通過XDP技術來改善上層服務的性能和安全,其非常巧妙和安全的在內(nèi)核數(shù)據(jù)流節(jié)點動態(tài)完成之前內(nèi)核無法完成的工作。

3b732a2c-7aef-11ee-939d-92fbcf53809c.png

圖9 Cilium項目組件分布圖

圖10展示了Cilium項目中分別通過XDP和eBPF在內(nèi)核網(wǎng)卡和Socket層實現(xiàn)功能改善的一個具體案例。圖10左邊是在網(wǎng)卡驅(qū)動層XDP框架植入用戶態(tài)網(wǎng)絡處理代碼,右邊是在Socket層插入套接字處理代碼,這樣既可以在不修改內(nèi)核的前提下實現(xiàn)功能動態(tài)拓展又實現(xiàn)了對上層容器、Pod等典型節(jié)點應用的無感知功能升級。

3b8371ca-7aef-11ee-939d-92fbcf53809c.png

圖10 Cilium項目中通過XDP和eBPF對內(nèi)核進行功能擴展示意圖

Cilium項目為云原生場景下的服務性能提升和安全改進等方面提供了一個非常好的模范解決方案。如圖11,各類常見的云原生服務都得益于eBPF/XDP來實現(xiàn)性能提高和安全改進。

6DP的發(fā)展前景

為實現(xiàn)靈活的數(shù)據(jù)平面和加速NFV應用,Linux基金會成立子項目IO Visor以實現(xiàn)基于Linux內(nèi)核延伸出一個開放可編程的網(wǎng)絡數(shù)據(jù)面開源項目,XDP屬于IO Visor項目的子項目。Linux內(nèi)核沒有虛擬化是IO Visor在NFV場景下最大的挑戰(zhàn),XDP通過eBPF虛擬機即時實現(xiàn)技術來彌補這個缺陷。但是幾乎所有的虛擬機都運行在用戶空間,受制于eBPF虛擬機在內(nèi)核運行的安全性要求,將虛擬化相關的任務移植到內(nèi)核空間會是比較大的挑戰(zhàn)。

在性能改進方面,Sebastiano Miano等人于2019年使用XDP和TC鉤子掛載eBPF程序?qū)崿F(xiàn)了Linux的防火墻iptable,在規(guī)則數(shù)量提高的情況下提供相比原始iptable高數(shù)倍甚至數(shù)十倍的性能。Yoann Ghigoff等人于2021年更是基于eBPF和XDP、TC在內(nèi)核中實現(xiàn)了一層Memcached的緩存,達到了比DPDK內(nèi)核旁路方案還要高的性能。

XDP項目在傳統(tǒng)內(nèi)核模型和全新用戶態(tài)框架之間開盤了新的道路,用以填補新技術跨度過大帶來的資源投入陷阱。我們看到微軟在2022年宣布計劃在Windows平臺開始支持XDP技術。隨著整個生態(tài)環(huán)境的逐步完善,XDP帶來的輕量級、即時實現(xiàn)、高性能通道、安全可靠等能力會日益發(fā)揮更大的價值。

中國移動智慧家庭中心會保持對XDP技術的密切跟蹤,從技術層面持續(xù)跟蹤產(chǎn)業(yè)的發(fā)展方向,對新興技術保持開放的心態(tài)并積極擁抱新技術,推動產(chǎn)業(yè)界通過新興技術為廣大人民群眾帶來實實在在的數(shù)智化服務。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19029

    瀏覽量

    228442
  • 內(nèi)核
    +關注

    關注

    3

    文章

    1344

    瀏覽量

    40152
  • Linux
    +關注

    關注

    87

    文章

    11160

    瀏覽量

    208459
  • 網(wǎng)絡
    +關注

    關注

    14

    文章

    7441

    瀏覽量

    88438
  • 中國移動
    +關注

    關注

    22

    文章

    5520

    瀏覽量

    70688

原文標題:高性能網(wǎng)絡框架之XDP技術

文章出處:【微信號:5G通信,微信公眾號:5G通信】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    分享高性能Android應用開發(fā)超清版PDF

    解析與實戰(zhàn)Condroid論文高性能Android應用開發(fā)精通ANDROID網(wǎng)絡開發(fā)深入解析Android虛擬機.鐘世禮深入理解Android 卷1_12842633深入理解Andro
    發(fā)表于 08-13 10:40

    高性能可調(diào)諧RF器件解析

    Art Morris / WiSpry 當 LTE(Long Term Evolution,長期演進技術)的部署氣勢重新抬頭,企業(yè)經(jīng)營者與手機制造商都該明白,4G網(wǎng)絡并非3G性能萎靡不振時的萬靈丹
    發(fā)表于 06-26 06:29

    如何利用FPGA開發(fā)高性能網(wǎng)絡安全處理平臺?

    通過FPGA來構(gòu)建一個低成本、高性能、開放架構(gòu)的數(shù)據(jù)平面引擎可以為網(wǎng)絡安全設備提供性能提高的動力。隨著互聯(lián)網(wǎng)技術的飛速發(fā)展,性能成為制約
    發(fā)表于 08-12 08:13

    安捷倫N5222A高性能微波網(wǎng)絡分析儀

    真正差分激勵毫米波材料測量信號完整性天線測試 N5222A高性能微波網(wǎng)絡分析儀?主要特性與技術指標10 MHz 至 26.5 GHz2 端口(單信號源)或 4 端口(2 個內(nèi)置信號源)127 dB 系統(tǒng)
    發(fā)表于 12-26 08:01

    AssetsLibrary框架詳細解析—— 基本概覽

    AssetsLibrary框架詳細解析(一) —— 基本概覽
    發(fā)表于 04-29 15:12

    Photos框架詳細解析

    Photos框架詳細解析(一) —— 基本概覽
    發(fā)表于 05-06 12:34

    如何去實現(xiàn)一種高性能網(wǎng)絡接口設計?

    傳統(tǒng)網(wǎng)絡接口處理流程包括哪些步驟?如何去實現(xiàn)一種高性能網(wǎng)絡接口設計?
    發(fā)表于 05-20 06:41

    高性能CPU時鐘網(wǎng)絡設計

    討論了物理設計中時鐘網(wǎng)絡的設計技術,并以現(xiàn)有的CPU時鐘網(wǎng)絡的為例,介紹了高性能CPU的時鐘網(wǎng)絡設計技術
    發(fā)表于 12-27 15:28 ?46次下載
    <b class='flag-5'>高性能</b>CPU時鐘<b class='flag-5'>網(wǎng)絡</b>設計

    高性能CPU的時鐘網(wǎng)絡設計

    高性能CPU的時鐘網(wǎng)絡設計
    發(fā)表于 10-30 15:28 ?23次下載
    <b class='flag-5'>高性能</b>CPU的時鐘<b class='flag-5'>網(wǎng)絡</b>設計

    崔鵬程:初識XDP

    XDP全稱為eXpress Data Path,是Linux內(nèi)核網(wǎng)絡棧的最底層。它只存在于RX路徑上,允許在網(wǎng)絡設備驅(qū)動內(nèi)部網(wǎng)絡堆棧中數(shù)據(jù)來源最早的地方進行數(shù)據(jù)包處理,在特定模式下可以
    的頭像 發(fā)表于 08-03 15:59 ?3245次閱讀
    崔鵬程:初識<b class='flag-5'>XDP</b>

    詳解Netty高性能異步事件驅(qū)動的網(wǎng)絡框架

    大家好,今天我們來聊聊Netty的那些事兒,我們都知道Netty是一個高性能異步事件驅(qū)動的網(wǎng)絡框架。
    的頭像 發(fā)表于 03-16 10:57 ?1755次閱讀

    同步網(wǎng)絡高性能線卡的應用

    同步網(wǎng)絡高性能線卡的應用
    發(fā)表于 11-01 08:24 ?0次下載
    同步<b class='flag-5'>網(wǎng)絡</b><b class='flag-5'>高性能</b>線卡的應用

    DPDK技術原理、性能高性能代碼實現(xiàn)

    私有云的出現(xiàn)通過網(wǎng)絡功能虛擬化(NFV)共享硬件成為趨勢,NFV的定義是通過標準的服務器、標準交換機實現(xiàn)各種傳統(tǒng)的或新的網(wǎng)絡功能。急需一套基于常用系統(tǒng)和標準服務器的高性能網(wǎng)絡IO開發(fā)
    發(fā)表于 05-08 10:41 ?794次閱讀
    DPDK<b class='flag-5'>技術</b>原理、<b class='flag-5'>性能</b>及<b class='flag-5'>高性能</b>代碼實現(xiàn)

    4G工業(yè)路由器,工業(yè)環(huán)境專用,高性能網(wǎng)絡選!

    4G工業(yè)路由器,工業(yè)環(huán)境專用,高性能網(wǎng)絡選!
    的頭像 發(fā)表于 08-23 09:13 ?468次閱讀

    澎峰科技高性能大模型推理引擎PerfXLM解析

    自ChatGPT問世以來,大模型遍地開花,承載大模型應用的高性能推理框架也不斷推出,大有百家爭鳴之勢。在這種情況下,澎峰科技作為全球領先的智能計算服務提供商,在2023年11月25日發(fā)布了針對大語言
    的頭像 發(fā)表于 09-29 10:14 ?263次閱讀
    澎峰科技<b class='flag-5'>高性能</b>大模型推理引擎PerfXLM<b class='flag-5'>解析</b>