後端工坊 2026 年 6 月 30 日

2026-06-30 — Linux 7.2 創近期提交新高、LLVM Bump 分配器三項微最佳化、Ante 語言融合借用檢查與 RC

primary=https://lwn.net/Articles/1078539/ primary=https://maskray.me/blog/2026-06-28-optimizing-llvm-bump-allocator primary=https://verdagon.dev/blog/ante-blending-borrowing-rc






2026-06-30 後端工程日報

Linux 7.2 合併視窗關閉:13,412 筆非合併提交創近期新高

LWN.net · 2026-06-29

Linux 7.2 的合併視窗於 2026 年 6 月 29 日正式關閉,Linus Torvalds 宣告本輪共收入 13,412 筆非合併提交,是 Linux 6.7 開發週期(2024 年底)以來最密集的一次。這批提交涵蓋 RISC-V 架構更新、新型 GPU 驅動程式及網路子系統大規模改進,使 7.2-rc1 成為近兩年規模最大的 rc1 版本。

RISC-V 與 GPU 驅動擴張

本次 RISC-V 子系統帶入多項架構層級修正與新平台支援,指令集擴充的核心抽象層也隨之重構,以便向量延伸(Vector Extension)與超純量排程能更順利整合。GPU 驅動方面,新驅動程式的加入延續了 DRM 子系統快速擴張的態勢;近幾個版本週期以來,圖形與顯示子系統始終是提交量最高的領域之一。網路子系統則迎來多項針對高吞吐量場景的路徑最佳化,以及對新型卸載硬體的支援。

合併密度的意義

13,412 筆的數字意味著在短短兩週視窗內,平均每天送出約 957 筆提交,遠高於近四個版本的平均水準。核心維護者指出,部分原因來自前幾個版本積壓的大型重構分支終於成熟並通過審查。對下游發行版與嵌入式廠商而言,此次提交量代表更長的回歸驗證週期——尤其是 RISC-V 與 GPU 路徑的改動涉及底層 ABI,需要謹慎的相容性測試。

原始來源:LWN.net — Linux 7.2 merge window


最佳化 LLVM 的 Bump 分配器:三個微小改動帶動全鏈路提速

MaskRay (Fangrui Song) · 2026-06-28

LLVM 的 BumpPtrAllocator 是 Clang AST、lld 物件池與 TableGen 共用的 arena 分配器,其快速路徑在每次分配時都需執行對齊計算、邊界檢查與計數更新。2026 年 6 月,LLVM 工程師 Fangrui Song 以三項 PR 對此進行重構,將典型 24 位元組、8 位元組對齊分配的快速路徑壓縮至六條 x86-64 指令,在 stage2-O0-g 組態下取得 −0.36% 的全域指令數下降。

三項改動的核心邏輯

第一項(PR #205240)針對最小對齊跳過:原本每次分配都呼叫 alignAddr(CurPtr, Alignment),改為只在請求超過預設 MinAlign(8 位元組)時才觸發重對齊,使常見路徑的對齊計算成為編譯期常數,讓編譯器直接消除多餘分支。第二項(PR #205485)以「哨兵末端值」取代 null 指標檢查:原有雙條件 AllocEndPtr <= End && CurPtr != nullptr 合併為單一無符號比較 AllocEndPtr < EndSentinel,減少快速路徑的判斷次數。第三項(PR #205711)移除每次分配的 BytesAllocated += Size該計數器僅被 lldb ConstString 報告、clangd 除錯日誌與 TableGen 統計等低頻路徑使用,對正常分配效能純屬額外負擔。

最佳化後的組合語言

三項改動合併後,典型分配的快速路徑如下所示:

mov  rax, [rdi]        ; 讀取 CurPtr
lea  rcx, [rax + 0x18] ; new = CurPtr + 24
cmp  rcx, [rdi + 0x8]  ; 對比 EndSentinel
jae  .slow             ; 空間不足則跳慢速路徑
mov  [rdi], rcx        ; 更新 CurPtr
ret

測量結果顯示,指令數的實際收益主要來自分配函式本身變輕之後,呼叫端得以將其內聯,進而觸發更大範圍的最佳化,而非微操作本身的削減。各組態改善幅度介於 −0.09% 至 −0.36% 之間,以除錯建置(O0-g)受益最為顯著。

原始來源:MaskRay — Optimizing LLVM's Bump Allocator


Ante 語言:在借用檢查與參考計數之間找到第三條路

verdagon.dev · 2026 年 6 月

Ante 是一門仍在積極開發中的系統程式語言,目標是以比 Rust 更平緩的學習曲線實現記憶體安全。其核心主張是:對堆疊物件使用單一所有權與借用檢查,對需要共享所有權的物件則允許選用參考計數(RC),並在兩者之間安全切換——且全程無需執行期崩潰或額外的執行期開銷。

Shape-Stability:讓多重可變參考成為可能

Ante 引入「形狀穩定性(shape-stability)」概念:對一個形狀穩定的值持有參考,無論其他地方如何對該值進行突變,此參考永遠有效。具體而言,struct 的欄位在突變時不會改變 struct 本身的記憶體佈局,因此可以同時持有多個對同一 struct 及其欄位的可變參考。這讓 heal(entity, entity) 這類在 Rust 中需要繞道 split_at_mut 才能實現的呼叫,在 Ante 中直接合法。

uniq 與暫時獨佔轉換

Union 的突變規則則不同——改變 union 的變體(variant)會使舊欄位的參考失效,因此 Ante 要求以 uniq(獨佔可變參考)存取 union。uniq 類似 Rust 的 &mut,在其作用域內不得存在其他指向同一物件的可用參考。

match uniq ship.engine
| StringTheoryEngine str ->
    str.[0] := 'z'   // 安全:此作用域內無其他 alias 能修改 ship
| ImpulseEngine fuel ->
    ()

關鍵機制在於「暫時獨佔轉換」:即使 ship 原本是 Rc Spaceship(共享所有權),只要編譯器能靜態驗證當前作用域內沒有其他可達的 alias,就允許將其暫時轉換為 uniq 參考進行安全突變,隨後恢復共享語意;若存在潛在 alias,編譯器直接拒絕編譯,避免執行期崩潰。

與 Rust、Swift 的比較

Rust 的 RefCell 透過執行期借用計數實現內部可變性,一旦規則被違反就 panic;Swift 的排他性存取檢查同樣有執行期開銷且可能崩潰。Ante 的做法是將更多分析移至編譯期的可達性(reachability)推導,以靜態保證取代動態檢查。這套分析的主要限制在於,當 API 邊界改變時,型別間的可達關係可能需要重新計算,脆弱性仍有待後續設計(如型別標記、效果系統)加以緩解。

原始來源:verdagon.dev — Ante: Blending Borrow Checking and RC



End of article
0
Would love your thoughts, please comment.x
()
x