【问题标题】:What is the reason for the discrepancy between /proc/[pid]/status:RssAnon and /proc/[pid]/smaps_rollup:Anonymous?/proc/[pid]/status:RssAnon 和 /proc/[pid]/smaps_rollup:Anonymous 之间存在差异的原因是什么?
【发布时间】:2020-09-29 17:43:30
【问题描述】:

我经常注意到/proc/[pid]/status 中的RssAnon/proc/[pid]/smaps_rollup 中的Anonymous 给出的数字之间存在差异。我还在/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- 的答案最接近(实际上,这里讨论了 statmsmaps):https://stackoverflow.com/a/30799817/5747415,因为它是基于对生成 smapsstatm 的内核代码的分析。它以一个(似是而非但未经证实的)假设结束,即smaps 通过实际迭代内存区域以可靠但耗时的方式计算其数据,而statm 中的信息基于计数器(在这种情况下为@ 987654338@) 在许多不同的地方不断更新 - 这可能会导致不一致。

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

【问题讨论】:

    标签: memory-management linux-kernel procfs


    【解决方案1】:

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

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

    (*这个精确的数字并不完全准确,详情见帖子)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多