| RFC-0011:zx_object_get_info ZX_INFO_KMEM_STATS_EXTENDED | |
|---|---|
| 状态 | 已接受 |
| 区域 |
|
| 说明 | 建议向 `zx_object_get_info()` 系统调用添加新主题 - `ZX_INFO_KMEM_STATS_EXTENDED`。 |
| Gerrit 更改 | |
| 作者 | |
| 审核人 | |
| 提交日期(年-月-日) | 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_STATS 或 ZX_INFO_KMEM_STATS_EXTENDED。ZX_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 的计数器。