系列解讀SMC-R:透明無感提升雲上 TCP 應用網路效能(一)| 龍蜥技術
文/龍蜥社群高效能網路SIG
引言
一、從 RDMA 談起
1.1 為什麼需要 RDMA ?
1.2 RDMA 的優勢
二、回到 SMC-R
2.1 透明替換 TCP
SMC-R is an open sockets over RDMA protocol that provides transparent exploitation of RDMA (for TCP based applications) while preserving key functions and qualities of service from the TCP/IP ecosystem that enterprise level servers/network depend on!
摘自:
openfabrics.org/images/eventpresos/workshops2014/IBUG/presos/Thursday/PDF/05_SMC-R_Update.pdf
/* must look like tcp */ static const struct proto_ops smc_sock_ops = { .family = PF_SMC, .owner = THIS_MODULE, .release = smc_release, .bind = smc_bind, .connect = smc_connect, .socketpair = sock_no_socketpair, .accept = smc_accept, .getname = smc_getname, .poll = smc_poll, .ioctl = smc_ioctl, .listen = smc_listen, .shutdown = smc_shutdown, .setsockopt = smc_setsockopt, .getsockopt = smc_getsockopt, .sendmsg = smc_sendmsg, .recvmsg = smc_recvmsg, .mmap = sock_no_mmap, .sendpage = smc_sendpage, .splice_read = smc_splice_read, };
-
使用 LD_PRELOAD 實現協議棧透明替換。在執行 TCP 應用程式時預載入一個動態庫。在動態庫中實現自定義 socket() 函式,將 TCP 應用程式建立的 AF_INET 型別 socket 轉換為 AF_SMC 型別的 socket,再呼叫標準 socket 建立流程,從而將 TCP 應用流量引入 SMC-R 協議棧。
int socket(int domain, int type, int protocol) { int rc; if (!dl_handle) initialize(); /* check if socket is eligible for AF_SMC */ if ((domain == AF_INET || domain == AF_INET6) && // see kernel code, include/linux/net.h, SOCK_TYPE_MASK (type & 0xf) == SOCK_STREAM && (protocol == IPPROTO_IP || protocol == IPPROTO_TCP)) { dbg_msg(stderr, "libsmc-preload: map sock to AF_SMC\n"); if (domain == AF_INET) protocol = SMCPROTO_SMC; else /* AF_INET6 */ protocol = SMCPROTO_SMC6; domain = AF_SMC; } rc = (*orig_socket)(domain, type, protocol); return rc; }
-
通過 ULP + eBPF 實現協議棧透明替換。 SMC-R 支援 TCP ULP 是 龍蜥社群高效能網路 SIG 貢獻到上游 Linux 社群的新特性。 使用者可以通過 setsockopt() 指定新建立的 TCP 型別 socket 轉換為 SMC 型別 socket。 同時,為避免應用程式改造,使用者可以通過 eBPF 在合適的 hook 點 (如 BPF_CGROUP_INET_SOCK_CREATE、BPF_CGROUP_INET4_BIND、BPF_CGROUP_INET6_BIND 等) 注入 setsockopt(),實現透明替換。 這種方式更適合在容器場景下可以依據自定義規則,批量的完成協議轉換。
static int smc_ulp_init(struct sock *sk) { struct socket *tcp = sk->sk_socket; struct net *net = sock_net(sk); struct socket *smcsock; int protocol, ret; /* only TCP can be replaced */ if (tcp->type != SOCK_STREAM || sk->sk_protocol != IPPROTO_TCP || (sk->sk_family != AF_INET && sk->sk_family != AF_INET6)) return -ESOCKTNOSUPPORT; /* don't handle wq now */ if (tcp->state != SS_UNCONNECTED || !tcp->file || tcp->wq.fasync_list) return -ENOTCONN; if (sk->sk_family == AF_INET) protocol = SMCPROTO_SMC; else protocol = SMCPROTO_SMC6; smcsock = sock_alloc(); if (!smcsock) return -ENFILE; <...> }
SEC("cgroup/connect4") int replace_to_smc(struct bpf_sock_addr *addr) { int pid = bpf_get_current_pid_tgid() >> 32; long ret; /* use-defined rules/filters, such as pid, tcp src/dst address, etc...*/ if (pid != DESIRED_PID) return 0; <...> ret = bpf_setsockopt(addr, SOL_TCP, TCP_ULP, "smc", sizeof("smc")); if (ret) { bpf_printk("replace TCP with SMC error: %ld\n", ret); return 0; } return 0; }
資料流量基於 RDMA 網路傳輸
依賴 TCP 流建立連線
加入微信群:新增社群助理-龍蜥社群小龍(微信:openanolis_assis),備註【龍蜥】與你同在;加入釘釘群:掃描下方釘釘群二維碼。歡迎開發者/使用者加入龍蜥社群(OpenAnolis)交流,共同推進龍蜥社群的發展,一起打造一個活躍的、健康的開源作業系統生態!
龍蜥社群( OpenAnolis)是由 企事業單位、高等院校、科研單位、非營利性組織、個人等在自願、平等、開源、協作的基礎上組成的非盈利性開源社群。龍蜥社群成立於 2020 年 9 月,旨在構建一個開源、中立、開放的Linux 上游發行版社群及創新平臺。
龍蜥社群成立的短期目標是開發龍蜥作業系統(Anolis OS)作為 CentOS 停服後的應對方案,構建一個相容國際 Linux 主流廠商的社群發行版。中長期目標是探索打造一個面向未來的作業系統,建立統一的開源作業系統生態,孵化創新開源專案,繁榮開源生態。
目前, 龍蜥OS 8.4 已釋出,支援 X86_64 、Arm64、LoongArch 架構,完善適配飛騰、海光、兆芯、鯤鵬、龍芯等晶片,並提供全棧國密支援。
歡迎加入我們,一起打造面向未來的開源作業系統!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70004278/viewspace-2885265/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 效能提升 57% ,SMC-R 透明加速 TCP 實戰解析 | 龍蜥技術TCP
- 系列解讀 SMC-R (二):融合 TCP 與 RDMA 的 SMC-R 通訊 | 龍蜥技術TCP
- 龍蜥利器:系統運維工具 SysAK的雲上應用效能診斷 | 龍蜥技術運維
- 深入解讀雲場景下的網路抖動 | 龍蜥技術
- 助力Koordinator雲原生單機混部,龍蜥混部技術提升CPU利用率達60%|龍蜥技術
- 深入解讀基礎軟體雲原生面臨的挑戰 | 龍蜥技術
- 系統運維 SysOM profiling 在雲上環境的應用觀測實踐 | 龍蜥技術運維
- 一文解讀機密容器的崛起和發展 | 龍蜥技術
- GaussDB技術解讀系列:效能調優
- 龍蜥開源核心追蹤利器 Surftrace:協議包解析效率提升 10 倍! | 龍蜥技術協議
- 倒數計時 2 天!聚焦 Arm 效能提升,助力龍蜥生態落地應用
- 龍蜥社群高效能儲存技術 SIG 11 月運營回顧 | 龍蜥 SIG
- 基於 Coolbpf 的應用可觀測實踐 | 龍蜥技術
- 技術解讀:現代化工具鏈在大規模 C++ 專案中的運用 | 龍蜥技術C++
- 技術解讀:Dragonfly 基於 P2P 的智慧映象加速系統 | 龍蜥技術Go
- 虛擬化解決方案 virtio 的技術趨勢與 DPU 實踐解讀 | 龍蜥技術
- 如何保證 Java 應用安全?標準答案來了 | 龍蜥技術Java
- SysAK 應用抖動診斷篇—— eBPF又立功了! | 龍蜥技術eBPF
- 入門即享受!coolbpf 硬核提升 BPF 開發效率 | 龍蜥技術
- 技術門檻高?來看 Intel 機密計算技術在龍蜥社群的實踐 | 龍蜥技術Intel
- 深度解讀資料庫引入LLVM技術後如何提升效能資料庫LVM
- 技術解讀倚天 ECS 例項——Arm 晶片的 Python-AI 算力最佳化 | 龍蜥技術晶片PythonAI
- 直播回顧:隱私計算的關鍵技術以及行業應用技巧 | 龍蜥技術行業
- 【HMS Core 6.0全球上線】Network Kit全鏈路網路加速技術,應用無懼網路擁塞
- 雲端計算 - 內容分發網路CDN技術與應用全解
- 深度解讀昇騰CANN模型下沉技術,提升模型排程效能模型
- 網路爬蟲技術及應用爬蟲
- 從編譯到可執行,eBPF 加速容器網路的原理分析 | 龍蜥技術編譯eBPF
- 龍蜥社群成立雲原生 SIG,引入 3 大核心技術,共建雲原生生態
- UDP&TCP Linux網路應用程式設計詳解UDPTCPLinux程式設計
- 解讀Karmada多雲容器編排技術,加速分散式雲原生應用升級分散式
- eBPF 雙子座:天使 or 惡魔?| 龍蜥技術eBPF
- 數盾科技加入,攜手龍蜥社群提升網路安全整體防護能力
- 龍蜥開源Plugsched:首次實現 Linux kernel 排程器熱升級 | 龍蜥技術Linux
- 《可信計算技術最 佳實踐白皮書》釋出,龍蜥助力可信計算技術應用推廣(可下載)
- Tair持久儲存系列技術解讀AI
- 效能提升1倍,成本直降50%!基於龍蜥指令加速的下一代雲原生閘道器
- 萬里資料庫加入龍蜥社群,打造基於“龍蜥+GreatSQL”的開源技術底座資料庫SQL