如何测量 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);
我有一个关于测量函数执行时间的问题。我通常使用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);