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
Reviewers:
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
中的所有字段。
文档变更旨在阐明以下一些内容:
- 内核未使用处于这些状态的内存,但内核会对系统内存用量进行解释。
- 提高了对“可用”内存的具体性,因为内存既可以未分配,也可以仅供特定类型的分配使用。
- 如何解读在多个状态下报告的内存用量,以及报告是否会重叠。
实现
这将作为两个 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
来说成本过高的信息,但由于内核演变,收集这些信息的成本不再高昂,分离这些信息也没有任何好处。