系統架構¶
Tapio 在純 C/C++ 軟體上達成接近硬體 FPGA 的延遲穩定性,並非依賴單一技術,而是六項獨立工程決策的累積結果。本章說明這些決策的內容與設計理由;對應的延遲數字見效能數據。
同一條熱路徑上同時完成的事前風控設計,見風控機制。
1. Kernel bypass(核心繞過)¶
TCPDirect 讓封包從 NIC DMA 直接送進 userspace buffer,完全不碰 OS TCP stack。消除了 kernel context switch、socket buffer copy、skb 記憶體配置這三大傳統 kernel 路徑的開銷。CPU 上的處理時間因此被壓到極低,是高速版相對於通用版最主要的延遲縮減來源。
2. Dedicated core isolation(專用核心隔離)¶
NetThread 獨佔一顆 CPU core,透過 Linux 的 isolcpus / nohz_full /
rcu_nocbs 核心參數完全隔離;BIOS 把實體 CPU 鎖到較少核心(4 顆 active),讓這顆 hot core 拿到更高的 turbo bin。在量測期間,這顆 core 上沒有任何 context switch 發生。沒有 OS 排程插隊,延遲曲線因此可預測。
熱路徑只占用 1 顆隔離核心;CalcThread 與其他 system / helper threads 共用剩餘核心,由 kernel scheduler 自行排程,不再額外隔離。
對應的安裝設定見安裝前系統調校 — GRUB 開機參數與IRQ Affinity。
3. Lock-free system design(無鎖設計)¶
NetThread 熱路徑上沒有任何 mutex 或 condition variable。CalcThread 與 NetThread 之間透過 SPSC(single-producer single-consumer)queue 傳遞訊息, 無共享鎖、無 cache line bouncing。這讓多核心架構在高吞吐下也不會互相干擾。
4. Hot path fits in L1 cache(熱路徑塞進 L1)¶
從收到下單請求到送出 R01(委託輸入)的整條處理路徑——解析、風控計算、建構回應、發送——所有 instruction 都塞進 CPU L1 instruction cache(L1i);關鍵資料結構對齊 cache line,L1 data cache(L1d)命中率接近 100%。熱路徑上 zero L3 cache miss。每筆下單的 CPU 時間因此穩定,不受記憶體延遲波動影響。
5. Kernel & hardware tuning(核心與硬體調校)¶
| 調校項目 | 效果 |
|---|---|
mlockall(MCL_CURRENT \| MCL_FUTURE) |
記憶體頁全部預鎖,page fault = 0 |
nohz_full + idle=poll |
消除 CPU C-state wakeup latency |
| BIOS 鎖核 | hot core 跑滿較高的 turbo bin,且 L3 contention 減半 |
| jemalloc | 取代 glibc allocator,降低 arena lock 與 brk 延遲 |
-march=native build flags |
AVX2 指令集對齊硬體,最大化 scalar 密度 |
| NIC firmware 最佳化 | TCPDirect 自編 release build |
完整的部署調校步驟見部署與調校 — 安裝章節。
6. Full-path pre-warm(全鏈路預熱)¶
熱路徑再優化,第一筆下單仍可能因 cold-start 產生尖峰——instruction cache 尚未填充、資料結構尚未進 L1d、連線狀態尚未就緒。Tapio 支援全鏈路 pre-warm:正式交易前透過暖機封包觸發完整下單路徑,確保 L1i、L1d、連線狀態全部就緒,讓第一筆正式下單就能以穩態延遲執行,而不是付出 cold-start 代價。效能數據所有量測數字均為 pre-warm 後的穩態數值。
整體效應¶
這六項決策的累積效果,是把延遲抖動壓到接近多核硬體物理底線的水準(核心硬體量測見硬體 baseline)——意味著要再往下,瓶頸已不在軟體。