RFC-0011:zx_object_get_info ZX_INFO_KMEM_STATS_EXTENDED

RFC-0011:zx_object_get_info ZX_INFO_KMEM_STATS_EXTENDED
状态已接受
领域
  • 内核
说明

建议将新主题“ZX_INFO_KMEM_STATS_EXTENDED”添加到“zx_object_get_info()`”系统调用。

Gerrit 更改
作者
审核人
提交日期(年-月-日)2020-11-04
审核日期(年-月-日)2020-11-20

摘要

此 RFC 建议将新主题 ZX_INFO_KMEM_STATS_EXTENDED 添加到 zx_object_get_info() 系统调用。新主题将返回一条记录 类型 zx_info_kmem_stats_extended_t,一个由 zx_info_kmem_stats_t,以及一些开销较大的其他字段, 收集。

设计初衷

ZX_INFO_KMEM_STATS 主题不会公开 在内存压力下可由内核回收的内存。还有 目前只有 free_bytes 的计数器, 内存量仅凭这一数字不是很有用, 具有误导性。在实践中,“可用”内存量不仅免费 内存,因为内核可以通过逐出内存下的页面来回收内存 压力。

公开系统中各种可用内存的指标将 以便进行更实用的内存诊断

设计

zx_info_kmem_stats_extended_t 结构体包含 zx_info_kmem_stats_t 和以下额外字段:

    // The amount of memory committed to pager-backed VMOs.
    uint64_t vmo_pager_total_bytes;

    // The amount of memory committed to pager-backed VMOs, that has been most
    // recently accessed, and would not be eligible for eviction by the kernel
    // under memory pressure.
    uint64_t vmo_pager_newest_bytes;

    // The amount of memory committed to pager-backed VMOs, that has been least
    // recently accessed, and would be the first to be evicted by the kernel
    // under memory pressure.
    uint64_t vmo_pager_oldest_bytes;

    // The amount of memory committed to discardable VMOs that is currently
    // locked, or unreclaimable by the kernel under memory pressure.
    uint64_t vmo_discardable_locked_bytes;

    // The amount of memory committed to discardable VMOs that is currently
    // unlocked, or reclaimable by the kernel under memory pressure.
    uint64_t vmo_discardable_unlocked_bytes;

ZX_INFO_KMEM_STATS_EXTENDED 主题的限制条件与 ZX_INFO_KMEM_STATS,即它需要根资源。

vmo_pager_* 字段将通过计算 分页器支持的队列。vmo_discardable_* 字段目前尚未实现 并设置为 0。

实现

zx_object_get_info() 系统调用可以在单个 CL 中扩展。

性能

这是一个新主题, zx_object_get_info()将不受影响。新调用方应做出以下选择: 使用 ZX_INFO_KMEM_STATSZX_INFO_KMEM_STATS_EXTENDED,具体取决于 所需的详细程度ZX_INFO_KMEM_STATS_EXTENDED提供更多 因此价格较高,因此只有在 其他指标是必需的

安全注意事项

无。

隐私注意事项

无。

测试

将编写 Zircon 核心测试,以查询 ZX_INFO_KMEM_STATS_EXTENDED 主题。

文档

需要更新 zx_object_get_info() 的系统调用文档。

缺点、替代方案和未知问题

除了添加新主题,另一种方法是扩展现有的 ZX_INFO_KMEM_STATS 主题,以显示其他指标。这将涉及 扩展 zx_info_kmem_stats_t 结构体以包含新字段。通过 这种方法的缺点是,现有的 ZX_INFO_KMEM_STATS 用户 因为由 Kubernetes API 公开的新字段 ZX_INFO_KMEM_STATS_EXTENDED 的计算开销可能很高。例如: 分页器支持的计数在网页总数中呈线性关系 分页器支持的所有 VMOZX_INFO_KMEM_STATS的现有客户 最终会产生不必要的额外性能成本 它们甚至可能不需要的指标相反,ZX_INFO_KMEM_STATS_EXTENDED 只有当客户需要这一额外级别的 。

先验技术和参考资料

在 Linux /proc/meminfo 上 包括 MemAvailable、Active 和 active 的计数器。