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

审核者

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 的潜在影响。

向后兼容性

结构体演变策略可为任何预构建制品保留二进制兼容性,并且由于仅添加了字段,因此在大多数情况下应保留源代码兼容性。现有信息结构可能以一种添加字段会破坏的方式使用,在这种情况下,可以使用旧版结构和查询,直到可以更新该使用位置为止。

文档

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

缺点、替代方案和未知因素

与其弃用 ZX_INFO_KMEM_STATS_EXTENDED 查询,不如对其进行维护,并将其字段不合并到 ZX_INFO_KMEM_STATS 中,从而避免任何性能问题。虽然 ZX_INFO_KMEM_STATS_EXTENDED 查询原本旨在提供对于 ZX_INFO_KMEM_STATS 而言成本过高的信息,但由于内核的演变,收集这些信息的成本不再高昂,因此没有必要将其分开。