Meta “透明記憶體解除安裝” 功能亮相:可為 Linux 伺服器節省 20%-32% 記憶體

MissD 發表於 2022-06-27
Linux

剛剛,Meta(原 Facebook)工程師團隊在部落格發展示了一種叫“透明記憶體解除安裝” (Transparent Memory Offloading,簡稱 TMO)的全新 Linux 核心功能,可為每臺 Linux 伺服器節省 20% 至 32% 的記憶體。據悉,該功能已於 2021 年在 Facebook/Meta 伺服器中投入使用,團隊已成功地將 TMO 的作業系統元件升級到 Linux 核心中。

Meta  “透明記憶體解除安裝” 功能亮相:可為 Linux 伺服器節省 20%-32% 記憶體

透明記憶體解除安裝(TMO)是 Meta 針對異構資料中心環境推出的的解決方案,它引入了一種新的 Linux 核心機制,可實時測量由 CPU、記憶體 和 I/O 之間的資源短缺而導致的工作損失。在這些資訊的指導下,TMO 在沒有任何應用程式先驗知識的情況下,自動調整要解除安裝到異構裝置(如壓縮記憶體或 SSD)的記憶體量。

也就是說,TMO 會根據裝置的效能特徵和應用程式,來對較慢記憶體訪問的敏感性來出做調整。除了應用程式容器外,TMO 還從提供基礎架構級功能的 sidecar 容器中全面識別解除安裝時機。

解除安裝時機

Meta  “透明記憶體解除安裝” 功能亮相:可為 Linux 伺服器節省 20%-32% 記憶體

近年來,大量更便宜的非 DRAM 記憶體技術(如 NVMe SSD)已被成功部署在資料中心或正在開發的資料中心。此外,新興的非 DDR 記憶體匯流排技術【如 Compute Express Link(CXL)】也提供了類似記憶體的訪問語義,並接近 DDR 效能。資料圖顯示的記憶體儲存層次結構說明了各種技術是如何相互堆疊的。這些趨勢的結合,為記憶體分層提供了新的機會,這在過去是不可能的。

使用記憶體分層,訪問頻率較低的資料將遷移到速度較慢的記憶體中。應用程式本身、使用者空間庫、核心或虛擬機器監控程式可以驅動遷移過程。Meta 的 TMO 功能工作專注於核心驅動的遷移或交換,它可以透明地應用於許多應用程式,而無需修改應用程式。

儘管概念簡單,但核心驅動的對延遲敏感資料中心應用程式的交換在超規模上仍具有挑戰性。Meta 構建了 TMO,這是一個用於集裝箱化環境的透明記憶體解除安裝解決方案。

解決方案:透明記憶體解除安裝

TMO 的組成

  • 壓力暫停資訊(PSI),一個 Linux 核心元件,用於實時測量由於 CPU、記憶體和 I/O 之間的資源短缺而導致的工作損失。Meta 首次實現了可直接測量應用程式對記憶體訪問速度減慢的敏感性,而不必求助於脆弱的低階別指標,如頁面提升率。
  • Senpai 是一個使用者空間代理,它可以施加輕微的主動式記憶體壓力,跨不同的工作負載和異構硬體有效地解除安裝記憶體,對應用程式效能的影響最小。
  • TMO 以閾下記憶體壓力級別執行記憶體解除安裝以交換,週轉率與檔案快取成比例。這與在嚴重記憶體壓力下作為緊急溢位進行交換的歷史行為形成對比。

Meta  “透明記憶體解除安裝” 功能亮相:可為 Linux 伺服器節省 20%-32% 記憶體

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% 不等。這突出了對各種應用程式行為具有魯棒性的解除安裝方法的重要性。

Meta  “透明記憶體解除安裝” 功能亮相:可為 Linux 伺服器節省 20%-32% 記憶體

除訪問頻率之外,解除安裝解決方案還需要考慮解除安裝哪種型別的記憶體。應用程式訪問的記憶體包括兩大類:匿名和檔案備份。匿名記憶體由應用程式以堆或堆疊頁的形式直接分配。檔案支援的記憶體由核心的頁面快取分配,以代表應用程式儲存經常使用的檔案系統資料。

TMO 設計概述

Meta  “透明記憶體解除安裝” 功能亮相:可為 Linux 伺服器節省 20%-32% 記憶體

TMO 包含跨使用者空間和核心的多個部分,“Senpai ”作為使用者空間代理位於解除安裝操作的核心,在圍繞觀察到的記憶體壓力的控制迴圈中,它使用核心的回收演算法來識別使用最少的記憶體頁,並將它們移出解除安裝後端。在此過程中,PSI(壓力失速資訊)核心元件量化並報告記憶體壓力,回收演算法則通過核心的 cgroup2 記憶體控制器定向到特定的應用程式。

Senpai

Meta  “透明記憶體解除安裝” 功能亮相:可為 Linux 伺服器節省 20%-32% 記憶體

Senpai 位於 PSI 指標之上,它使用壓力作為反饋,以確定驅動核心記憶體回收的力度。如果容器測量值低於給定的壓力閾值,Senpai 將提高回收率;如果壓力降到以下,Senpai 就會緩解。壓力閾值得到校準,這樣分頁開銷在功能上不會影響工作負載的效能。

交換演算法

TMO 是在不影響工作負載的低壓力級別下解除安裝記憶體的,但儘管 Linux 在壓力下退出了檔案系統快取,但它似乎“不願”將匿名記憶體移出到交換裝置。即使存在已知的冷堆,並且檔案快取的速度超過了 TMO 壓力閾值,配置的交換空間也會處於令人沮喪的空閒狀態。

因此,TMO 引入了一種新的交換演算法,該演算法利用了這些驅動器的優勢,無需恢復仍使用旋轉儲存介質的傳統設定,可通過跟蹤系統中檔案系統快取重構的速率並按比例進行交換來實現。也就是說,對於每個重複需要從檔案系統讀取的檔案頁,核心都會嘗試交換掉一個匿名頁,這樣就為翻頁騰出了空間。如果發生交換插入,Recall 會再次推回檔案快取。

目前,Meta 根據應用程式的記憶體可壓縮性及其對記憶體訪問速度減慢的敏感性,在壓縮記憶體和 SSD 支援的交換之間手動選擇解除安裝後端。儘管可以開發工具來自動化該過程,但更基本的解決方案需要核心管理解除安裝後端的層次結構(如自動使用 zswap 處理較熱的頁面,使用 SSD 處理較冷或壓縮性較差的頁面,以及將來將 NVM 和 CXL 裝置摺疊到記憶體層次結構中)。核心回收演算法應該在這些記憶體池之間動態平衡,Meta 正在積極研究這個體系結構。

隨著 CXL 等即將推出的匯流排技術提供類似記憶體的訪問語義,記憶體解除安裝不僅可以幫助解除安裝冷儲存,還可以幫助解除安裝熱儲存。Meta 也正積極關注該體系結構,以利用 CXL 裝置作為記憶體解除安裝後端。

參考連結:https://engineering.fb.com/20...