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_LOANED
、CACHE
、SLAB
和 ZRAM
狀態,以及 ZX_INFO_KMEM_STATS_EXTENDED
中的所有欄位。
說明文件的變更重點在於釐清下列部分項目:
- 核心並未使用這些狀態中的記憶體,但核心會將這些狀態解讀為系統記憶體用量。
- 針對「可用」記憶體的特定性提高,因為記憶體可以是未配置的,但只適用於特定類型的配置。
- 如何解讀在多個狀態中回報的 VMOs 記憶體,以及何時會發生重疊回報。
實作
這項更新會以兩個 CL 的形式發布:
- 使用新的版本主題編號和結構體,更新
ZX_INFO_KMEM_STATS
查詢和所有說明文件。 - 使用者切換至
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
認為過於昂貴的資訊,但由於核心演進,這類資訊的收集成本已不再昂貴,因此分離這類資訊並無益處。