谷歌工程師本月開始為 Linux 內存管理子系統和相關組件發布新補丁,以實現名為工作集報告的功能。

工作集報告功能基於 MGLRU 構建,旨在更好地處理過度使用的 VM 或容器。最近的 RFC 補丁系列總結如下:

背景
==========
對於客戶端和服務器,工作負載可以通過虛擬機、kubernetes 容器或 memcgs 進行容器化。服務器和客戶端之間的工作負載不同。

服務器作業具有更可預測的內存佔用,並且關注穩定性和性能。一種技術是主動回收,它會在內存壓力出現之前回收內存,並顯示機器上實際可用內存的數量。

客戶端應用程序更加突發和不可預測,因為它們對用戶交互做出反應。系統需要快速響應有趣的事件,並了解能源使用情況。

過度使用的機器可以擴展容器的佔用空間通過memory.max/high、virtio-balloon等。
balloon設備是一種典型的在guest VM和host之間共享內存的機制。它在多 VM 場景中特別有用,在這些場景中,內存被過度使用,並且隨著系統上工作負載的變化,需要動態更改 VM 內存大小。氣球設備現在具有許多功能,可幫助在來賓和主機之間明智地共享內存資源(例如免費頁面提示、統計信息、免費頁面報告)。對於負責在多 VM 環境中優化內存資源的主機控制器程序,它必須使用這些工具來回答兩個具體問題:

1.什麼時候修改氣球合適?
2。氣球應該改變多少?

開發這種“自動氣球”功能的早期項目是在 2013 年完成的。最近,已經創建了額外的 VIRTIO 設備(virtio-mem、virtio-pmem),這些設備為許多人提供了更多工具用例,每個都有優點和缺點。先前使用工作集接口擴展 MGLRU 的提議側重於服務器用例,但不適用於客戶端。

提案
==========
一個統一的工作集報告結構,適用於服務器和客戶端。它涉及主機上的每個節點直方圖、每個 memcg 直方圖和 virtio-balloon 驅動程序擴展。

有兩種使用工作集報告的方法:事件驅動和查詢。主機控制器可以接收來自回收的通知,生成報告,或者控制器可以直接查詢直方圖。
補丁 1 引入了工作集報告機制和主機接口。請參閱
補丁 2 的詳細信息部分,通過工作集報告擴展 virtio-balloon 驅動程序。
最初的 RFC 建立在 MGLRU 之上,旨在成為用於討論和改進的概念證明。 T.J.我的目標是支持來自用戶空間的活動/非活動 LRU 和工作集估計。我們正在研究演示腳本並獲得一些數字。

除了Linux內核內存管理方面的變化,還有QEMU 補丁 用於 VirtIO Balloon 添加工作集報告功能。

“該用例是一台內存過度使用的主機和 1 個或多個虛擬機。目標是及時獲得有關整體內存利用率的準確信息,以推動適當的回收活動,因為在某些客戶端設備中使用在某些情況下,VM 可能在一段時間內需要整體內存的很大一部分,但隨後進入安靜期,導致來賓中出現大量冷頁。

氣球設備現在具有許多功能協助在來賓和主機之間共享內存資源(例如免費頁面提示、統計信息、免費頁面報告)。如 [1] 中的幻燈片 12 所述,氣球沒有驅動來賓緩存回收的良好機制。我們的用例包括典型的頁面緩存和“應用程序緩存”,內存在系統範圍內存壓力時應該被丟棄。在某些情況下,virtio-pmem 可以作為主機控制來賓緩存的方法,但也有不良的安全隱患。”

然後還有 提議的 VirtIO 規範更新已於上週發出以供討論。

或者為了更輕鬆地概述此工作集報告功能,相關的 Google 工程師與我們分享了他們在 LSF/MM/BPF 2023 中討論此提議功能的幻燈片:

通知Working Set Reporting 報告機制仍在開發中。看到這個工作集報告計劃的所有結果肯定會很有趣。

Categories: IT Info