RFC-0011:zx_object_get_info ZX_INFO_KMEM_STATS_EXTENDED

RFC-0011:zx_object_get_info ZX_INFO_KMEM_STATS_EXTENDED
狀態已接受
區域
  • 核心
說明

提議將「ZX_INFO_KMEM_STATS_EXTENDED」這個新主題新增至 `zx_object_get_info()` syscall。

變更
作者
審查人員
提交日期 (年/月)2020-11-04
審查日期 (年/月)2020-11-20

摘要

這個 RFC 建議在 zx_object_get_info() 系統呼叫中新增「ZX_INFO_KMEM_STATS_EXTENDED」主題。新主題會傳回 zx_info_kmem_stats_extended_t 類型的單一記錄,這個結構包含 zx_info_kmem_stats_t 中的所有欄位,以及一些收集成本較高的額外欄位。

提振精神

ZX_INFO_KMEM_STATS 主題不會針對核心可在記憶體壓力下回收的記憶體數量公開任何指標。free_bytes 目前只有一個計數器,也就是系統中的實體可用記憶體數量。單獨計算這個數字並不實用,而且可能會誤導使用者。在實務上,「可用」的記憶體數量超過可用記憶體,因為核心可在記憶體壓力下收回頁面,藉此收回記憶體。

公開系統上各種可用記憶體的指標,可以提供更實用的記憶體診斷資訊。

設計

zx_info_kmem_stats_extended_t 結構包含 zx_info_kmem_stats_t 中顯示的所有欄位,以及下列額外欄位:

    // The amount of memory committed to pager-backed VMOs.
    uint64_t vmo_pager_total_bytes;

    // The amount of memory committed to pager-backed VMOs, that has been most
    // recently accessed, and would not be eligible for eviction by the kernel
    // under memory pressure.
    uint64_t vmo_pager_newest_bytes;

    // The amount of memory committed to pager-backed VMOs, that has been least
    // recently accessed, and would be the first to be evicted by the kernel
    // under memory pressure.
    uint64_t vmo_pager_oldest_bytes;

    // The amount of memory committed to discardable VMOs that is currently
    // locked, or unreclaimable by the kernel under memory pressure.
    uint64_t vmo_discardable_locked_bytes;

    // The amount of memory committed to discardable VMOs that is currently
    // unlocked, or reclaimable by the kernel under memory pressure.
    uint64_t vmo_discardable_unlocked_bytes;

ZX_INFO_KMEM_STATS_EXTENDED 主題與 ZX_INFO_KMEM_STATS 具有相同的限制,意即需要根資源。

計算受分頁支援佇列的長度,將填入 vmo_pager_* 欄位。vmo_discardable_* 欄位目前未實作,將設為 0。

實作

zx_object_get_info() 系統呼叫可以在單一 CL 中擴充。

效能

這是新主題,因此 zx_object_get_info() 現有呼叫端的效能不會受到影響。新呼叫端應根據所需的詳細程度選擇使用 ZX_INFO_KMEM_STATSZX_INFO_KMEM_STATS_EXTENDEDZX_INFO_KMEM_STATS_EXTENDED 提供更詳細的指標,因此費用較高,因此僅應在需要其他指標時使用。

安全性考量

無。

隱私權注意事項

無。

測試

Zircon 核心測試會寫入查詢 ZX_INFO_KMEM_STATS_EXTENDED 主題。

說明文件

zx_object_get_info() 的系統呼叫說明文件需要更新。

缺點、替代方案和未知

新增主題的替代方案僅是擴充現有 ZX_INFO_KMEM_STATS 主題以公開其他指標。這包括擴充 zx_info_kmem_stats_t 結構以納入新欄位。這種做法的缺點是 ZX_INFO_KMEM_STATS 的現有使用者將會遇到效能命中,因為 ZX_INFO_KMEM_STATS_EXTENDED 公開的新欄位在運算方面可能相當昂貴。例如,計算呼叫器回傳次數的計算方法,會依照 Pager 支援的所有 VMO 頁面總數計算。ZX_INFO_KMEM_STATS 的現有用戶端最終會導致不必要的指標產生不必要的效能成本。相反地,只有在用戶端需要此額外層級詳細資訊時,才能使用 ZX_INFO_KMEM_STATS_EXTENDED 主題。

先前的圖片和參考資料

Linux /proc/meminfo 包含 MemAvailable、Active 和 active 的計數器。