我正在使用gprof在netbsd上评测一个userland应用程序,并看到clock_gettime使用了超过30%的周期。Gprof没有显示从哪里调用它(它显示了一些显然不调用clock_gettime的函数)。该应用程序使用第三方代码,包括libevent 1.4(似乎使用clock_gettime)。我想把电话从电话中删除,但不能确定太多。
- 我不明白为什么要花那么多时间。任何投入都将不胜感激。我还看到每天的gettimeofday需要很多周期。一般来说,为什么获取时间需要这么多处理周期
- 有没有一种方法可以优化clock_gettime(),或者我们可以使用任何其他调用
- 当使用-pg进行编译以进行评测时,gcc本身是否可能将此调用添加到代码中?谢谢你的回答
这一切都与程序正在执行的其他操作有关,请记住,如果您正在执行任何I/O操作,程序实际使用的CPU时间可能很小,gprof
看不到其他任何操作。因此,如果一些对计时程序的调用被卡住了,并且它们被调用的频率足够高,那么它们肯定会显示出很高的百分比。
为什么gprof
没有显示他们是从哪里打来的?对于用-pg编译的例程,当输入任何例程时,它都会试图弄清楚调用者是谁。它尝试了,但这并不意味着它成功了。不管怎样,就是gprof
。