1、基于ebpf的socket代理轉發方案實踐第二屆 eBPF開發者大會w w w.e b p f t r a v e l.c o m中 國 西 安陸云麒麟軟件有限公司第 二 屆 e B P F 開 發 者 大 會背景介紹C0C1C2CnClientProxySourceTCPTCPTCPTCPUDP數據轉發模型用戶進程使用send/recv系統調用進行轉發對轉發延遲敏感,延遲越小越好客戶端較多的情況下,Proxy轉發存在性能瓶頸,整體延遲較大splice:基于管道pipe機制,將一個socket的接收通過管道重定向到另一個socket的發送,避免用戶層的數據拷貝不適用一對多的轉發DPDK:旁路內
2、核協議棧,用戶態程序直接從網卡收發數據整個轉發系統需要重構,改造代價較高XDP:在網卡驅動層直接進行數據包的轉發,旁路內核協議棧無法實現協議層的轉換ebpf:基于sockmap實現數據流重定向,旁路用戶進程的轉發處理目前只支持一對一轉發可選的轉發方案第 二 屆 e B P F 開 發 者 大 會sockmap概述sockmap自從linux 4.14版本引入后,支持的類型和特性不斷拓展和延伸,其具備在內核socket層直接實現數據流的重定向,優化數據鏈路的流向,廣泛應用于云原生、kubernetes以及服務網格等場景,加速網絡傳輸。來源:https:/www.usenix.org/system
3、/files/srecon23emea-slides_sitnicki.pdf(Jakub Sitnicki,Cloudflare Inc.)send to localsend to egressingress to egressingress to local第 二 屆 e B P F 開 發 者 大 會proxy和sockmap轉發對比數據在內核態和用戶態之間多次拷貝頻繁的系統調用,上下文切換需要喚醒用戶進程收包sockmap直接在內核socket層實現轉發數據只在內核層拷貝,無需用戶進程參與第 二 屆 e B P F 開 發 者 大 會sockmap轉發路徑分析proxy:需要喚醒用戶進
4、程去收包,數據包從內核態拷貝到用戶態,再從用戶態拷貝到內核態sockmap:通過ebpf程序實現數據流的重定向(redirect),將數據包的轉發流程offload到內核處理 只支持一對一轉發,用戶進程無法感知轉發統計信息第 二 屆 e B P F 開 發 者 大 會sockmap代理轉發方案改進方案基本思路:skb_buff結構體新增成員struct bpf_map*sock_map,記錄要轉發的列表新增bpf helper bpf_sk_redirect_sockmap,支持一對多的轉發用戶空間通過netlink機制訂閱轉發統計及狀態信息方案具體實施步驟:用戶進程監聽客戶端連接,調用ebp
5、f接口將已建立的連接加入到sockmap轉發列表在內核收包流程中執行ebpf程序,調用bpf_sk_redirect_sockmap,給skb-sock_map賦值在sk_psock_verdict_apply中遍歷sockmap中加入的所有sock,并將數據包skb_clone后發送到對應的sock如果有連接主動斷開,內核通過netlink機制通知到用戶進程,用戶進程將對應連接從sockmap列表中刪除,動態管理轉發列表第 二 屆 e B P F 開 發 者 大 會改進方案實踐轉發處理延遲:計算從udp接收數據包插入緩沖區隊列,到轉發給tcp連接這部分的延遲實測結果:sockmap方案并沒有
6、減小延遲,反而會稍微增大轉發延遲原因分析:在客戶端連接較多的情況下,sockmap遍歷所有的sock并執行schedule_work也需要消耗一定時間schedule_work默認會選擇當前CPU的工作隊列,實際需要等軟中斷退出后才能執行這個工作隊列,導致累積延遲work_queue的機制本身也會有一定的延遲優化措施:schedule_work改為queue_work_on,并指定到不同CPU上,調度多個工作隊列并發執行第 二 屆 e B P F 開 發 者 大 會優化效果系統整體延遲:在數據源發送數據時打上時間戳,客戶端接收到數據時計算與發送時間戳的差值對所有客戶端計算得到的延遲取平均實測優化效果:采用多個工作隊列并發執行帶來的優化效果明顯,系統整體平均延遲下降10%左右第 二 屆 e B P F 開 發 者 大 會方案總結與后續展望sockmap代理轉發方案實踐總結:旁路用戶進程的數據轉發處理,在內核socket層實現一對多的轉發,減少系統調用和數據的來回拷貝用戶進程通過netlink接口查詢轉發統計及狀態信息,動態管理轉發列表sockmap單工作隊列機制并不能降低延遲,采用多工作隊列并發才有一定優化效果后續展望:針對一對多的轉發場景,進一步優化sockmap的轉發執行路徑繼續完善方案,增加容錯和異常處理第 二 屆 e B P F 開 發 者 大 會THANKS