我想知道"1ms睡眠“需要多少时间。
在内核模块中运行此任务:
rdtscl(aj);
msleep(1);
rdtscl(b);
printk(KERN_INFO "Difference = %lu", (b-a));// Number of clock cycles consumed我得到的输出:
Difference = 13479219cat /proc/cpuinfo输出
cpu MHz : 1197.000用它,我计算了延迟,我得到了11.26万秒。
为什么我不让它在1毫秒左右?
更新:
cat /proc/cpuinfo中的处理器频率可从以下一行获得:
model name : Intel(R) Core(TM) i3 CPU 540 @ 3.07GHz=>处理器频率为3.07 GHz。但是不知道这一行"cpu MHz : 1197.000“的含义是什么。
谢谢
发布于 2013-04-02 10:55:20
流程解析取决于已运行测试代码的系统上配置的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,这将只循环指定的时间和返回量。
https://stackoverflow.com/questions/15758500
复制相似问题