我想测量Linux中C函数的总时间。可以从不同的线程同时调用该函数,并且将花费的时间加在一起。如何从Linux进行此测量?我查看了clock()
函数并计算函数开始和结束之间的差异。
我在Stackoverflow中的这个线程中找到了一个使用clock()
的解决方案:
How to measure total time spent in a function?
但据我所知,这还包括来自线程的CPU处理在测量期间执行一些其他功能。这是正确的假设吗?
还有其他方法可以在Linux中进行此测量吗?
答案 0 :(得分:1)
您的问题表明您使用的是Linux。
您可以将getrusage(2)系统调用与RUSAGE_THREAD
参数一起使用,这将为您提供当前正在运行的线程的累计统计信息。
通过比较函数运行之前和之后ru_utime
以及ru_stime
中的内容,您应该能够确定函数在CPU时间内累积的时间,对于当前正在运行的线程。
对所有线程进行泡沫,冲洗,重复,然后将它们添加起来。
答案 1 :(得分:0)
从clock()
和gettimeofday()
系列函数中获取时间有利于在两个后续调用之间获得精确的时间差,但不利于获得函数所花费的时间,因为操作的线程和进程重新安排系统和IO阻塞,没有任何保证您的线程/进程可以获得CPU直到完成其操作,因此您不能按时间间隔进行中继。
你有两个选择
使用将使用硬件性能计数器的英特尔V-Tune和英特尔检查器等分析软件
使用Realtime linux内核,使用FIFO调度程序调度进程并使用时差,在FIFO调度程序中没有人打断你的程序,所以你可以安全地使用时差作为函数花费的时间,使用clock(),gettimeofday ()或更精确的rdtsc
答案 2 :(得分:0)
性能分析的一个非常好的工具是perf
(最近的Linux内核可用):
使用
记录效果数据perf record <command>
然后用
分析它perf report
使用调试符号编译程序以获得有用的结果。