memory-management - /proc/[pid]/status:RssAnon 和 /proc/[pid]/smaps_rollup:Anonymous 之间存在差异的原因是什么?
问题描述
RssAnon
我经常注意到in/proc/[pid]/status
和 for Anonymous
in给出的数字之间的差异/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- 的答案最接近(实际上,statm
在smaps
这里讨论过):https ://stackoverflow.com/a/30799817/5747415 ,因为它是基于对生成smaps
和的内核代码的分析statm
。它以一个(似是而非的,但未经证实的)假设结束,该假设smaps
通过实际迭代内存区域以可靠但耗时的方式计算其数据,而其中的信息statm
基于计数器(在这种情况下MM_ANONPAGES
),这些计数器在批次中不断更新不同的地方 - 这可能会导致不一致。
有人可以为这些差异提供一些有根据的解释吗?它们是有意的吗?值的含义是否不同?或者它实际上是一个错误?提前非常感谢。
解决方案
你提到的似是而非的理论是正确的。手册页已更新:https ://www.spinics.net/lists/linux-mm/msg230450.html
自 34e55232e59f7b19050267a05ff1226e5cd122a5(在 v2.6.34 中引入)以来,Linux 使用每线程 RSS 计数器来减少每毫米计数器上的缓存争用。对于 4K 页面大小,这意味着您最终可以将计数器关闭,每个线程最多可以减少 252KiB*。
(*此精确数字并非严格准确,详情请参阅线程)
推荐阅读
- google-app-engine - 谷歌应用引擎在将流量转移到新版本时请求失败?
- react-native - 使用 sha256 反应原生
- python - 在python中只计算一次列表中的元素而不重复
- linux - Linux:加载共享库时出错:libQtSvg.so.4:无法打开共享对象文件:没有这样的文件或目录
- php - 如何选择符合 now() 日期条件的人的年龄
- ios - CASpringAnimation的initialVelocity的单位是什么?
- google-chrome-extension - 在 Chrome 扩展程序中显示 Adsense 广告
- pygame - Pygame“模块”对象没有属性“事件”
- javascript - 循环访问 JSON 响应对象
- azure - 使用 Azure 数据工厂将带有元数据的 Azure Blob 从一个存储帐户复制到另一个存储帐户