RFC-0011:zx_object_get_info ZX_INFO_KMEM_STATS_EXTENDED

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

建議新增 `ZX_INFO_KMEM_STATS_EXTENDED` 主題,至 `zx_object_get_info()` 系統呼叫。

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 具有相同的限制,也就是需要根資源。

系統會計算以分頁備份的佇列長度,並填入 vmo_pager_* 欄位。目前系統尚未實作 vmo_discardable_* 欄位,因此會設為 0。

實作

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

效能

這是新主題,因此現有呼叫端的效能不會受到影響。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 公開的新欄位可能需要大量運算資源。舉例來說,計算分頁備份計數時,會以所有 VMO 的分頁備份總數為線性依據。現有客戶最終會不必要地承擔這項額外的效能成本,以取得他們可能不需要的指標。ZX_INFO_KMEM_STATS相反地,只有在用戶端需要這類額外詳細程度時,才應使用ZX_INFO_KMEM_STATS_EXTENDED 主題。

既有技術和參考資料

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