RFC-0262:展開 KMEM_STATS

RFC-0262:擴充 KMEM_STATS
狀態已接受
區域
  • 核心
說明

擴充 ZX_INFO_KMEM_STATS 中的欄位和說明,並淘汰 ZX_INFO_KMEM_STATS_EXTENDED。

問題
Gerrit 變更
作者
審查人員
提交日期 (年-月-日)2024-08-28
審查日期 (年-月-日)2024-10-02

問題陳述

現有的 ZX_INFO_KMEM_STATS 查詢缺少用於回報較新核心記憶體用量類型的欄位,導致無法正確解讀現有欄位,且現有欄位本身的說明文件不夠清楚或不完整。本 RFC 旨在解決這兩個問題。

本 RFC 不會變更 ZX_INFO_KMEM_STATS 的報表樣式,也不會支援其他類型的記憶體用量查詢。

摘要

擴充 ZX_INFO_KMEM_STATS 傳回的結構,納入在查詢最初撰寫時不存在的狀態中網頁的計數,並納入 ZX_INFO_KMEM_STATS_EXTENDED 查詢的欄位,並在過程中淘汰該查詢。更新新欄位和現有欄位的說明文件,確保說明清楚且正確無誤。

相關人員

協助人員:

davemoore@google.com

審查者:

maniscalco@google.com、mcgrathr@google.com

諮詢:

plabatut@google.com

社會化:

我們已與目標審查者一起重複執行這個 RFC 的 CL。

設計

我們將使用現有的核心結構演進和版本策略,提供新版的 ZX_INFO_KMEM_STATS 查詢,並淘汰 ZX_INFO_KMEM_STATS_EXTENDED 查詢。新版 ZX_INFO_KMEM_STATS 結構體將包含缺少 vm_page_state 的欄位,這些欄位包括:FREE_LOANEDCACHESLABZRAM 狀態,以及 ZX_INFO_KMEM_STATS_EXTENDED 中的所有欄位。

說明文件的變更重點在於釐清下列部分項目:

  • 核心並未使用這些狀態中的記憶體,但核心會將這些狀態解讀為系統記憶體用量。
  • 針對「可用」記憶體的特定性提高,因為記憶體可以是未配置的,但只適用於特定類型的配置。
  • 如何解讀在多個狀態中回報的 VMOs 記憶體,以及何時會發生重疊回報。

實作

這項更新會以兩個 CL 的形式發布:

  1. 使用新的版本主題編號和結構體,更新 ZX_INFO_KMEM_STATS 查詢和所有說明文件。
  2. 使用者切換至 ZX_INFO_KMEM_STATS 後,請淘汰 ZX_INFO_KMEM_STATS_EXTENDED

停用後,查詢會保留在核心中,以便保留二進位相容性。

成效

ZX_INFO_KMEM_STATS 中展開欄位會讓查詢花費更多時間,尤其是新增 ZX_INFO_KMEM_STATS_EXTENDED 欄位時,但相較於系統呼叫的現有成本,這項成本仍應可忽略不計。主要現有使用者 memory_monitor 有時會執行這兩種查詢,在這種情況下,單一系統呼叫可改善效能。

仍應驗證實際的系統呼叫效能成本,以及對 memory_monitor 的潛在影響。

回溯相容性

struct 演進策略可為任何預先建構的構件保留二進位相容性,且由於欄位只會新增原始碼相容性,因此在大多數情況下應保留原始碼相容性。現有的資訊結構體可能會以新增欄位中斷的方式使用,在這種情況下,您可以使用舊版結構體和查詢,直到該使用網站可更新為止。

說明文件

更新 ZX_INFO_KMEM_STATS 查詢的說明文件是本 RFC 的明確目標,這類變更將納入任何 CL。

缺點、替代方案和未知事項

您可以保留 ZX_INFO_KMEM_STATS_EXTENDED 查詢,而非淘汰該查詢,且其欄位不會合併至 ZX_INFO_KMEM_STATS,避免任何效能問題。雖然 ZX_INFO_KMEM_STATS_EXTENDED 查詢原本是用於收集 ZX_INFO_KMEM_STATS 認為過於昂貴的資訊,但由於核心演進,這類資訊的收集成本已不再昂貴,因此分離這類資訊並無益處。