RFC-0262:展開 KMEM_STATS

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

展開 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 中的所有欄位。

文件異動的重點在於釐清下列項目:

  • 處於這些狀態的記憶體並未由核心使用,但這是核心對系統記憶體用量的解讀。
  • 提高記憶體「可用」的具體程度,因為記憶體可能未分配,但僅適用於特定類型的分配。
  • 如何解讀 VMO 中以多種狀態回報的記憶體,以及回報是否重疊。

實作

這會以兩個 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