剛剛,Meta(原 Facebook)工程師團隊在博客發展示了一種叫“透明內存卸載” (Transparent Memory Offloading,簡稱 TMO)的全新 Linux 內核功能,可為每台 Linux 服務器節省 20% 至 32% 的內存。據悉,該功能已於 2021 年在 Facebook/Meta 服務器中投入使用,團隊已成功地將 TMO 的操作系統組件升級到 Linux 內核中。
透明內存卸載(TMO)是 Meta 針對異構數據中心環境推出的的解決方案,它引入了一種新的 Linux 內核機制,可實時測量由 CPU、內存 和 I/O 之間的資源短缺而導致的工作損失。在這些信息的指導下,TMO 在沒有任何應用程序先驗知識的情況下,自動調整要卸載到異構設備(如壓縮內存或 SSD)的內存量。
也就是説,TMO 會根據設備的性能特徵和應用程序,來對較慢內存訪問的敏感性來出做調整。除了應用程序容器外,TMO 還從提供基礎架構級功能的 sidecar 容器中全面識別卸載時機。
卸載時機
近年來,大量更便宜的非 DRAM 內存技術(如 NVMe SSD)已被成功部署在數據中心或正在開發的數據中心。此外,新興的非 DDR 內存總線技術【如 Compute Express Link(CXL)】也提供了類似內存的訪問語義,並接近 DDR 性能。數據圖顯示的內存存儲層次結構説明了各種技術是如何相互堆疊的。這些趨勢的結合,為內存分層提供了新的機會,這在過去是不可能的。
使用內存分層,訪問頻率較低的數據將遷移到速度較慢的內存中。應用程序本身、用户空間庫、內核或虛擬機監控程序可以驅動遷移過程。Meta 的 TMO 功能工作專注於內核驅動的遷移或交換,它可以透明地應用於許多應用程序,而無需修改應用程序。
儘管概念簡單,但內核驅動的對延遲敏感數據中心應用程序的交換在超規模上仍具有挑戰性。Meta 構建了 TMO,這是一個用於集裝箱化環境的透明內存卸載解決方案。
解決方案:透明內存卸載
TMO 的組成:
- 壓力暫停信息(PSI),一個 Linux 內核組件,用於實時測量由於 CPU、內存和 I/O 之間的資源短缺而導致的工作損失。Meta 首次實現了可直接測量應用程序對內存訪問速度減慢的敏感性,而不必求助於脆弱的低級別指標,如頁面提升率。
- Senpai 是一個用户空間代理,它可以施加輕微的主動式內存壓力,跨不同的工作負載和異構硬件有效地卸載內存,對應用程序性能的影響最小。
- TMO 以閾下內存壓力級別執行內存卸載以交換,週轉率與文件緩存成比例。這與在嚴重內存壓力下作為緊急溢出進行交換的歷史行為形成對比。
DRAM 的成本佔服務器成本的一小部分,這促使 Meta 在 TMO 上開展工作。數據圖顯示了 DRAM、壓縮內存和 SSD 存儲的相對成本。Meta 根據代表其生產工作負載平均值的 3 倍壓縮率來估計壓縮 DRAM 的成本。
據預計,DRAM 的成本將增長到 Meta 基礎設施支出的 33%,同時 DRAM 功耗遵循類似的趨勢將達到服務器基礎架構功耗的 38%。
在壓縮 DRAM 的基礎上,Meta 還為所有生產服務器配備了功能強大的 NVMe SSD。在系統級別,NVMe SSD 佔服務器成本的比例不到 3%(大約是當前一代服務器壓縮內存的 3 倍)。數據圖顯示,在各代中,iso 容量到 DRAM、SSD 的成本仍低於服務器成本的 1%——每字節成本大約比壓縮內存低 10 倍。
儘管比 DRAM 便宜,但壓縮內存和 NVMe SSD 的性能特徵較差。好在典型的內存訪問模式為卸載到較慢的介質提供了大量機會。數據圖中顯示了“冷”應用程序內存,過去 5 分鐘內未訪問的頁面的百分比。這種內存可以卸載到壓縮內存或 SSD 中,而不會影響應用程序性能。
總體而言,冷存儲平均約佔 Meta 服務器總內存的 35%。然而,它在不同的應用程序中變化很大,從 19% 到 62% 不等。這突出了對各種應用程序行為具有魯棒性的卸載方法的重要性。
除訪問頻率之外,卸載解決方案還需要考慮卸載哪種類型的內存。應用程序訪問的內存包括兩大類:匿名和文件備份。匿名內存由應用程序以堆或堆棧頁的形式直接分配。文件支持的內存由內核的頁面緩存分配,以代表應用程序存儲經常使用的文件系統數據。
TMO 設計概述
TMO 包含跨用户空間和內核的多個部分,“Senpai ”作為用户空間代理位於卸載操作的核心,在圍繞觀察到的內存壓力的控制循環中,它使用內核的回收算法來識別使用最少的內存頁,並將它們移出卸載後端。在此過程中,PSI(壓力失速信息)內核組件量化並報告內存壓力,回收算法則通過內核的 cgroup2 內存控制器定向到特定的應用程序。
Senpai
Senpai 位於 PSI 指標之上,它使用壓力作為反饋,以確定驅動內核內存回收的力度。如果容器測量值低於給定的壓力閾值,Senpai 將提高回收率;如果壓力降到以下,Senpai 就會緩解。壓力閾值得到校準,這樣分頁開銷在功能上不會影響工作負載的性能。
交換算法
TMO 是在不影響工作負載的低壓力級別下卸載內存的,但儘管 Linux 在壓力下退出了文件系統緩存,但它似乎“不願”將匿名內存移出到交換設備。即使存在已知的冷堆,並且文件緩存的速度超過了 TMO 壓力閾值,配置的交換空間也會處於令人沮喪的空閒狀態。
因此,TMO 引入了一種新的交換算法,該算法利用了這些驅動器的優勢,無需恢復仍使用旋轉存儲介質的傳統設置,可通過跟蹤系統中文件系統緩存重構的速率並按比例進行交換來實現。也就是説,對於每個重複需要從文件系統讀取的文件頁,內核都會嘗試交換掉一個匿名頁,這樣就為翻頁騰出了空間。如果發生交換插入,Recall 會再次推回文件緩存。
目前,Meta 根據應用程序的內存可壓縮性及其對內存訪問速度減慢的敏感性,在壓縮內存和 SSD 支持的交換之間手動選擇卸載後端。儘管可以開發工具來自動化該過程,但更基本的解決方案需要內核管理卸載後端的層次結構(如自動使用 zswap 處理較熱的頁面,使用 SSD 處理較冷或壓縮性較差的頁面,以及將來將 NVM 和 CXL 設備摺疊到內存層次結構中)。內核回收算法應該在這些內存池之間動態平衡,Meta 正在積極研究這個體系結構。
隨着 CXL 等即將推出的總線技術提供類似內存的訪問語義,內存卸載不僅可以幫助卸載冷存儲,還可以幫助卸載熱存儲。Meta 也正積極關注該體系結構,以利用 CXL 設備作為內存卸載後端。
參考鏈接:https://engineering.fb.com/20...