我经常注意到 /proc/[pid]/status
中为 RssAnon
给出的数字与 中为
。我还查看了 Anonymous
给出的数字之间存在差异/proc/[pid]/smaps_rollup/proc/[pid]/status
中的 RssShmem
,但这无助于解释差异。例如:
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- 的答案最接近(实际上,这里讨论了 statm 和 smaps):https://stackoverflow.com/a/30799817/5747415 ,因为它基于对生成 smaps
和 statm
的内核代码的分析。它以一个(貌似合理,但未经证实)假设结束:smaps
通过实际迭代内存区域以可靠但耗时的方式计算其数据,而 statm
中的信息> 基于在许多不同位置不断更新的计数器(在本例中为 MM_ANONPAGES
) - 这可能会导致不一致。
有人能为这些差异提供一些有根据的解释吗?它们的意图和值的含义是否不同?或者它实际上是一个错误?预先非常感谢。
最佳答案
你提到的看似合理的理论是正确的。手册页已更新:https://www.spinics.net/lists/linux-mm/msg230450.html
Since 34e55232e59f7b19050267a05ff1226e5cd122a5 (introduced back in v2.6.34), Linux uses per-thread RSS counters to reduce cache contention on the per-mm counters. With a 4K page size, that means that you can end up with the counters off by up to 252KiB* per thread.
(*这个精确数字并不严格准确,请参阅帖子了解详细信息)
关于memory-management -/proc/[pid]/status :RssAnon and/proc/[pid]/smaps_rollup:Anonymous? 不一致是什么原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62301373/