c -如何测量Linux内核模块中函数的执行时间?



我有一个关于度量函数执行时间的问题。我通常使用gettimeofday(),但是,这个功能已经被删除了。我看到有两个函数:ktime_get_ns()/ktime_get_ms()我尝试在我的代码中应用,如下所示:

#include <linux/ktime.h>
...
ktime_t start_time, stop_time;
s64  elapsedTime;
start_time = ktime_get_ns();
for_each_process() {}//My function
stop_time = ktime_get_ns();
elapsedTime = ktime_sub(stop_time, start_time);
pr_info("elapsedTime : %un",(unsigned int)elapsedTime);

我输出:

elapsedTime: 6

但是我不知道这个elapsedTime是否正确,它是6纳秒吗?有人能帮我复习一下吗?

您混淆了返回类型。

ktime_get_ns()返回u64结构的时间,而不是ktime_t结构,所以你不应该在ktime_sub()中使用它。此外,ktime_sub()的返回类型是ktime_t结构体,所以您应该使用它而不是s64,即使它在底层是相同的。

根据你想做的事情,你有两个选择,要么在任何地方使用ktime_t结构(带正确的函数):

#include <linux/ktime.h>
...
ktime_t start_time, stop_time, elapsed_time;
start_time = ktime_get();
for_each_process() {}//My function
stop_time = ktime_get();
elapsed_time= ktime_sub(stop_time, start_time);
pr_info("elapsedTime : %lldn",  ktime_to_ns(elapsed_time));

或者直接使用u64:

#include <linux/ktime.h>
...
u64 start_time, stop_time, elapsed_time;
start_time = ktime_get_ns();
for_each_process() {}//My function
stop_time = ktime_get_ns();
elapsedTime = stop_time - start_time;
pr_info("elapsedTime : %llun", elapsed_time);

相关内容

  • 没有找到相关文章

最新更新