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