我正在实现一个算法,并希望测量它的时间和内存消耗.在我的帮助下,我编写了自己的测量实用程序,它可以读取/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
Run Code Online (Sandbox Code Playgroud)
我使用的是GNU/Linux 3.8.13 Mageia 3 x86_64.
编辑:作为一个信心提升,我发现KDE系统监视器支持我自己的实用程序报告的数据.事实上,它从我所在的地方获取信息.因此,信任数据/proc/[pid]/stat应该非常安全.但问题仍然存在......
编辑2:在下面的答案的帮助下,推断出这wait3()是GNU使用的命令time.它以手册页getrusage(2)中描述的形式返回数据.在RSS上,它说:
这是使用的最大驻留集大小(以千字节为单位).
手册页也指proc/[pid]/stat,其中说
驻留集大小:进程在实际内存中的页数.这只是计算文本,数据或堆栈空间的页面.这不包括未加载需求或换出的页面.
那么,第二个版本在短短的测量更加精确我的程序的内存使用情况,并在第一个版本还可以测量某种外部库使用的?