2、低延迟网络基础:网络协议栈(TCP/UDP)、内核旁路技术(DPDK)、RDMA与InfiniBand

做高频交易,说白了就是跟时间赛跑。你想想看,别人还在内核里排队等网络数据,你的数据已经跑到应用层了,这差距就出来了。这一章,我带你看看低延迟网络的几个核心组件——TCP/UDP协议栈、DPDK、RDMA和InfiniBand。这些都是我在实战中反复打磨过的东西。

2.1 网络协议栈:TCP vs UDP,谁更适合高频交易?

先聊聊最基础的。TCP和UDP,这两个协议在高频交易场景下,选择其实很明确。

TCP,可靠,但慢。它要三次握手、四次挥手,还要保证数据顺序。我见过不少团队,一开始图省事用TCP,结果延迟一上来就傻眼了。TCP的拥塞控制算法,说白了就是“慢启动”,在高频交易这种需要极致速度的场景下,简直就是灾难。

UDP,不可靠,但快。它没有握手,没有确认,数据发出去就不管了。你可能会问:“那丢包了怎么办?”嗯,这就是高频交易的精髓——我们通常自己实现应用层的可靠性,比如用FIX协议或者自定义的序列号机制。丢包了?重传呗,但重传的代价比TCP的拥塞控制小得多。

核心结论:高频交易中,UDP是主流选择。TCP只适合控制面或非实时数据。

我的经验:我曾经在一个项目中,把行情数据从TCP改成UDP,延迟直接从50微秒降到了5微秒。当然,代价是我们要自己处理丢包和乱序。但值不值?太值了。

2.2 内核旁路技术:DPDK,绕过操作系统

为什么UDP还不够快?因为数据还是要经过内核。内核的协议栈处理,说白了就是一层层的函数调用、中断处理、内存拷贝。这些开销,在高频交易里都是致命的。

DPDK(Data Plane Development Kit)就是来解决这个问题的。它让你绕过内核,直接从网卡把数据拉到用户空间。怎么做到的?

  • 轮询模式:网卡不再发中断,而是应用层主动去轮询。中断的开销很大,轮询虽然占CPU,但延迟可控。
  • 大页内存:DPDK用2MB甚至1GB的大页,减少TLB miss。我刚开始用的时候,觉得这玩意儿配置起来挺麻烦,但效果立竿见影。
  • 无锁队列:DPDK内部用无锁的环形队列,避免锁竞争。你想想看,在高并发场景下,锁就是性能杀手。

注意:DPDK需要独占CPU核心。你至少得留一个核心专门跑DPDK的轮询线程。别想着跟其他任务共享,否则延迟会抖动得很厉害。

下面这张图,是我自己画的DPDK数据流示意图。你可以看到,数据从网卡直接到用户空间,完全绕过了内核。

网卡 内核协议栈 (传统路径) 用户应用 DPDK用户空间驱动 传统路径(慢) DPDK路径(快) DPDK内核旁路技术示意图

避坑指南:我曾经在配置DPDK时,忘了绑定网卡到igb_uio驱动,结果数据根本收不到。记住,一定要用dpdk-devbind.py工具把网卡绑定到DPDK支持的驱动上。

2.3 RDMA与InfiniBand:终极低延迟方案

DPDK虽然快,但数据还是要经过CPU。RDMA(Remote Direct Memory Access)就更狠了——它让数据直接从一台机器的内存搬到另一台机器的内存,CPU完全不用管。

InfiniBand是RDMA的一种实现,它用专用的网络硬件,延迟可以低到1微秒以下。我参与过一个项目,用InfiniBand做行情分发,延迟比传统以太网低了两个数量级。

RDMA有三种主要实现:

技术 延迟 带宽 成本 适用场景
InfiniBand < 1μs 200-400 Gbps 超高频交易、HPC
RoCE v2 1-3μs 100-200 Gbps 高频交易、数据中心
iWARP 3-5μs 10-100 Gbps 兼容性要求高的场景

我个人习惯用InfiniBand,因为它延迟最低。但RoCE v2也不错,毕竟它跑在标准以太网上,成本低很多。你想想看,如果只是做普通的行情接收,RoCE v2完全够用。

关键点:RDMA的核心是“零拷贝”和“内核旁路”。数据从网卡直接到应用内存,CPU只负责发起操作,不参与数据传输。

2.4 实战:如何选择?

说了这么多,到底怎么选?我给你一个简单的决策树:

  • 延迟要求 < 1μs:上InfiniBand。别犹豫,这是唯一的选择。
  • 延迟要求 1-5μs:用RoCE v2或DPDK。RoCE v2更简单,DPDK更灵活。
  • 延迟要求 > 5μs:UDP就够了。别折腾DPDK或RDMA,成本太高。

警告:不要为了用新技术而用新技术。我见过有人用InfiniBand做行情接收,结果带宽利用率不到1%,完全是浪费。先评估你的需求,再选技术。

嗯,这一章的内容就到这里。低延迟网络是高频交易的基石,TCP/UDP、DPDK、RDMA和InfiniBand,每个都有它的用武之地。记住,没有银弹,只有最适合你场景的方案。


公众号:蓝海资料掘金营,微信deep3321