微軟發布面向現代的新型高效能、可擴展記憶體分配器 mimalloc

 

微軟發布面向現代的新型高效能、可擴展記憶體分配器 mimalloc,這是一個可以直接取代現有函數的函數 malloc,無需修改程式碼即可在其他程式中使用,mimalloc 記憶體分配器最初於 2020 年設計,目標是在 Koka 和 Lean 程式語言中使用。 

mimalloc 是一個通用的記憶體分配器,其可擴展設計已被證明在微軟的大型服務中表現出色,並且顯著提升了 Bing 等服務的反應速度,如今,mimalloc 已被廣泛應用於微軟內外的大型服務和應用程式,以及作為 NoGIL CPython 3.13+ 的記憶體分配器,整合到虛幻引擎中,並應用於 《死亡擱淺》等遊戲中。 

主要特點

  • 小巧且一致:此程式庫程式碼量僅約 1 萬行,採用簡單且一致的資料結構。
  • 空閒列表分片:我們不再使用一個大的空閒列表(每個大小類別一個列表),而是在每個“mimalloc 頁”中使用多個較小的列表,這樣可以減少碎片並提高局部性——在相近的時間分配的內存塊會在相近的內存位置分配。
  • 空閒列表多分片:核心思想!我們不僅按 mimalloc 分配的記憶體頁對空閒清單進行分片,而且每個記憶體頁還擁有多個空閒清單。
  • 積極頁面清除:當一個「頁面」變為空時(由於空閒清單分片,這種情況發生的幾率會增加),記憶體會被標記為未使用(重置或取消提交),從而減少(實際的)記憶體壓力和碎片,尤其是在長時間運行的程式中。
  • 安全:mimalloc可以建構為安全模式,透過新增保護頁、隨機分配、加密空閒清單等機制來防範各種堆疊漏洞。與我們的基準測試相比,效能損失通常平均約為 10%。
  • 一流堆:有效率地建立和使用多個堆,以便在不同區域進行記憶體分配。堆可以一次銷毀,而無需單獨釋放每個物件。
  • 有界:它不會出現爆炸[1],最壞情況下的分配時間(wcat)有界(最多到作業系統原語),空間開銷有界(~0.2% 元數據,內部碎片化程度低),並且僅使用原子操作時沒有內部爭用點。
  • 速度快:在我們的基準測試中(見下文), mimalloc 的效能優於其他主流記憶體分配器(例如jemalloc、tcmalloc、Hoard等),並且通常佔用較少的記憶體。

https://github.com/microsoft/mimalloc

Picture Source

Microsoft

留言