Linux rseq:不用鎖的 Per-CPU 資料結構,比 mutex sharding 快 43 倍
justine.lol · 2026-05-31
Justine Tunney 深入剖析 Linux 4.18(2018 年)引入的 Restartable Sequences(rseq)系統呼叫,並以 hit counter 和 per-CPU freelist 為具體實作示範,展示在 128 核心 ARM 與 96 核心 x86 上分別比 mutex sharding 快 34× 和 43× 的效能數字。rseq 的核心思路是讓 kernel 主動偵測並中止臨界區段,而非用鎖來阻止競爭,適用於高核心數系統上的並行計數器、記憶體池等低延遲場景。
核心機制
每個執行緒在啟動時呼叫 rseq(),向 kernel 登記一塊 32-byte 的 TLS 區域。Kernel 持續把當前 CPU 編號寫入此區域,讓執行緒得以讀取自己在哪顆 CPU 上執行,進而操作對應的 per-CPU 資料,無需任何跨 CPU 同步。
臨界區段以 rseq_cs 結構描述符標記。Kernel 在搶佔前檢查 program counter 是否落在已登記的指令範圍內;若是,則強制跳至 abort handler 重試,整個過程等同於「如果被打斷就從頭來過」的無鎖語意。
void rseq_increment(struct PerCpuCounter *counters) {
int cpu;
retry:
cpu = __rseq_abi.cpu_id; // 讀取當前 CPU
RSEQ_CS_START // 登記臨界區段
counters[cpu].value++; // per-CPU 操作,無競爭
RSEQ_CS_END
return;
abort:
goto retry;
}效能數字
在 128 核心 ARM 上,原本需要 128-way sharded mutex 的 counter,改用 rseq 後 CPU time 從 3.2ms 降至 0.094ms(34×);96 核心 x86 上為 4.5ms → 0.105ms(43×)。差距來自 mutex sharding 仍需跨 cache line 的 atomic CAS,而 rseq 完全避開共享記憶體競爭。
per-CPU freelist 實作
文章也提供可直接使用的 per-CPU freelist,用來取代 tcmalloc 等分配器的 per-thread cache。由於操作只涉及單一 CPU 的 head pointer,不需要任何 CAS。Dequeue 失敗時回退到全域鎖保護的 slab,代價遠低於每次都競爭同一鎖。
限制
rseq 目前為 Linux 專屬,臨界區段必須以手寫組語或 compiler intrinsic 實作(GCC/LLVM 尚無自動生成支援)。作者預期 allocator 和標準函式庫會逐步整合此機制,尤其在 ARM 伺服器市場滲透率增加、core count 持續增長使傳統 mutex sharding 的 cache coherence 開銷更加顯著的趨勢下。
原始來源:justine.lol/rseq
AV2 v1.0.0 規格正式發布:AV1 後繼者支援 AR/VR 與分割螢幕傳輸
Alliance for Open Media · 2026-05-28
Alliance for Open Media(AOMedia)於 2026 年 5 月 28 日發布 AV2 規格 v1.0.0,同步釋出參考軟體 AVM(AV2 Video Model)。AV2 是 AV1 的後繼開放無版權費視訊編解碼器,由 Google、Apple、Meta、Microsoft、Amazon、Netflix、Cisco 等成員共同開發,以改善 AR/VR 視訊、分割螢幕多節目傳輸(split-screen delivery)、螢幕內容壓縮效率為主要目標。
規格重點
AV2 在 AV1 的熵編碼、預測、轉換框架上延伸,加入針對現代使用場景的工具:
- AR/VR 增強支援:改善 360° 等距矩形(equirectangular)與全景投影格式的率失真效率
- 分割螢幕傳輸:單一位元流可攜帶多個獨立節目,播放端可依需求只解碼其中一部分,降低多訊號串流的頻寬需求
- 螢幕內容工具:改良調色板模式(palette mode)與雜湊型幀內複製(intra block copy hash),對混合圖文、UI 截圖等高頻場景提升壓縮率
- 擴大品質範圍:量化參數範圍延伸,既能表達 near-lossless 存檔品質,也能在極低位元率下維持可用品質
與 AV1 及 H.266 的定位
AOMedia 目標是讓 AV2 達到比 AV1 再提升 30–40% 的壓縮效率,與 H.266/VVC 競爭,同時維持完全免版稅授權。目前 AVM 參考軟體的編碼速度遠低於 libaom 初版,實際硬體加速支援需等待主要晶片廠商(Intel、Qualcomm、Arm)納入 IP,預估 2027–2028 年才會在消費級裝置上普及。
規格文件與參考實作
AV2 v1.0.0 規格文件、AVM 原始碼及測試媒體均發布於 https://av2.aomedia.org/。AVM 基於 libaom 架構,以 C/C++ 撰寫,支援 Linux/macOS/Windows 建置。目前建議僅用於研究與合規性測試,不適用於生產串流環境。Netflix、YouTube 等已大規模部署 AV1 的平台預計成為 AV2 的早期採用者。