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

前端之家收集整理的这篇文章主要介绍了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.

原文链接:https://www.f2er.com/linux/440408.html

猜你在找的Linux相关文章