RFC-0011:zx_object_get_info ZX_INFO_KMEM_STATS_EXTENDED

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

建議在 `zx_object_get_info()` 系統呼叫中新增主題 - `ZX_INFO_KMEM_STATS_EXTENDED`。

Gerrit 變更
作者
審查人員
提交日期 (年-月-日)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 具有相同的限制,也就是需要根資源。

系統會計算 pager 支援佇列的長度,然後填入 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 支援的計數時,會以 pager 支援的所有 VMOs 頁面總數為線性計算。ZX_INFO_KMEM_STATS 的現有客戶最終會不必要地為他們可能不需要的指標承擔額外的效能成本。相反地,只有在用戶端需要這類額外詳細資料時,才應使用 ZX_INFO_KMEM_STATS_EXTENDED 主題。

既有技術與參考資料

在 Linux 上,/proc/meminfo 包含 MemAvailable、Active 和 Inactive 的計數器。