应用运行时
保留有价值的 API,把经过测量的热路径移出解释器和框架机械工作。
一个完整应用
交易是这套性能工程的一个重要应用,但不是整个作品集。开源参考系统把因果式历史重放、 原生行情摄取、流式分析、低延迟扇出、目标仓位路由、券商执行和操作员控制连接成一套完整系统。
它使用 Massive 和 Alpaca,面向研究与日内策略,并不自称交易所托管的高频交易平台。 专页同时说明完整架构和它下面更快的基础机器。
查看完整交易系统栈工作跨越多个层次
真正有效的优化往往不在最初看起来缓慢的函数里。我沿着成本穿过语言边界、 分配器、内存、操作系统、网络和硬件,直到找到真正拥有它的层。
保留有价值的 API,把经过测量的热路径移出解释器和框架机械工作。
针对真实工作负载选择紧凑布局、分配行为、缓存流量、NUMA 布置和算法。
让 RAM 保存延迟敏感的头部,SSD 保存温数据,磁盘提供容量,而不是假装每个字节都同样紧急。
共享内存、RDMA、libfabric/EFA、XLIO、内核旁路,以及在普通 TCP 足够时使用普通 TCP。
面向 x86、Arm、LoongArch、RISC-V 和其他常被主流忽视的机器实现向量内核与运行时分派。
CPU 核算、延迟分布、尾延迟分析、受控基准,以及让别人可以检查结论的原始资料。
部分开源项目
这些项目并不属于同一个行业。每个项目都从 CPU、内存、存储或延迟中的具体成本出发, 并把证据作为软件的一部分。
数据结构与传输
问题 Redis 兼容操作和进程间消息在每次请求中都要承担内存布局、解析和传输成本。
工作 紧凑 C++23 数据结构;RESP 与 SBE 可运行在共享内存环、单边 RDMA、libfabric/EFA、XLIO、Unix 套接字和 TCP 上。
测量 在 Threadripper PRO 5995WX 的相邻绑定核心上,通过 SBE 共享内存环完成一次紧凑 HSET 或 ZADD 请求/响应约需 220 ns。
意义 它既是一台有用的服务器,也是研究内存流量、协议开销和网络路径的实验室。
大对象存储
问题 网络还未接近大对象尾部时,就把每个字节留在 RAM 中,会浪费昂贵内存。
工作 Memcached 兼容服务器把对象头部保存在锁定内存中,再从 SSD 或 HDD 异步流式读取后续字节。
证据 公开比较包含 Memcached 和 extstore,并给出工作负载、延迟、内存和存储成本上下文。
SIMD 序列算法
问题 比对和距离算法拥有昂贵内循环,而且不同 CPU 的指令集差异巨大。
工作 面向 C++ 与 Python 的 Smith-Waterman、Needleman-Wunsch、编辑距离、语音编码和时间序列距离。
证据 基准公开后端、评分、位宽、工作负载和 CPU 上下文,而不是给出一个万能加速比。
流式分析
问题 增量指标和在线模型不应在每个事件到来时重建数组或支付 dataframe 开销。
工作 319 种公开因果算法,共用一致的 C++23 与 Python 流式 API。
测量 每次公开运行覆盖 247 种算法;三个逐 CPU 中位数的平均值为:纯状态推进 57.7 ns,返回 Python 结果 77.4 ns。
LoongArch 优化
问题 当上游软件停留在通用代码或较窄向量扩展时,有用的硬件也会表现缓慢。
工作 可安装的 LoongArch 软件包、NumPy LASX、SIMD 超越函数和 BLAKE3 LoongArch 移植。
证据 补丁与基准一起发布,让架构支持成为用户可以运行的东西,而不是幻灯片。
小型状态估计
问题 小型状态空间模型不应该承担动态矩阵或逐次 Python 调用的高额开销。
工作 固定尺寸 C++23 Kalman 变体、直接 Python 绑定,以及支持不规则时间与观测方差的批量更新。
测量 公开的二状态、单观测线性批量案例在文档所述机器上每个测量值约需 43 ns。
外部排序
问题 当定长记录数据集大于 RAM 时,局部性和缓存行为本身就成为算法。
工作 面向局部访问、可预测记录和 LRU 友好行为设计的 C++ 与 Python 外部排序器。
历史 这个实验后来成为一家创业公司的技术基础,并继续以开源形式提供。
更多系统工程
有些工作最终成为服务器或库,有些工作只为回答一个狭窄的系统问题。 只要实现和证据有用,它们都应该出现在这里。
解释器内部机制
数值计算
恶劣网络
数据包路径分析
增量图搜索
开发中
采购与分类
小实验
这些工程有其来路
我从 1989 年开始构建生产软件:曾在 Quantlab 和 Massive.com 从事量化与行情系统, 在 S&P Global 处理大规模金融数据,也在 Google 和 Amazon 从事大规模工程。
开源工作把这条路线搬到公众面前。我构建实现、基准工具和解释结果所需的证据, 说明什么变好了、什么没有,以及原因是什么。
性能工程不是一袋技巧。它要求对完整系统认真记账,然后改变真正拥有成本的那一层。
Goblin Reactor
我用开放系统证明能力。Goblin Reactor 把这些能力带进客户系统:应用运行时、 数据库、内存、存储、网络、原生代码和生产行为。
告诉我哪里慢f"{given_name.lower()}.{family_name.lower()}@gmail.com"f'{2**8}-{2*3**2*37}-{13*101}'