| RFC-0011:zx_object_get_info ZX_INFO_KMEM_STATS_EXTENDED | |
|---|---|
| 狀態 | 已接受 |
| 區域 |
|
| 說明 | 建議新增 `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_STATS 或 ZX_INFO_KMEM_STATS_EXTENDED。ZX_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 的計數器。