gpt4 book ai didi

c++ -/usr/bin/time 是如何衡量内存使用情况的?

转载 作者:IT王子 更新时间:2023-10-29 00:54:59 28 4
gpt4 key购买 nike

我正在实现一个算法,想测量它的时间和内存消耗。为了帮助我,我编写了自己的测量实用程序,它从 /proc/[pid]/stat 读取用户和系统消耗的时间量,以及虚拟内存和驻留集峰值大小。 (我不是 100% 清楚这两个内存统计数据之间的区别,但这不是手头的问题。)

到目前为止一切顺利,但随之而来的是第三方实现,我希望将其与我自己的程序进行比较。由于我不想摆弄它的来源,我无法使用我自己的测量程序来收集有关其效率的数据(我也许可以,但这需要我重新考虑我的测量方案)。所以我发现 /usr/bin/time 也采取了这些措施。

当我比较输出时,我发现 /usr/bin/time 确实报告了与我自己的工具相同的时间使用情况,但内存数据却大不相同。首先,/usr/bin/time 不报告任何有关虚拟内存使用情况的信息,它仅提供有关最大驻留集大小的帖子。其次,/usr/bin/time 报告的驻留集大小大约是我自己测量的六到八倍。

所以,我一直在努力找出 /usr/bin/time 实际上是如何进行测量的,以及为什么差异如此根本。另外,哪个是正确的值?

输出示例(单位为 MB):

<program>: <virtual mem> <resident set size>
autotest (my own utility): 23.2266 2.19531
/usr/bin/time: N/A 11.23437

我正在使用 GNU/Linux 3.8.13 Mageia 3 x86_64。

编辑:为了增强信心,我发现 KDE 系统监视器支持我自己的实用程序报告的数据。事实上,它和我一样从同一个地方获取信息。因此,信任来自 /proc/[pid]/stat 的数据应该是非常安全的。但问题仍然存在......

EDIT2:根据以下答案的帮助,推断wait3() 是GNU time 使用的命令。它以手册页 getrusage(2) 中描述的形式返回数据。在 RSS 上,它说:

This is the maximum resident set size used (in kilobytes).

手册页还提到了 proc/[pid]/stat,它说

Resident Set Size: number of pages the process has in real memory. This is just the pages which count toward text, data, or stack space. This does not include pages which have not been demand-loaded in, or which are swapped out.

那么,第二个版本是否更准确地测量我的程序的内存使用情况,而第一个版本也测量某种外部库的使用情况?

最佳答案

我没有检查time 的来源。但是有 wait3wait4 函数来获取子进程的usage:

pid_t wait3(int *status, int options, struct rusage *rusage);
pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage);

struct usage 包含最大驻留集大小值。

手册页 getrusage(2) 描述了 struct usage

关于c++ -/usr/bin/time 是如何衡量内存使用情况的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19494298/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com