首页 > 解决方案 > /proc/[pid]/status:RssAnon 和 /proc/[pid]/smaps_rollup:Anonymous 之间存在差异的原因是什么?

问题描述

RssAnon我经常注意到in/proc/[pid]/status和 for Anonymousin给出的数字之间的差异/proc/[pid]/smaps_rollup。我也查看RssShmem/proc/[pid]/status,但这无助于解释差异。例如:

status:Name: tail
status:RssAnon:          72 kB
status:RssShmem:          0 kB

smaps_rollup:Anonymous:  92 kB

在我分析的系统(具有 4.14 内核)中,这种差异很常见。也有数字匹配的情况,但这并不常见。

我发现很多页面的内容/proc/[pid]/status/proc/[pid]/smaps/proc/[pid]/smaps_rollup进行了解释。然而,对于这种差异,从来没有一个确凿的解释。来自 rr- 的答案最接近(实际上,statmsmaps这里讨论过):https ://stackoverflow.com/a/30799817/5747415 ,因为它是基于对生成smaps和的内核代码的分析statm。它以一个(似是而非的,但未经证实的)假设结束,该假设smaps通过实际迭代内存区域以可靠但耗时的方式计算其数据,而其中的信息statm基于计数器(在这种情况下MM_ANONPAGES),这些计数器在批次中不断更新不同的地方 - 这可能会导致不一致。

有人可以为这些差异提供一些有根据的解释吗?它们是有意的吗?值的含义是否不同?或者它实际上是一个错误?提前非常感谢。

标签: memory-managementlinux-kernelprocfs

解决方案


你提到的似是而非的理论是正确的。手册页已更新:https ://www.spinics.net/lists/linux-mm/msg230450.html

自 34e55232e59f7b19050267a05ff1226e5cd122a5(在 v2.6.34 中引入)以来,Linux 使用每线程 RSS 计数器来减少每毫米计数器上的缓存争用。对于 4K 页面大小,这意味着您最终可以将计数器关闭,每个线程最多可以减少 252KiB*。

(*此精确数字并非严格准确,详情请参阅线程)


推荐阅读