2

我正在做模块编程。我有时间测量我正在做的一些 printk 对性能的影响。我有这样的代码设置。

在代码的“declare-y”开始部分:

struct timespec ts_start,ts_end,test_of_time;

在一个方法中:

{
    //..other stuff
    getnstimeofday(&ts_start);
    printk("mkdir being hijacked\n");
    printk("pid is %d ", current->pid);
    printk("call #: 39 \n");
    printk("user_id of process: %d, effuid: %d\n\n", current->uid, current->euid);
    getnstimeofday(&ts_end);
    test_of_time = timespec_sub(ts_end,ts_start);
    printk("%lu", test_of_time.tv_nsec);
    return val;
}

我 dmesg 奇怪地看到值 0。我非常怀疑发生这种情况需要 0 纳秒。这里有什么问题?

谢谢

4

1 回答 1

3

你用的是什么版本的内核?您的计时器实际上可能没有纳秒级分辨率。如果您想测量 printks 花费的时间,您应该循环运行它们,以便它们花费有限且可测量的时间。它不会完全准确(例如,由于缓存未命中等原因,第一个 prink 虽然可能比随后的 prink 慢),但这应该会给您一个大致的想法。

如果您想了解为什么会发生这种情况,请尝试分配一个大缓冲区,在循环中旋转,将 getnstimeofday 的值写入缓冲区一段时间,然后将缓冲区输出到您可以分析的地方。您可能能够在数据中看到实际的时钟分辨率。

于 2012-10-20T23:42:19.877 回答