成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

高性能網絡框架之XDP技術

網絡
XDP借助于eBPF虛擬機技術在網卡驅動層實現高性能網絡框架,且其原生運行在內核態可直通內核TCP/UDP協議棧。XDP作為一種數據面高性能框架技術為平衡高速數據處理和協議棧兼容開辟了一個新的道路。

1.XDP的基本概念

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

XDP不是內核旁路,是在網卡和內核協議棧之間增加了一個快速數據路徑。XDP借助于eBPF技術從而繼承了其可編程、即時實現、安全等優良特性。

XDP智能網卡是XDP概念的延伸。在支持eBPF指令的智能網卡上,將CPU上XDP對應的eBPF指令下沉加載到智能網卡,這樣可以同時實現CPU資源節約和規則硬件卸載。

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

2.XDP的整體框架

如下圖1,我們通過XDP整體框架圖來展示其在內核系統中的相對位置以及其如何滿足數據平面開發框架的要求。

圖1 XDP整體框架圖

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

3.XDP應用開發介紹

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

圖2 典型eBPF開發、運行流程圖

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

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

圖3 eBPF支持眾多內核鉤子應用

相比于傳統的用戶態/內核態程序,eBPF/XDP有如下典型特征:

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

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

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

圖5 BFP Map銜接用戶態和內核態的數據交互

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

圖6 BPF輔助函數范例-獲取隨機數

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

圖7 eBPF程序尾調用和函數調用的混合協作圖7 eBPF程序尾調用和函數調用的混合協作

4.XDP的同類技術對比

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

圖8 數據流在XDP和DPDK數據平面上的走向差異

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

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

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

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

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

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

  • DDoS防御
  • 防火墻
  • 基于XDP的負載均衡
  • 協議棧前處置
  • 云原生應用服務優化 (如對K8S,OpenStack,Docker等服務改進項目)
  • 流量控制

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

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

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

圖9 Cilium項目組件分布圖

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

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


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

圖11 eBPF/XDP在Cilium項目中的核心價值圖11 eBPF/XDP在Cilium項目中的核心價值

6.DP的發展前景

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

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

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

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

責任編輯:龐桂玉 來源: 移動Labs
相關推薦

2024-03-08 09:51:12

Linux網絡性能

2020-06-17 16:43:40

網絡IO框架

2011-10-18 13:58:32

高性能web

2025-01-13 13:00:00

Go網絡框架nbio

2024-04-28 10:17:30

gnetGo語言

2018-03-16 09:13:45

RDMA高性能數據中心

2021-08-11 05:06:23

NETJSON框架

2022-08-15 08:01:35

微服務框架RPC

2015-04-27 14:42:24

技術架構服務器性能

2023-11-01 11:59:13

2023-12-02 19:42:29

2025-01-06 00:00:10

2024-11-05 18:34:27

2017-11-28 17:14:16

華為云

2011-04-18 10:16:30

WEB高性能

2019-07-31 14:36:46

Linux服務器框架

2018-02-28 10:11:50

騰訊框架開源

2024-12-24 10:50:05

GinWeb開發

2011-04-07 09:25:25

內存Java

2013-11-08 10:12:07

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 伊人精品在线 | 九色国产 | 国产小视频在线观看 | 青青草网站在线观看 | av午夜电影| 中文字幕免费 | 国产成人福利 | 亚洲成人自拍 | 最新中文字幕在线 | 一区二区三区精品视频 | 国产精品免费观看 | 国产一区欧美 | 成人精品国产免费网站 | 免费精品 | 国产精品无码专区在线观看 | 视频第一区 | a精品视频 | av免费看片| 久久久性色精品国产免费观看 | 伊人网站在线观看 | 国产精品久久久久久久久图文区 | 91麻豆精品国产91久久久更新资源速度超快 | caoporn国产| 国产精品久久久久国产a级 欧美日韩国产免费 | 国产精品久久久久久影院8一贰佰 | 国产在线观看 | 一级看片 | 欧美v免费| 久久久久久亚洲国产精品 | av一级久久 | 精品国产一区探花在线观看 | 亚洲一页 | 亚洲视频自拍 | 国产1区 | 国产精品性做久久久久久 | 午夜不卡福利视频 | 精品国产91亚洲一区二区三区www | 久久午夜剧场 | 97caoporn国产免费人人 | 精品国产精品国产偷麻豆 | 成人精品一区二区三区 |