iT邦幫忙

2025 iThome 鐵人賽

DAY 23
0
Cloud Native

30 篇文帶你用 eBPF 與 Golang 打造 Linux Scheduler系列 第 23

整合 free5GC 實作低延遲資料層處理(上)

  • 分享至 

  • xImage
  •  

如果覺得文章對你有所啟發,可以考慮用 🌟 支持 Gthulhu 專案,短期目標是集齊 300 個 🌟 藉此被 CNCF Landscape 採納 [ref]

5G 核心網路將所有的 Data-Plane traffic 都交給 UPF 網路元件處理。在 free5GC 中,我們又再將 UPF 分成兩個部分實作:

  • application:負責處理 N4 介面的控制訊號,將訊號轉為封包處理規則送往 kernel space。
  • kernel module:實作一個 virtual network device,將封包處理的所有任務保留在 kernel space 來提高吞吐量。

結合我們先前的研究成果,要整合 free5GC 的困難度在於:

  • Linux kernel 的網路堆疊很複雜
  • 如果使用 kubernetes 部署 free5GC,我們要考慮 data-plane traffic 的流向(來自同節點還是跨節點、送往同節點還是跨節點?)

這些因素會導致我們無法直接告訴 API server 只要降低 UPF process 的 latency 即可,因為 kernel module 在處理封包時並不是使用 UPF process 的 context。

為了有效的識別出那個 destiny(誰接收了封包、又是誰把封包送出去),我們就需要想辦法觀察 kernel module(gtp5g)的行為。
而 eBPF 本身就是 observability 的利器,所以我利用 BTF export 出 gtp5g 中的 self-defined structure,並且觀察有哪些函式能夠被 ftrace 觀測到。抓出 gtp5g 之中明確的 uplink 與 downlink 進入點,我就能用 eBPF 進行觀測了:)

  • 程式碼可參考 gtp5g-tracer
  • 當初實作 gtp5g-tracer 撰寫的文章:https://free5gc.org/blog/20241224/
  • 更 detail 的文章:https://free5gc.org/blog/20250913/20250913/

我在這邊先總結一下觀察到的結果:

  • Uplink 會綁著收進封包的 context,比如說,N3 的封包從某個網卡收進來,那麼 Uplink 會由那張網卡的 irq 處理。經過處理後送往 N6 則是看 N6 對應的是哪張網卡,會有對應的 irq 處理。
  • Downlinkk 同樣看綁著收進封包的 context,比如說,N6 的封包從某個網卡收進來,那麼就由這張網卡的 irq 處理。
  • 如果所有的通訊都在一個 node 裡面(UERANSIM, DN server 都在同一個機器上),那麼就會吃到 nr-ue(因為用來測試的 ICMP 是由 nr-ue 送出的)這個 process 的 context。

上一篇
搶佔式任務處理
下一篇
整合 free5GC 實作低延遲資料層處理(下)
系列文
30 篇文帶你用 eBPF 與 Golang 打造 Linux Scheduler25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言