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。
实现
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_EXTENDED
公开的新字段的计算开销可能很高,因此 ZX_INFO_KMEM_STATS
的现有用户的性能会受到影响。例如,计算由分页器支持的计数与由分页器支持的所有 VMO 的页面总数成正比。ZX_INFO_KMEM_STATS
的现有客户最终会不必要地为他们可能根本不需要的指标承担额外的性能开销。相反,ZX_INFO_KMEM_STATS_EXTENDED
主题仅在客户端需要此额外级别的详细信息时才应使用。
在先技术和参考文档
在 Linux 上,/proc/meminfo
包含 MemAvailable、Active 和 Inactive 的计数器。