我正在尝试使用/ usr / bin / time来收集程序的平均驻留集大小。我尝试了几个程序的这个命令,但平均常驻设置大小始终为零。例如:
我的操作系统是ubuntu 10.04。
您能否告诉我是什么原因或如何解决?非常感谢你!
答案 0 :(得分:4)
看,/usr/bin/time
不会自己计算这些数据。它使用wait4
从Linux获取此数据。这是wait4:
>man wait4
pid_t wait4(pid_t pid, int *status, int options,
struct rusage *rusage);
问题是并非struct ruusage
中的所有字段都得到维护:
Not all fields are completed; unmaintained fields are set to zero by the kernel. (The unmaintained fields are provided for compatibility with other systems, and because they may one day be supported on Linux.) The fields are interpreted as follows:
虽然maxrss是关于rss的其他领域没有。所以它只返回0并且/ usr / bin / time也打印0。
此外,如果您查看GNU时间的源文件,您将看到以下代码:
/*
FMT is the format string, interpreted as described above.
*/
static void
summarize (fp, fmt, command, resp)
FILE *fp;
const char *fmt;
const char **command;
RESUSE *resp;
{
while (*fmt)
{
switch (*fmt)
{
case 'M': /* Maximum resident set size. */
fprintf (fp, "%lu", ptok ((UL) resp->ru.ru_maxrss));
break;
case 't': /* Average resident set size. */
fprintf (fp, "%lu",
MSEC_TO_TICKS (v) == 0 ? 0 :
ptok ((UL) resp->ru.ru_idrss) / MSEC_TO_TICKS (v));
由于Linux将ru_idrss返回为0,因此平均常驻集大小为0。
有用的链接: