跳轉到

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:p50=2.0µs,p99=2.3µs,stdev=67ns   ← 穩定
配置 B:p50=2.0µs,p99=2.3µs,stdev=450ns  ← 偶爾抖動

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 硬體,不是軟體。