RFC-0011:zx_object_get_info ZX_INFO_KMEM_STATS_EXTENDED

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

提议向“zx_object_get_info()”系统调用添加新主题“ZX_INFO_KMEM_STATS_EXTENDED”。

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

总结

此 RFC 提议向 zx_object_get_info() 系统调用添加新主题 ZX_INFO_KMEM_STATS_EXTENDED。新主题将返回一条类型为 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。

实现

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

性能

这是一个新主题,因此 zx_object_get_info() 的现有调用方的性能不会受到影响。新调用方应根据所需的详细程度选择使用 ZX_INFO_KMEM_STATSZX_INFO_KMEM_STATS_EXTENDEDZX_INFO_KMEM_STATS_EXTENDED 提供的指标更详细的指标,因此费用也更高,因此应仅在需要其他指标时使用。

安全注意事项

无。

隐私注意事项

无。

测试

将编写用于查询 ZX_INFO_KMEM_STATS_EXTENDED 主题的 Zircon 核心测试。

文档

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

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

若要添加新主题,另一种方法是扩展现有的 ZX_INFO_KMEM_STATS 主题以公开更多指标。这将需要扩展 zx_info_kmem_stats_t 结构体以包含新字段。这种方法的缺点是,ZX_INFO_KMEM_STATS 的现有用户将对性能造成负面影响,因为 ZX_INFO_KMEM_STATS_EXTENDED 公开的新字段的计算成本高昂。例如,计算由分页器支持的计数对于由分页器支持的所有 VMO 中的页总数是线性的。ZX_INFO_KMEM_STATS 的现有客户最终可能甚至不需要这些额外的指标,从而产生不必要的性能成本。相反,ZX_INFO_KMEM_STATS_EXTENDED 主题只能在客户端需要此额外详细信息时使用。

早期技术和参考资料

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