| 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 中的所有欄位。
文件異動的重點在於釐清下列項目:
- 處於這些狀態的記憶體並未由核心使用,但這是核心對系統記憶體用量的解讀。
- 提高記憶體「可用」的具體程度,因為記憶體可能未分配,但僅適用於特定類型的分配。
- 如何解讀 VMO 中以多種狀態回報的記憶體,以及回報是否重疊。
實作
這會以兩個 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