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

How to measure the execution time of a function in Linux kernel Module?

我有一个关于测量函数执行时间的问题。我通常使用gettimeofday(),然而,这个功能has been removed。 我看到有 2 个函数: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 : %u\n",(unsigned int)elapsedTime);

我的输出:

elapsedTime: 6

但是我不知道这个elapsedTime是否正确,是6纳秒吗? 有人可以评论并支持我吗?

您混淆了 return 类型。

ktime_get_ns() returns 作为 u64 的时间,而不是作为 ktime_t 结构,所以你不应该将它与 ktime_sub() 一起使用。此外,ktime_sub() 的 return 类型是一个 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 : %lld\n",  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 : %llu\n", elapsed_time);