历史行情 / 存储 / 因果重放
massive-speedup
读取 处理 Massive 的压缩历史数据,构建按时间戳排序的存储。
重放 按时间顺序推进市场事件,支持可配置延迟及考虑买卖报价的订单模拟。
语义 策略代码无法读取未来成交价,订单使用配置延迟之后可见的买价或卖价。
系统中的位置 参考系统将历史路径与 Goblin Slurp 的实时接入、RTTA 的流式分析结合起来。
行情数据 / 数据库 / 系统工程
我构建行情数据流水线及其背后的服务系统。
历史数据处理、紧凑数据库结构、分层存储和实时行情接入。我的工作从解析与内存布局延伸到事件分发和系统运行测量。
主要项目:处理历史行情的 massive-speedup、实现紧凑数据库结构的 Goblin Core,以及探索存储层次的 Goblin Store。
自 1989 年起构建生产软件
我的工作涵盖 Quantlab 和 Massive.com 的量化与行情系统、S&P Global 的大规模金融数据,以及 Google 和 Amazon 的系统工程。下面的开源项目公开了我目前在数据接入、传输、重放和系统运行方面的工作。 数据系统主要使用 C++ 和 Python,终端文字处理器使用 Rust 编写。
部分开源项目 / 行情与数据库
先看 massive-speedup、Goblin Core 和 Goblin Store:历史数据、数据库内部机制和存储层次。下面的行情接入与消息传输项目将这些工作延伸到实时系统。
历史行情 / 存储 / 因果重放
读取 处理 Massive 的压缩历史数据,构建按时间戳排序的存储。
重放 按时间顺序推进市场事件,支持可配置延迟及考虑买卖报价的订单模拟。
语义 策略代码无法读取未来成交价,订单使用配置延迟之后可见的买价或卖价。
系统中的位置 参考系统将历史路径与 Goblin Slurp 的实时接入、RTTA 的流式分析结合起来。
数据库内部机制 / 紧凑索引 / C++23
结构 Redis 兼容操作,包含带类型的紧凑有序集合、Swiss 哈希表和使用内存池索引的 B+ 树。
测量 在 Wikipedia 重放中,8080 万个 INT32/FLOAT32 页面计数器的最终进程 RSS 为 2.10 GiB,并通过完整状态映射验证。
可检查内容 阅读布局、工作负载与结果。RESP/SBE 传输和 Pub/Sub 同时支持实时事件总线。
存储层次 / 内存与 I/O / C++23
设计 NUMA 感知、兼容 Memcached 的大对象缓存与 HTTP 服务器。
数据路径 在 RAM 中保留延迟敏感的对象头部,从 SSD 流式读取温数据,并预读 HDD 上的冷尾部。
证据 与 Memcached 和 extstore 的公开比较包含工作负载、延迟、内存和存储成本上下文。
实时行情接入 / C++23
接入 原生桥接程序接收经过授权的商业 WebSocket 行情,将源数据帧拆分为独立事件。
规范化 向 Goblin Core 发布 JSON 或 SBE 事件,供下游订阅者使用。
流量控制 使用有界队列和显式背压,将接入与发布之间的交接纳入系统设计。
实际用途 它是我的研究与日内交易参考系统中的实时行情接入组件,Goblin Core 负责内部扇出。
抓包分析 / 延迟与丢包
输入 PCAP、PCAPNG 和 Nasdaq 风格的二进制抓包。
分析 模拟速率、分帧、排队和压缩阶段,报告逐层延迟分布、最高至 p99.99 的分位数,以及精确的丢包归因。
范围 模型未计入压缩计算时间;公开文档明确说明了这一假设。
消息传输 / 组播 / Python 集成
传输 Aeron 的 InfiniBand 传输扩展,支持 UD 与 RC、组播、零拷贝发送,并提供公开硬件基准。
集成 pyaeron 提供原生 CPython 绑定,支持 IPC、UDP、可选的嵌入式媒体驱动和 Python 缓冲区直接处理。
下游消费 / 流式状态
状态 319 种公开因果算法,覆盖指标、在线模型和流式研究信号,提供 C++23 与 Python API。
语义 在重放和实时运行中,每次接收一条观测并向前推进状态。
证据 公开基准说明算法覆盖范围和 CPU 环境,并分别测量纯状态更新与返回 Python 结果的成本。
工程笔记
正确性和运行行为需要比一个漂亮的延迟中位数更多的证据。这些文章通过仪器观测和受控实验追踪问题,并说明结果的适用范围。
时钟行为
尾延迟诊断
基准验证
数据库内部机制
运行时 / Rust / 存储 / 算法
对解析、内存、状态和测量的关注,同样贯穿我的 Rust 终端软件、存储服务器和数值计算库。
Rust / 终端软件
编辑器 使用 Rust 编写、受 WordPerfect 启发的原生 Unicode 文字处理器。
实现 公式解析和交互预览在编辑器内部运行,使用真实字体轮廓,以及 Kitty、Sixel 或 Unicode 盲文点阵绘制。
格式 支持图像、Markdown 互转和 LaTeX/PDF 输出。阅读项目介绍与文件兼容性限制。
SIMD 序列算法
问题 比对和距离算法拥有昂贵内循环,而且不同 CPU 的指令集差异巨大。
工作 面向 C++ 与 Python 的 Smith-Waterman、Needleman-Wunsch、编辑距离、语音编码和时间序列距离。
证据 基准公开后端、评分、位宽、工作负载和 CPU 上下文,而不是给出一个万能加速比。
LoongArch 优化
问题 当上游软件停留在通用代码或较窄向量扩展时,有用的硬件也会表现缓慢。
工作 可安装的 LoongArch 软件包、NumPy LASX、SIMD 超越函数和 BLAKE3 LoongArch 移植。
证据 补丁与基准一起发布,让架构支持成为用户可以运行的东西,而不是幻灯片。
小型状态估计
问题 小型状态空间模型不应该承担动态矩阵或逐次 Python 调用的高额开销。
工作 固定尺寸 C++23 Kalman 变体、直接 Python 绑定,以及支持不规则时间与观测方差的批量更新。
测量 公开的二状态、单观测线性批量案例在文档所述机器上每个测量值约需 43 ns。
外部排序
问题 当定长记录数据集大于 RAM 时,局部性和缓存行为本身就成为算法。
工作 面向局部访问、可预测记录和 LRU 友好行为设计的 C++ 与 Python 外部排序器。
历史 这个实验后来成为一家创业公司的技术基础,并继续以开源形式提供。
更多系统工程
更多关于终端会话、运行时内部机制、处理器架构支持和实用工具的工作。《如果当年胜出的是终端?》介绍 Goblin Mosh、GoblinView、Inkline 和上面的 Rust 编辑器 Goblin Purrfect 如何协同工作。
远程终端会话
窄带链路 / 网状无线电网络
电子纸终端 / reMarkable 2
终端窗口管理器
数学 / 无障碍阅读
解释器内部机制
数值计算
增量图搜索
模拟信道 / 高频天波
推荐系统
采购与分类
小实验
Goblin Reactor
我用开放系统证明能力。Goblin Reactor 把这些能力带进客户系统:应用运行时、 数据库、内存、存储、网络、原生代码和生产行为。
告诉我哪里慢f"{given_name.lower()}.{family_name.lower()}@gmail.com"f'{2**8}-{2*3**2*37}-{13*101}'