- Org: https://github.com/nice-tidb-goods
- 团队名称:周边真不错
- 作者:sticnarf, waynexia
- 项目进展:Developing
使用 XDP 对 TiKV 接口进行优化
TiDB 与 TiKV 之间有大量的 RPC 调用,并且大部分都涉及到数据的传输。目前使用的 gRPC 协议栈不仅复杂还涉及到大量的数据拷贝,在网络层面对系统延时产生了负面的影响。 XDP 以及 eBPF 技术是 Linux 内核提供的功能,能够向内核加载网络包过滤器。通常用来实现高性能的负载均衡、防火墙或监控及可视化等应用。 我们这次尝试将 XDP 技术应用到数据传输链路上,希望通过绕过部分内核及应用层的网络协议栈来提升数据链路的处理与传输速度。
本次项目尝试从 TiKV 的点查接口入手进行优化。主要涉及到的模块为 TiKV 为 TiKV、TiDB 接口相关的代码,以及 XDP 程序。 XDP 程序主要识别相应的网络包,如发送到特点端口或带有特定 header 等,并将其转发到用户态进行处理,绕过中间所有的协议栈。对于其他的不相关的包直接放行继续走原来的内核协议栈,因此这个优化的影响范围也是可控的,不会对现有的逻辑和接口产生影响。如图:
这次涉及到的接口的协议栈也会有变化,我们计划通过 XSK 来模拟实现 UDP 包的发送和接受,并在此之上使用 QUIC 协议来完成网络异常等情况的处理。两个协议栈的对比大概是这样: