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_STATS
和 ZX_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 的计数器。