RFC-0262:扩展 KMEM_STATS

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_LOANEDCACHESLABZRAM 状态,以及 ZX_INFO_KMEM_STATS_EXTENDED 中的所有字段。

文档变更旨在阐明以下一些内容:

  • 内核未使用处于这些状态的内存,但内核会对系统内存用量进行解释。
  • 提高了对“可用”内存的具体性,因为内存既可以未分配,也可以仅供特定类型的分配使用。
  • 如何解读在多个状态下报告的内存用量,以及报告是否会重叠。

实现

这将作为两个 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 的潜在影响。

向后兼容性

结构体演化策略可保留任何预构建工件的二进制兼容性,并且由于只添加了字段,因此在大多数情况下应保留源代码兼容性。现有信息结构体在使用方式上可能会导致添加字段时发生错误,在这种情况下,您可以使用旧版结构体和查询,直到该使用位置可以更新为止。

文档

更新 ZX_INFO_KMEM_STATS 查询的文档是本 RFC 的明确目标,此类更改将纳入任何 CL 中。

缺点、替代方案和未知情况

您可以保留 ZX_INFO_KMEM_STATS_EXTENDED 查询,而不是将其废弃,并且不将其字段合并到 ZX_INFO_KMEM_STATS,从而避免任何性能问题。虽然 ZX_INFO_KMEM_STATS_EXTENDED 查询原本打算用于存放被视为对 ZX_INFO_KMEM_STATS 来说成本过高的信息,但由于内核演变,收集这些信息的成本不再高昂,分离这些信息也没有任何好处。