我想检查项目中每个函数和系统调用所花费的时间。我的代码是用户空间和内核空间的一部分。所以我需要在这两个空间上花费时间。我有兴趣了解 CPU 时间和磁盘 IO 方面的性能。我应该使用探查器工具吗?如果是,哪个更可取?或者我还有什么其他选择?
请帮忙,谢谢
我想检查项目中每个函数和系统调用所花费的时间。我的代码是用户空间和内核空间的一部分。所以我需要在这两个空间上花费时间。我有兴趣了解 CPU 时间和磁盘 IO 方面的性能。我应该使用探查器工具吗?如果是,哪个更可取?或者我还有什么其他选择?
请帮忙,谢谢
对于内核空间函数跟踪和分析(包括调用图格式和单个函数所花费的时间),请考虑使用Ftrace框架。
专门针对函数分析(在内核中),启用 CONFIG_FUNCTION_PROFILER 内核配置:在 Kernel Hacking / Tracing / Kernel function profiler 下。
这是帮助:
CONFIG_FUNCTION_PROFILER:
此选项启用内核函数分析器。在 debugfs中创建了一个
名为 function_profile_enabled 的文件,默认为零。
当 1 回显到此文件时,分析开始,当
输入零时,分析停止。
在trace_stats 目录中创建一个“functions”文件;此文件显示已命中的函数列表及其计数器。
一些资源:
至于内核级别的分析或某些指令或函数所花费的时间可以用所用的时钟来衡量。要获得实际用于执行给定任务的时钟滴答数,可以通过内核函数测量为...
#include <sys/time.h>
unsigned long ini,end;
rdtscl(ini);
...your code....
rdtscl(end);
printk("time lapse in cpu clics: %lu\n",(end-ini));
有关更多详细信息http://www.xml.com/ldd/chapter/book/ch06.html ,如果您的代码需要更多时间,那么您也可以有效地使用jiffies。
对于用户空间分析,您可以使用各种计时函数,以纳秒分辨率或 oprofile(http://oprofile.sourceforge.net/about/)提供时间,并参考使用 C++ 以纳秒为单位提供时间的 Timer 函数
好吧,我只在用户空间开发,所以我不知道这对磁盘 IO 或内核空间分析有多大帮助,但我用 oprofile 分析了很多。
我已经有一段时间没有使用它了,所以我无法为您提供分步指南,但您可以在此处找到更多信息:
http://oprofile.sourceforge.net/doc/results.html
通常这有助于我找到我的问题。您可能需要对 opreport 输出进行一些操作,以获得您想要的结果。