Tapio 效能數據¶
一筆下單,Tapio 從收到封包到打出訂單只需要 1.94 微秒。
Tapio 以純 C/C++ 實作,運行於標準 CPU,延遲穩定性卻逼近純硬體 FPGA—— 讓高頻交易團隊享有硬體加速的效能,同時保有軟體系統的靈活性與可維護性。
兩個版本一覽¶
Tapio 提供兩種部署形態,對應不同的硬體環境與延遲需求:
| 版本 | 下單延遲 p50 | 回報延遲 p50 | 部署形態 |
|---|---|---|---|
| 通用版 | 5.060 µs | 5.206 µs | 任何 x86 伺服器,標準 Linux 即可部署 |
| 高速版 | 1.949 µs | 2.040 µs | 硬體廠商聯合調校的超頻主機 + kernel-bypass NIC |
數據來源:以 Tapio core v1.3.0 在同一套量測系統依序實測;測試硬體規格見 硬體基準。量測方法見下方說明。
讀懂延遲數字¶
什麼是延遲¶
「延遲」是從一件事發生到結果完成的時間。在交易系統裡:
- 下單延遲:客戶送出下單請求 → Tapio 把 R01(委託輸入)打給交易所
- 回報延遲:交易所送回 R02(委託回報)→ Tapio 把下單回報送到客戶
- 端到端 RTT:客戶送出下單請求 → 客戶收到自己的成交回報
延遲以微秒(µs,百萬分之一秒)計。參考尺度:
| 事件 | 時間 |
|---|---|
| Tapio 高速版處理一筆下單 | 2 µs |
| CPU core-to-core 通訊延遲 | ~24–35 ns |
| NVMe SSD 隨機讀取 | ~100 µs |
| 人眨一次眼 | ~100 ms(= 50,000 筆下單) |
為什麼不用平均值——P50 / P99 入門¶
假設 100 筆下單中:
- 99 筆耗時 2 µs
- 1 筆耗時 50 µs
平均值是 2.48 µs,看起來還好。但那一筆 50 µs 的下單,在市場快速波動的瞬間,可能正是最關鍵的那一筆。
所以我們用百分位數描述延遲分布:
- p50(中位數):一半的請求比這快,一半比這慢。代表典型體驗。
- p99:每 100 筆才 1 筆這麼慢。
- p99.9:每 1,000 筆才 1 筆這麼慢。
- stdev(標準差):數值愈小,表示延遲愈穩定、愈可預測。
「tail」 指的是高百分位(p99 以上)的部分。極速交易系統最在意 tail——因為市場波動時,慢的那幾單就是輸錢的那幾單。
A、B 的 p50 / p99 一樣,但 B 的標準差大 6 倍,意味著偶爾會出現無法預期的延遲尖峰。光看 p50 不夠,一定要看 tail 與 stdev。
量測標準:交換器硬體時戳¶
我們採用 Arista 交換器 SPAN port + NIC 硬體時戳(PTP)量測——這是傳統金融(tradfi)交易基礎設施的標準量測規格。
flowchart TB
Client["客戶端<br>SDK"]
Exchange["交易所"]
subgraph Arista["🔀 Arista 交換器 — SPAN mirror 監聽雙向封包,NIC 硬體打上 PTP 時間戳記"]
NICA["NIC A<br>(客戶側)"]
NICB["NIC B<br>(交易所側)"]
end
Tapio(["Tapio"])
Client <-->|"① 下單請求<br>④ 下單回報"| NICA
Exchange <-->|"② R01(委託輸入)<br>③ R02(委託回報)"| NICB
NICA <--> Tapio
NICB <--> Tapio
關鍵:硬體時戳由交換器 NIC 在封包進出電纜的瞬間打上,完全不受 OS 排程或 Tapio 程式碼影響。無論 Tapio 怎麼改,量測儀器本身的時間戳都是客觀的。
指標定義¶
| 指標 | 定義 | 量測方式 |
|---|---|---|
| GW_outbound | 下單請求進 Tapio NIC → R01(委託輸入)打出 NIC | Arista 硬體時戳 |
| GW_inbound | R02(委託回報)進 Tapio NIC → 下單回報打出 NIC | Arista 硬體時戳 |
| RTT | 客戶送出 → 客戶收到回報 | 客戶端軟體量測 |
| SW | Tapio 收到請求 → 呼叫 send 的 CPU 時間 | Tapio 內部插樁 |
GW_outbound 與 GW_inbound 是 Tapio 真正掌握的部分,也是本頁的主要指標。RTT 受交易所處理時間影響,只作為背景資訊列出。
版本對比¶
| 指標 | 通用版 | 高速版 |
|---|---|---|
| 連線上限 | 256 | 64 |
| GW_outbound p50 | 5.060 µs | 1.949 µs |
| GW_outbound p99 | 5.809 µs | 2.197 µs |
| GW_outbound stdev | 286 ns | 117 ns |
| GW_inbound p50 | 5.206 µs | 2.040 µs |
| GW_inbound p99 | 5.809 µs | 2.360 µs |
| RTT p50 | 18.723 µs | 12.300 µs |
p50 只是故事的一半——穩定性才是關鍵
高速版除了平均延遲快 2.6×,分布的離散度也壓得更緊。p99 僅比 p50 多 248 ns(+13%),stdev 117 ns——100 筆下單中最慢的那 1 筆,比典型那筆只 多 0.25 µs。對 HFT 策略而言,市場波動的關鍵時刻避免延遲尖峰,比平均快 幾奈秒更重要。
| 通用版 | 高速版 | |
|---|---|---|
| GW_outbound p50 | 5.060 µs | 1.949 µs |
| GW_outbound p99 | 5.809 µs | 2.197 µs |
| p99 超出 p50 的幅度 | +0.749 µs(+15%) | +0.248 µs(+13%) |
| stdev | 286 ns | 117 ns(低 2.4×) |
高速版直接操作 NIC zocket,繞過 OS kernel 與 userspace TCP 的所有排程與 緩衝邏輯——這正是延遲尖峰的常見來源。p99 與 p50 的差距壓到僅 +13%,是 純軟體 trading gateway 罕見能達到的水準。
通用版¶
標準 Linux TCP stack,任何 x86 伺服器皆可部署。
無需專用網路硬體,現有機器安裝 Tapio RPM 後即可啟動。適合一般交易系統、 非高頻策略,或評估期間的初始部署。
高速版¶
與硬體廠商聯合調校的超頻交易主機,含 kernel-bypass NIC。
旗艦配置由 Tapio 與硬體合作夥伴共同訂製,每一台出貨前經三道工程確認:
- 機型規格:CPU、主機板、記憶體、NIC 由 Tapio 與硬體廠商共同議定
- BIOS 設定:逐項與廠商商談並鎖定,包含 CPU 頻率、節電模式、核心配置等
- 出貨驗測:Tapio 工程團隊實機跑 benchmark,驗證能穩定重現本頁延遲數據
封包從 NIC DMA 直接進 userspace buffer,完全不過 OS TCP stack,GW_outbound p50 達到 1.949 µs,比通用版快 2.6×(-61%),stdev 僅 117 ns, 實現硬體物理極限附近的延遲與極低抖動。
p99 與 p50 的差距僅 +248 ns(+13%)——也就是說 100 筆下單中最慢的那 1 筆, 比典型那筆只多 0.25 µs。這個 tail 收緊的程度,是純軟體 trading gateway 罕見 能做到的水準。
為什麼能做到¶
高速版的 1.95 µs p50、117 ns stdev、+13% tail,不是偶然的測試環境數字——是六項工程決策的累積結果,包含 kernel bypass、專用核心隔離、無鎖設計、熱路徑塞進 L1 cache、核心與硬體調校、以及全鏈路預熱。完整說明見系統架構。
本頁所有量測數據均為 pre-warm 後的穩態數值。
高速版完整數據¶
以下是生產配置的完整量測原始數據。測試條件:10,100 筆 ping-pong 下單, kernel bypass busy-poll mode,pre-warm 後的穩態數值。
硬體量測(Arista SPAN 硬體時戳,單位 µs)¶
| 指標 | min | p50 | p95 | p99 | stdev |
|---|---|---|---|---|---|
| GW_outbound | 1.669 | 1.949 | 2.040 | 2.197 | 117 ns |
| GW_inbound | 1.654 | 2.040 | 2.109 | 2.360 | 125 ns |
| Server_processing | 7.843 | 8.340 | 9.091 | 9.543 | 810 ns |
| RTT | 11.569 | 12.300 | 13.086 | 13.583 | 843 ns |
Server_processing 是交易所內部處理時間,Tapio 無法影響,列出作為環境
噪聲驗證:同一個 benchmark run 裡此值應穩定,變異過大代表環境受干擾。
延遲分解¶
RTT p50 12.3 µs 的組成:
RTT p50 = 12.300 µs
│
├─ GW_outbound 1.949 µs (16%) ← Tapio 下單路徑
├─ Server_proc 8.340 µs (68%) ← 交易所,改不動
└─ GW_inbound 2.040 µs (17%) ← Tapio 回報路徑
Tapio 合計佔 RTT 的 32%,其餘 68% 是交易所與網路傳輸的固定成本。 Tapio 已把自己能掌握的部分壓到接近物理極限——再把 Tapio 砍到零, RTT 也只從 12.3 µs 變成 8.3 µs,而那 8.3 µs 由光速與交易所決定, 不是軟體能解決的問題。
CPU 內部量測(Tapio 內部插樁,單位 ns;3-run median)¶
這組數字是 Tapio 程式碼實際執行的 CPU 時間,不含 NIC 硬體傳輸部分。
下單路徑(下單請求進 → R01 委託輸入打出)
| 指標 | 數值 |
|---|---|
| avg | 274 ns |
| p50 | 257 ns |
| p90 | 335 ns |
| p99 | 382 ns |
| p99.9 | 444 ns |
回報路徑(R02 委託回報進 → 下單回報打出)
| 指標 | 數值 |
|---|---|
| avg | 294 ns |
| p50 | 283 ns |
| p90 | 321 ns |
| p99 | 661 ns |
| p99.9 | 725 ns |
為何 ~1.95 µs 已是物理極限¶
GW_outbound p50 1.949 µs 可以拆解為三段,每段都對應到第三方規格可獨立驗證:
GW_outbound p50 ≈ 1,949 ns
│
├─ L2 交換器 cut-through 轉發 ~750 ns ← 兩段 forwarding,由交換器 datasheet 決定
├─ NIC 硬體雙端路徑 ~950 ns ← 線材 + PHY/MAC + PCIe + DMA,由 NIC vendor 規格決定
└─ 應用層 SW(Tapio 風控) ~250 ns ← Tapio 程式碼,SW 內部插樁實測
前兩段合計 ~1.7 µs 是與軟體無關的物理限制:
- L2 交換器轉發 ~750 ns:cut-through forwarding 架構的 10G 交換器, 每段轉發約 350–380 ns(vendor datasheet 規格)。資料路徑為兩段 (client → Tapio、Tapio → exchange),合計約 750 ns,無論 Tapio 軟體 怎麼優化都不會消失。
- NIC 硬體雙端路徑 ~950 ns:DAC/光纖、SFP+、PHY/MAC、NIC RX、PCIe DMA、 NIC TX 序列化合計,落在 NIC 廠商公布的 typical 範圍內 (Xilinx/Solarflare X2522 一側 NIC 500–900 ns)。
應用層 SW 那段 ~250 ns 由內部插樁量測確認:下單路徑 SW p50 257 ns, p99 382 ns,p99 僅比 p50 多 125 ns——這代表純 C/C++ 實作的風控邏輯本身 已極度穩定,幾乎沒有因計算複雜度造成的延遲尖峰。即便把 Tapio 程式碼優化到零, 整體延遲也只能從 1.95 µs 降到約 1.7 µs,剩下的由光速、交換器與 NIC 硬體決定。
硬體升級:NIC X3522 進一步壓縮延遲¶
在 SW 路徑與交換器拓樸不變的前提下,將 NIC 從 Xilinx/Solarflare X2522 升級為 新一代 X3522(AMD Alveo),wire-to-wire 進一步縮減:GW_outbound p50 從 1.95 µs 降到 1.75 µs,GW_inbound p50 從 2.04 µs 降到 1.65 µs。
| 指標 | X2522 | X3522 | 改善 |
|---|---|---|---|
| GW_outbound p50 | 1,949 ns | 1,751 ns | −198 ns |
| GW_outbound p99 | 2,197 ns | 2,011 ns | −186 ns |
| GW_outbound stdev | 117 ns | 103 ns | −14 ns |
| GW_inbound p50 | 2,040 ns | 1,646 ns | −394 ns |
| GW_inbound p99 | 2,360 ns | 1,906 ns | −454 ns |
| GW_inbound stdev | 125 ns | 103 ns | −22 ns |
改善全部落在前述拆解的 NIC 硬體雙端路徑那段(~950 ns → ~750 ns), SW 路徑與 L2 交換器轉發未變動,因此 SW p50 257 ns 等內部插樁數值仍適用。 X3522 的 driver 與 Onload 設定見安裝指南。
硬體極限附近的穩定性
高速版 GW_outbound 的 p99 比 p50 只多 248 ns,stdev 僅 117 ns。 Tapio 的延遲邊界,已經是光速與 PCIe 硬體,不是軟體。