1. 高频交易硬件概览:为什么硬件比软件快?核心硬件组件(CPU、网卡、FPGA)的角色分工
各位同学,欢迎来到这门课的第一讲。
做高频交易的人,心里都清楚一件事:快,就是钱。你比别人快一微秒,可能就抢到了那个价差;慢一微秒,订单就成交在更差的价格上。那么问题来了——为什么我们非得用硬件,而不是靠软件优化?
1.1 为什么硬件比软件快?
说白了,软件跑在CPU上,CPU是个通用处理器。它要处理的事情太多了:操作系统调度、中断处理、内存管理、分支预测……你写一行C代码,背后可能经过几十条指令、几十个时钟周期才能执行完。
硬件就不一样。硬件是“专线专用”。你设计一个逻辑电路,信号从输入到输出,走的是一条固定的物理路径。没有指令取指、没有分支预测、没有缓存缺失。信号延迟是纳秒级的,而且是确定的。
我举个例子。你在软件里做一次简单的加法,CPU需要:取指令→解码→执行→写回。这至少需要几个时钟周期。而在FPGA里,一个加法器就是一堆逻辑门连在一起,信号从A端到B端,只需要一个时钟周期,甚至更短。
还有一个关键点:确定性。软件的执行时间是不确定的——缓存命中与否、分支预测对错、操作系统是否调度了其他进程,都会导致延迟抖动。硬件呢?同样的输入,永远在同样的时间给出输出。这对高频交易来说太重要了。你想想看,如果你的策略有时候快、有时候慢,你怎么敢用它去抢单?
核心结论:硬件比软件快,不是因为硬件“跑得更快”,而是因为硬件去掉了所有不必要的中间层。它用物理电路直接实现逻辑,没有指令、没有调度、没有缓存。延迟是纳秒级的,而且是确定的。
1.2 核心硬件组件:CPU、网卡、FPGA的角色分工
好,既然硬件这么快,那是不是所有环节都用硬件?当然不是。每个组件有它擅长的领域。我习惯把高频交易系统拆成三个角色:
- CPU:负责“复杂决策”
- 网卡:负责“快速收发”
- FPGA:负责“极速处理”
这三者不是替代关系,而是协作关系。下面我一个个说。
1.2.1 CPU:复杂决策的大脑
CPU的优势在于灵活性。它可以运行任何算法,处理任何逻辑。在高频交易里,CPU通常负责:
- 策略逻辑的顶层调度
- 复杂的统计模型计算
- 风险控制(比如检查订单是否超出限额)
- 与交易所的API交互(通过网卡)
但CPU的弱点也很明显:延迟高、抖动大。你没法用CPU去做纳秒级的处理。所以CPU通常处理的是“不那么急”的事情,比如每秒几次的策略更新,或者毫秒级的风控检查。
我的经验:我在一个项目中遇到过,客户非要用CPU做行情解码,结果延迟抖动达到几十微秒。后来我们把解码逻辑移到FPGA上,抖动直接降到纳秒级。CPU还是老老实实做策略计算吧。
1.2.2 网卡:数据的“高速公路收费站”
网卡是系统与外界通信的接口。在高频交易里,网卡不仅仅是收发数据包,它还要做很多“智能”处理:
- 时间戳:精确记录每个数据包的到达时间(纳秒级)
- 过滤:只接收你感兴趣的行情数据,丢弃无关包
- 协议卸载:比如UDP、TCP的部分处理直接在网卡上完成
普通的商用网卡延迟在几微秒到几十微秒。而高频交易专用的网卡(比如Solarflare、Mellanox)可以把延迟压到几百纳秒。为什么?因为它们把很多软件做的事搬到了硬件里。
举个例子。普通网卡收到一个数据包,要先通过PCIe总线把数据拷贝到系统内存,然后CPU去中断处理,再解析协议。这一套下来,几微秒就没了。而专用网卡可以在硬件里直接解析UDP头、提取行情数据,甚至直接写入FPGA的片上内存,省掉所有中间步骤。
注意:网卡不是越贵越好。你得看你的交易场景。如果你做的是跨交易所套利,需要同时接收多个交易所的行情,那网卡的端口数量和过滤能力就很重要。如果你只做单一交易所的抢单,那延迟才是第一位的。
1.2.3 FPGA:极速处理的“硬逻辑工厂”
FPGA才是高频交易里真正的“杀手锏”。它是一块可以编程的芯片,你可以用硬件描述语言(Verilog/VHDL)设计出你想要的逻辑电路。没有指令、没有操作系统、没有缓存——一切都是物理电路。
FPGA在高频交易里的典型应用:
- 行情解码:交易所发来的二进制行情数据,FPGA可以在几十纳秒内解析成内部格式
- 订单生成:根据行情变化,FPGA可以自动生成买卖订单,直接发给网卡
- 策略执行:简单的策略逻辑(比如价差突破、做市商报价)可以直接在FPGA里跑
- 风控检查:在订单发出前,FPGA可以快速检查价格、数量是否合规
我见过最极致的案例:某家做市商把整个策略逻辑都写进了FPGA,从行情接收到订单发出,总延迟不到100纳秒。而同样的策略用软件跑,至少需要几微秒。差距是几十倍。
但FPGA也有缺点:开发周期长、调试困难、灵活性差。你改一行代码,可能需要重新综合、布局布线,花几个小时。所以FPGA适合处理那些“固定不变”的逻辑,比如行情解码、简单的策略规则。复杂的、经常变化的逻辑,还是交给CPU。
1.3 三者的协作关系
我画了一张图,帮你理解这三个组件是怎么配合的:
你看,数据流是这样的:
- 交易所的行情数据通过光纤到达网卡,网卡打上时间戳、过滤掉无关数据
- 数据直接送入FPGA,FPGA在几十纳秒内完成解码和初步策略判断
- 如果需要更复杂的计算,FPGA把数据传给CPU,CPU做最终决策
- CPU把订单指令传回FPGA,FPGA生成订单,通过网卡发回交易所
这个流程里,FPGA是“快车道”,CPU是“慢车道”。大部分简单的、固定的逻辑走快车道,只有复杂的、变化的逻辑才走慢车道。这样既保证了速度,又保留了灵活性。
总结一下:CPU负责“想”,网卡负责“传”,FPGA负责“做”。三者各司其职,缺一不可。你不可能只用CPU做出纳秒级的系统,也不可能只用FPGA处理所有复杂逻辑。真正的工程智慧,在于知道什么时候该用哪个组件。
1.4 避坑指南
最后,分享几个我踩过的坑:
- 别迷信“全硬件化”:我曾经见过一个团队,非要把所有策略都写进FPGA,结果开发了两年还没上线。硬件适合做固定的、简单的逻辑,复杂的策略还是留给CPU。
- 网卡选型要看“确定性”:有些网卡标称延迟很低,但实际抖动很大。你一定要实测,看它的延迟分布,而不是只看平均值。
- FPGA不是万能的:它擅长做流水线处理,但不擅长做复杂的条件分支。如果你需要大量的if-else判断,FPGA会变得很臃肿,延迟反而上去了。
好了,这一讲就到这里。硬件选型是个系统工程,后面我们会一步步深入每个组件的细节。记住:快不是目的,确定性的快才是。