繁体   English   中英

计算cpu时间以使用linux内核模块执行功能?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM