我在做模块编程。我有时间测量我想要对我正在做的一些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纳秒才能实现。这里有什么不妥?
由于
答案 0 :(得分:3)
您使用的内核版本是什么?您的计时器实际上可能没有纳秒分辨率。如果要测量打印件的时间,则应该在循环中运行它们,以便它们花费有限且可测量的时间。它不会完全准确(例如,由于缓存未命中等原因,第一个prink可能比后续的更慢),但这应该给你一个棒球场的想法。
如果你想知道为什么会发生这种情况,请尝试分配一个大缓冲区,在循环中旋转将getnstimeofday的值写入缓冲区一段时间,然后将缓冲区输出到可以分析它的地方。您可能能够在数据中看到实际的时钟分辨率。