c – /usr/bin/time如何衡量内存使用情况?

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

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

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

所以,我一直试图找出/usr/bin/time如何实际执行其测量,以及为什么差异是如此根本.另外,哪个是正确的值?

输出示例(单位为MB):

我使用的是GNU / Linux 3.8.13 Mageia 3 x86_64.

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

编辑2:在下面的答案的帮助下,推断出wait3()是GNU时间使用的命令.它以手册页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.

那么,第二个版本在测量程序的内存使用情况时是否更准确,第一个版本还测量了某种外部库使用情况?

最佳答案
我没有查看时间来源.但是有wait3和wait4函数获取子进程的rusage:

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

struct rusage包含最大驻留集大小值.

手册页getrusage(2)描述了结构rusage.

相关文章

1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...
如何抑制stable_secret读取关键的“net.ipv6.conf.all.stabl...
1 删除0字节文件 find -type f -size 0 -exec rm -rf {} ...
## 步骤 1:安装必要的软件包 首先,需要确保系统已安装 `dh...