微秒级交易系统 · 时间戳技术实战

📚 共计 30 章节
01
时间戳的基石
理解操作系统时钟源 (CLOCK_REALTIME vs CLOCK_MONOTONIC) 与微秒级精度要求。
时钟源精度
02
C语言时间接口
深入剖析 gettimeofday() 与 clock_gettime() 的底层实现与性能差异。
系统调用性能
03
x86_64 时间戳指令
RDTSC 与 RDTSCP 指令的原理、乱序执行风险与序列化屏障。
RDTSC乱序
04
RDTSC 校准
如何通过 CPU 频率 (TSC频率) 将 TSC 计数值转换为纳秒/微秒时间。
校准转换
05
用户态 vs 内核态
系统调用的开销分析,为什么用户态时间戳是低延迟系统的关键。
上下文切换延迟
06
vDSO 机制
利用虚拟动态共享对象 (vDSO) 在用户态无锁获取时间,避免上下文切换。
vDSO无锁
07
内存屏障与指令排序
MFENCE、LFENCE、SFENCE 在时间戳采集中的正确使用姿势。
屏障排序
08
CPU 亲和性绑定
将时间戳采集线程绑定到特定核心,避免 TSC 同步问题与缓存抖动。
亲和性缓存
09
多核 TSC 同步
不同核心间 TSC 偏移的测量与补偿算法。
偏移补偿
10
高精度计时器
POSIX timer_create 与 timerfd 在微秒级事件调度中的应用。
timerfd调度
11
时间戳缓存策略
在事件循环中批量获取时间戳,减少系统调用频率。
缓存批量
12
NTP 影响与防护
NTP 调整系统时间时,如何保护时间戳序列的单调性。
NTP单调性
13
PTP 精确时间协议
硬件时间戳在网卡 (NIC) 层面的实现与软件时间戳的对比。
PTP硬件戳
14
Linux 内核时间子系统
hrtimer (高精度定时器) 的工作原理与配置。
hrtimer内核
15
时间戳数据结构设计
如何设计一个 64 位的时间戳结构体,兼顾精度与存储效率。
结构体64位
16
序列号生成器
基于时间戳的全局唯一序列号 (类似 Snowflake) 的微秒级实现。
Snowflake唯一ID
17
日志系统中的时间戳
如何在高吞吐日志流中嵌入微秒级时间戳而不影响性能。
日志高吞吐
18
时间戳压缩算法
针对高频交易日志的增量压缩与差值存储技术。
压缩差值
19
硬件时间戳卡
了解 DPDK 与 Solarflare 网卡对硬件时间戳的原生支持。
DPDKSolarflare
20
FPGA 时间戳
在 FPGA 中实现自定义的纳秒级时间戳计数器。
FPGA纳秒
21
时间同步协议栈
Linux PTP (ptp4l) 的配置与精度调优实战。
ptp4l调优
22
时间戳测试框架
如何构建一个微秒级精度的延迟测量探针 (Probe)。
探针延迟
23
统计学去噪
剔除时间戳测量中的异常值 (Outlier),使用中位数与百分位数。
异常值百分位
24
时间戳可视化
使用 Python 的 matplotlib 绘制时间戳分布直方图与延迟曲线。
matplotlib直方图
25
跨语言调用 (Python)
Python 通过 ctypes/cffi 调用 C 语言的高精度时间戳函数。
ctypescffi
26
Rust 中的时间戳
Rust 标准库与 `quanta` crate 在微秒级时间获取上的表现。
Rustquanta
27
Go 语言时间戳
Go runtime 的 time.Now() 在 Linux 上的 vDSO 加速路径。
GovDSO
28
Java 时间戳
System.nanoTime() 的 HotSpot 实现与 -XX:+UseRdtsc 参数。
JavaUseRdtsc
29
实战案例一:订单簿快照
构建一个微秒级延迟的订单簿快照系统。
订单簿快照
30
实战案例二:跨机房监控
基于时间戳的跨机房交易延迟测量与监控看板。
跨机房监控