gpt4 book ai didi

linux - 使用 linux 内核模块计算 cpu-time 来执行函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:29:29 24 4
gpt4 key购买 nike

假设我正在用户空间中执行一个程序,并且该程序中有一个函数。现在我想知道执行该函数所花费的 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() 内置函数的wall time。假设它不会休眠,wall time 将匹配 cpu time

内核函数可以用同样的方式追踪:

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()]); }'

关于linux - 使用 linux 内核模块计算 cpu-time 来执行函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29723711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com