个人博客

Hi, I'm JM

低延迟 C++算法AI Native

常见性能瓶颈与优化方向#21 交易系统性能衡量 TTT 和 RTT 各量哪一段,为什么要报 p50、p99、p999 而不是平均值,在线程边界打点怎么看出时间花在处理还是排队,以及量级表怎么拿来做延迟预算。

最新

Recent posts

查看归档
常见性能瓶颈与优化方向 #21 约 10 分钟

交易系统性能衡量

TTT 和 RTT 各量哪一段,为什么要报 p50、p99、p999 而不是平均值,在线程边界打点怎么看出时间花在处理还是排队,以及量级表怎么拿来做延迟预算。

低延迟系统开发 #20 约 19 分钟

用 TSC 测延迟

TSC 读到的是什么、什么时候读到、在哪个核上读到,热路径上打点该怎么记,以及 tick 怎么换算成 ns:频率从哪来、怎么自己校准。

简单实践 #18 约 11 分钟

线程安全队列

从一把锁到多生产者:阻塞队列的条件变量和丢失唤醒,rte_ring 的两对下标和按顺序发布,Disruptor 的可用标记,以及队列满了该阻塞、丢弃还是覆盖。

低延迟系统开发 #17 约 10 分钟

wait-free

wait-free 不是更快的 lock-free:它把 CAS 失败从“再来一次”变成“我排在你后面”,每个线程的步数因此有了上界,代价是更多原子操作和更难写对的代码。

常见性能瓶颈与优化方向 专题 约 18 分钟

perf:怎么用、看哪些指标

先用 stat 看总账,再用 record 和 report 找到占 98% 样本的函数,最后用 annotate 看到样本全落在加法后面一条指令上:那是一条一环扣一环的加法链,拆成四路就快了 3.3 倍。拿不到硬件计数器时,cpu-clock 采样照样能用;报告里只剩地址,先查符号表和程序所在的路径。

低延迟系统开发 #16 约 25 分钟

自旋锁

自旋锁快不快,看等锁的核在干什么:每次都读改写,就把锁所在的行抢来抢去;先读后抢、循环里加 PAUSE、抢输了退一步,等的时候才几乎不打扰持锁的核。

低延迟系统开发 专题 约 15 分钟

缓存案例:一次行情重算 64 个期权

一条行情要碰 140 条缓存行,时间大多花在等它们。四步改的都不是计算,是数据什么时候到、到哪一层、在谁手里:让缺失同时在路上,提前要下一批,交出读一次就没用的行,跨核交接时少读一次,把要给对面读的行先放进 L3。

低延迟系统开发 #8 约 17 分钟

CRTP 与静态多态

基类写流程、子类填细节,虚函数在运行时选,CRTP 在编译期选。省下的不只是一次间接跳转:调用能整个内联,对象里也没有 vptr。代价是 Base 和 Base 毫无关系,放不进同一个容器。