【问题标题】:How to measure the execution time of a function in Linux kernel Module?如何测量 Linux 内核模块中函数的执行时间?
【发布时间】:2021-12-13 08:25:15
【问题描述】:

我有一个关于测量函数执行时间的问题。我通常使用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纳秒吗? 有人可以评论和支持我吗?

【问题讨论】:

    标签: c time linux-kernel


    【解决方案1】:

    您混淆了返回类型。

    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 : %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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      相关资源
      最近更新 更多