How to measure user/system cpu time for a piece of program?
在经典APUE(UNIX环境中的高级编程)的3.9节中,作者测量了他的示例程序中消耗的用户/系统时间,该程序针对不同的缓冲区大小(I / O读/写程序)运行。
结果表有点像(所有时间都以秒为单位):
1 2 3 4 5 | BUFF_SIZE USER_CPU SYSTEM_CPU CLOCK_TIME LOOPS 1 124.89 161.65 288.64 103316352 ... 512 0.27 0.41 7.03 201789 ... |
我很好奇并且真的想知道如何测量一个程序的USER / SYSTEM CPU时间?
在这个例子中,
显然,它不仅仅是用户CPU时间和系统CPU时间的总和。
您可以使用
1 2 3 4 5 |
在
您可能想知道的另一件事是
部分答案:
好吧,CLOCK_TIME与时钟所示的时间相同,时间在所谓的"真实世界"中传递。
测量的一种方法是使用gettimeofday POSIX函数,它将时间存储到调用者的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | struct timeval tv1, tv2; gettimeofday(&tv1, NULL); do_operation_to_measure(); gettimeofday(&tv2, NULL); // get difference, fix value if microseconds became negative struct timeval tvdiff = { tv2.tv_sec - tv1.tv_sec, tv2.tv_usec - tv1.tv_usec }; if (tvdiff.tv_usec < 0) { tvdiff.tv_usec += 1000000; tvdiff.tv_sec -= 1; } // print it printf("Elapsed time: %ld.%06ld ", tvdiff.tv_sec, tvdiff.tv_usec); |