《陆云--基于ebpf的socket代理转发方案实践.pdf》由会员分享,可在线阅读,更多相关《陆云--基于ebpf的socket代理转发方案实践.pdf(10页珍藏版)》请在三个皮匠报告上搜索。
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