[英]Calculate cpu-time to execute a function using linux kernel module?
假设我正在用户空间中执行一个程序,并且该程序中有一个功能。 现在,我想知道执行该功能所花费的cpu时间。
到目前为止,我知道了什么?
在该程序启动时,我将获得该进程的PID,并将其传递给内核模块,并将获得该进程的task_struct。 之后,在thread_info中,我们可以获得指令指针和堆栈指针。
从用户空间,我们可以将该函数的开始和结束偏移量提供给内核模块,然后在内核中,我们可以借助指令指针检查这两个函数以获得执行时间。 所以有办法做到这一点,还是有实现目标的另一种方法。
请不要指定一些预先存在的工具。 我想自己编写一个内核模块来做到这一点。
已经有一个名为SystemTap的工具。 它动态生成模块。
在用户空间中,您可以使用以下命令:
stap -ve ' global start;
probe process("/usr/bin/python2.7").function("builtin_range")
{ start = local_clock_us(); }
probe process("/usr/bin/python2.7").function("builtin_range").return
{ printf("range(%d, %d, %d) took %d us\n",
user_int(&$ilow), user_int(&$ihigh),
user_int(&$istep), local_clock_us() - start); }'
它将测量壁时间的Python 2 range()
内置。 假设它不睡觉,则挂墙时间将与cpu时间匹配。
可以使用相同的方式跟踪内核内函数:
stap -ve ' global start;
probe kernel.function("__schedule")
{ start[cpu()] = local_clock_us(); }
probe kernel.function("__schedule").return
{ printf("schedule() on CPU %d took %d us\n", cpu(),
local_clock_us() - start[cpu()]); }'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.