他們為Linux內核提出了一個新的內存控制器。

Linux內核

內存管理器是系統的一個子集 操作 它在操作系統和各種應用程序之間共享內存。 術語“存儲器”主要指主存儲器(RAM),但其管理需要輔助存儲器和高速緩衝存儲器的貢獻。

內存管理器 特別負責高效地為進程分配內存,這意味著它必須能夠枚舉可用內存的空閒位置,分配新進程所需的內存,並從終止進程中回收內存。 Linux 內核中的調度程序是 SLAB 調度程序。

平板 基於優化內存請求的塊和緩存系統。 這種類型的內存管理減少了由分配和重定位操作引起​​的碎片。

塊分配涉及為某種類型/大小的對象實現高速緩存,該對象將各種預分配的內存塊切成適合特定對象的固定大小的塊。

SLAB 管理這些片段,以便當內核被要求為對象分配內存時, 可以用現有塊的空閒部分來滿足該請求。 SLAB 保留分配的內存,以便在後續分配類似對象時重複使用,從而減少與對像初始化相關的開銷。

他們打算取代SLAB

羅曼·古希欽, Facebook Linux 內核工程團隊的成員發現了當前驅動程序/內存管理器中的“嚴重缺陷”。 和 r最近提出了一種新的內存控制器 堵塞 這有望大幅提高多個 cgroup 之間的內存利用率 (或對照組)憑記憶。

鑑於此,值得注意的是,cgroups 指的是一種 Linux 內核功能,它允許限制、計數和隔離系統資源(處理器、內存、磁盤使用等)的使用,並且術語“頁面“slab””可以是類似於SLAB的內存分配處理。

根據古希欽的說法:

“現有設計導致 SLAB 使用率低的真正原因很簡單:Slab 頁面僅由單個內存池使用。

如果 cgroup 僅進行了少量特定大小的分配,或者刪除 cgroup 後還剩下一些活動對象,或者 cgroup 包含幾乎不分配內核的單線程應用程序,但確實這樣做了每次使用新CPU:在所有這些情況下,最終的SLAB 使用率都非常低。

如果禁用 kmem 計算,內核可以使用切片頁面上的可用空間進行其他分配。”

Gushchin 認為,當 kmem 驅動程序作為必須為每個內存池啟用的可選功能引入時,這不是問題。

然而現在,默認情況下為 cgroup v1 和 v2 啟用 kmem 驅動程序。 而且由於現代系統往往會創建大量的 c 組,因此使用 SLAB 的效果較差。

據他介紹,通過在各個內存池之間共享slab page 並通過使用重新設計的系統,其中會計是按對象而不是按頁面進行的, Linux 內核中會有一個優化的內存控制器 這提供了更有效的使用水平。

Gushchin 提出的補丁包含兩個半獨立的元素:一個可以在將來用於會計目的的子頁面加載 API,以及一個 mem_cgroup_ptr API。

使用新驅動程序進行的測試 古希欽的記憶 已經表明,在 Linux 上可以獲得 35% 到 42% 的更多內存 在前端 Web、數據庫緩存和 DNS 服務器以及許多其他工作負載中。

古希欽的提議目前打著“徵求意見”的旗號。 如果被接受,它可以集成到 2020 年 Linux 內核版本中。

來源: https://lkml.org/


發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責資料:AB Internet Networks 2008 SL
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。