| 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 的潜在影响。
向后兼容性
结构体演变策略可为任何预构建制品保留二进制兼容性,并且由于仅添加了字段,因此在大多数情况下应保留源代码兼容性。现有信息结构可能以一种添加字段会破坏的方式使用,在这种情况下,可以使用旧版结构和查询,直到可以更新该使用位置为止。
文档
更新 ZX_INFO_KMEM_STATS 查询的文档是此 RFC 的明确目标,此类更改将包含在任何 CL 中。
缺点、替代方案和未知因素
与其弃用 ZX_INFO_KMEM_STATS_EXTENDED 查询,不如对其进行维护,并将其字段不合并到 ZX_INFO_KMEM_STATS 中,从而避免任何性能问题。虽然 ZX_INFO_KMEM_STATS_EXTENDED 查询原本旨在提供对于 ZX_INFO_KMEM_STATS 而言成本过高的信息,但由于内核的演变,收集这些信息的成本不再高昂,因此没有必要将其分开。