CPU的时钟频率&测量时间过去了

时间:2013-04-02 07:28:22

标签: linux-kernel cpu kernel cpu-speed

我想知道“1ms睡眠”需要多长时间。

在内核模块中执行此任务:

rdtscl(aj);
msleep(1);
rdtscl(b);
printk(KERN_INFO "Difference = %lu", (b-a));// Number of clock cycles consumed

我得到了输出:

Difference = 13479219

cat / proc / cpuinfo的输出

cpu MHz : 1197.000

有了这个,我计算了延迟,我得到了11.26毫秒。

为什么我不能在1毫秒左右得到它?

更新

cat / proc / cpuinfo sholud中的处理器频率可以从以下行获得:

model name  : Intel(R) Core(TM) i3 CPU         540  @ 3.07GHz

=>处理器频率为3.07 GHz。不知道这行“cpu MHz:1197.000”的含义是什么。

由于

1 个答案:

答案 0 :(得分:1)

进程解析取决于您运行测试代码的系统上配置的HZ值。 HZ值可以是100或1000,如果是100,则调度程序将在10 ms内仅唤醒一次。主要在桌面系统中,在最近的发行版中,它将设置为1000.(您可以在Fedora中的/ boot中检入配置文件)。调度程序将仅基于此进行调度,因此如果调度程序每10 ms唤醒一次,则无法获得小于10 ms的分辨率。或者您需要在内核中使用HR计时器。

kernel-3.4.5 (u3-1 *)$ cat /boot/config-3.6.10-4.fc18.x86_64 | grep HZ
CONFIG_NO_HZ=y
# CONFIG_RCU_FAST_NO_HZ is not set
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
CONFIG_HZ_1000=y
CONFIG_HZ=1000

如果您真的想要延迟但没有睡觉,那么您可以使用mdelay,它将循环指定的时间并返回。