突破交換層瓶頸 讀取效能狂飆 452 倍
【新技術 ㊙️】在現今 Linux 系統中,為了提升可用記憶體容量,多數發行版均仰賴 ZRAM 或 zswap 等壓縮技術。然而兩者本質上仍建構於「交換層」(Swap)邏輯之上,記憶體壓縮雖然帶來更大容量,卻同時伴隨嚴重的分頁錯誤(Page Fault)開銷。
終於,來自 Meta 的工程團隊近日於布拉格舉行的 Linux Plumbers Conference 上,提出了一項名為「CRAM」(Compressed RAM)的全新記憶體壓縮架構概念,打破傳統將壓縮記憶體視為區塊裝置(Block Device)的做法,直接在主記憶體中保留壓縮資料,並以標準記憶體語意進行存取。在純讀取情境下,CRAM 的吞吐效能相比現行 ZRAM 暴增高達 452 倍,速度幾乎逼近原生 DRAM。
長久以來,作業系統壓縮記憶體的做法大多將壓縮資料置入 Swap 空間,當系統需要讀取該段資料時,必須觸發分頁錯誤中斷,再從虛擬區塊裝置中提取並解壓縮。
主導 CRAM 研發的 Meta 工程師 Gregory Price 指出,記憶體壓縮與解壓縮本身在現代硬體上的運算開銷微乎其微,真正拖慢整體系統反應的致命傷,在於處理分頁錯誤以及 Swap 機制的軟體層代價。為徹底解決這項問題,CRAM 採取了截然不同的設計思維:將壓縮資料完全留在記憶體內,並將其當作實體記憶體處理。
CRAM 的核心技術在於善用 Linux 原生已具備的機制,建構一個專屬的「私有 NUMA 節點」(Private NUMA Node),其角色類似於虛擬的「影子 CPU」(Ghost CPU)。此設計賦予 Linux 核心無須將其模擬為儲存區塊裝置,可直接沿用既有的記憶體管理機制,包括記憶體移轉(Migration)以及氣球膨脹機制(Ballooning)。
因此,CRAM 支援完整的 Cacheline 與 Byte 級別存取。在純讀取模式下其延遲極低,於基準測試中最差情況亦可達到每秒 4.89 億次操作,遠勝 ZRAM 的每秒 110 萬次操作,效能領先達 452 倍。
即使加入 20% 的寫入負載,由於壓縮資料無法直接進行原位覆寫,必須透過分頁錯誤將 Folio 移回原生的 NUMA 網域,導致出現顯著的效能轉折;但在該最差情境下,CRAM 的執行速度依然達到 ZRAM 的 5.4 倍。
Meta 研發 CRAM 的初衷,主要是為了應對超大規模伺服器與資料中心日益吃緊的實體記憶體成本,因此節省 RAM 已經成為各大科技巨頭的重要研究課題。
資料來源: