Skip to content

Instantly share code, notes, and snippets.

@waynexia
Last active October 22, 2022 14:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save waynexia/258ee46f1b88113c383caf1f69ad1ae2 to your computer and use it in GitHub Desktop.
Save waynexia/258ee46f1b88113c383caf1f69ad1ae2 to your computer and use it in GitHub Desktop.
TiDB Hackathon 2022 RFC

项目介绍

使用 XDP 对 TiKV 接口进行优化

背景&动机

TiDB 与 TiKV 之间有大量的 RPC 调用,并且大部分都涉及到数据的传输。目前使用的 gRPC 协议栈不仅复杂还涉及到大量的数据拷贝,在网络层面对系统延时产生了负面的影响。 XDP 以及 eBPF 技术是 Linux 内核提供的功能,能够向内核加载网络包过滤器。通常用来实现高性能的负载均衡、防火墙或监控及可视化等应用。 我们这次尝试将 XDP 技术应用到数据传输链路上,希望通过绕过部分内核及应用层的网络协议栈来提升数据链路的处理与传输速度。

项目设计

本次项目尝试从 TiKV 的点查接口入手进行优化。主要涉及到的模块为 TiKV 为 TiKV、TiDB 接口相关的代码,以及 XDP 程序。 XDP 程序主要识别相应的网络包,如发送到特点端口或带有特定 header 等,并将其转发到用户态进行处理,绕过中间所有的协议栈。对于其他的不相关的包直接放行继续走原来的内核协议栈,因此这个优化的影响范围也是可控的,不会对现有的逻辑和接口产生影响。如图:

image

这次涉及到的接口的协议栈也会有变化,我们计划通过 XSK 来模拟实现 UDP 包的发送和接受,并在此之上使用 QUIC 协议来完成网络异常等情况的处理。两个协议栈的对比大概是这样: image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment