第一章:HFT性能调优导论

各位同学好,我是你们这门课的主讲人。

做高频交易系统优化,我干了快十年。说实话,这行当最迷人的地方,就是跟纳秒级别较劲。你想想看,一纳秒是什么概念?光在真空中只能跑30厘米。我们每天就在这种尺度下,跟市场赛跑。

这一章,我们先不急着写代码。先把地图摊开,看看高频交易系统的性能瓶颈到底长什么样。我个人习惯,做任何优化之前,先画一张全景图。不然你埋头苦干半天,可能优化了个寂寞。

1.1 高频交易系统的性能瓶颈全景图

高频交易系统,说白了就是一台「抢单机器」。它要做的核心事情就三件:

  • 看行情:从交易所拿到最新的买卖报价
  • 做决策:根据策略模型,决定要不要下单
  • 下订单:把指令发回交易所

这三件事,每一件都可能成为瓶颈。我画了一张图,帮你把整个链路看清楚。

高频交易系统性能瓶颈全景图 交易所 行情源 / 交易网关 行情数据 网络层 NIC / 内核 / 协议栈 数据流 应用层 策略 / 订单管理 订单 交易所 ⚠ 网络延迟瓶颈 ⚠ 策略计算瓶颈 三大核心性能指标 延迟 (Latency) 从行情到达 → 订单发出,总耗时 吞吐量 (Throughput) 单位时间内能处理的订单数 抖动 (Jitter) 延迟的波动幅度,最容易被忽视 优化目标:在可控抖动下,将延迟压到极致,同时保证吞吐量不降级

这张图里,我特意把三个瓶颈区域标黄了。为什么?因为这是绝大多数系统「翻车」的地方。

核心观点:高频交易优化,不是单点优化。它是一个系统工程。你优化了网络,但策略计算慢了,白搭。你优化了策略,但订单发不出去,也白搭。

1.2 延迟、吞吐量与抖动——三大核心指标

做性能调优,你得先知道「好」的标准是什么。高频交易领域,我们只看三个数字。

1.2.1 延迟(Latency)

延迟就是时间。从行情数据到达你的网卡,到你的订单离开网卡,这中间花了多少纳秒。

我见过很多团队,一上来就盯着平均延迟看。其实这是个大坑。为什么?因为平均延迟会掩盖很多问题。

举个例子:

指标 系统A 系统B
平均延迟 1000 ns 1000 ns
最大延迟 1200 ns 5000 ns
P99延迟 1050 ns 3500 ns

两个系统平均延迟一样,但系统B偶尔会「卡」一下。在HFT里,这一下可能就是几百万的损失。

我的建议:永远关注P99和P99.9延迟。平均延迟是骗人的。我在项目中吃过这个亏,后来就再也不敢只看平均值了。

1.2.2 吞吐量(Throughput)

吞吐量是单位时间内能处理多少笔交易。注意,HFT的吞吐量不是越高越好。

为什么?因为高吞吐往往意味着高延迟。你想想看,一个队列里塞了太多任务,每个任务等待的时间自然就长了。

我曾经优化过一个系统,把吞吐量从10万笔/秒提到了50万笔/秒。结果平均延迟从500纳秒飙到了2000纳秒。老板问我:「你这是在优化还是在倒退?」

避坑指南:吞吐量和延迟是跷跷板。优化时一定要明确你的核心指标是什么。做市商更看重延迟,套利策略更看重吞吐量。别搞反了。

1.2.3 抖动(Jitter)

抖动,说白了就是延迟的「不稳定性」。这是HFT里最阴险的敌人。

为什么?因为抖动是不可预测的。你无法预知下一次系统调用会不会被中断打断,也无法预知垃圾回收什么时候触发。

我见过最夸张的一次,某个系统平时延迟只有800纳秒,但每过30秒就会跳一次到10微秒。查了三天,最后发现是内核的定时器中断在作怪。

记住:在HFT里,稳定的1000纳秒,好过忽高忽低的500纳秒。因为你可以针对稳定的延迟做策略优化,但无法应对随机的抖动。

1.3 本课程的学习路径

好了,全景图看完了,指标也讲清楚了。接下来我们怎么学?

我个人把整个课程分成四个阶段:

  1. 基础篇(第2-8章):硬件层面的优化。CPU、内存、网卡、PCIe总线。这些是地基,地基不稳,上层再花哨也没用。
  2. 内核篇(第9-15章):操作系统层面的优化。中断绑定、内存大页、CPU隔离、DPDK。说白了就是让操作系统别来捣乱。
  3. 应用篇(第16-24章):代码层面的优化。数据结构选择、缓存友好、无锁编程、编译优化。这里我会分享很多实战中踩过的坑。
  4. 实战篇(第25-30章):完整的系统调优案例。从行情接入到订单发出,全链路优化。还会讲怎么用perf、火焰图这些工具。

每个阶段我都会穿插一些真实案例。嗯,有些案例说出来都是泪。但正是这些教训,让我真正理解了「性能调优」这四个字的分量。

学习建议:别跳着看。每一章的内容都是下一章的基础。尤其是硬件那几章,虽然枯燥,但理解了CPU的缓存结构,你才能写出真正低延迟的代码。

好,第一章就到这里。记住三个数字:延迟、吞吐量、抖动。后面的所有内容,都是围绕这三个指标展开的。


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