从这个 http://www.embeddedlinux.org.cn/essentiallinuxdevicedrivers/final/ch02lev1sec1.html
它说
在启动期间,内核计算处理器的次数 可以在一瞬间执行内部延迟循环,这就是时间 系统计时器的两个连续时钟周期之间的间隔。
从理解Linux内核书中说
内核执行 calibrate_delay(( 函数,该函数确定如何 许多"循环"适合一个刻度
我在jiffie和loops_per_jiffie之间感到困惑。我们已经可以从CONFIG_HZ知道解决方案。例如,如果CONFIG_HZ为 250,则意味着一个 jiffie 增量的成本为 1/250 = 4 毫秒
谁能解释更多关于这个 calibrate_delay(( 它实际上在计算什么?
calibrate_delay()
函数以粗略的方式测量 CPU 每秒可以执行多少条指令。该函数在关于BogoMIPS的wiki中也有解释,该函数的结果是著名的BogoMIPS的数量。该函数的源代码位于 init/calibrate.c 中。
查看源pr_cont(...)
调用,我猜:
1 loops_per_jiffy / (500000/HZ) = 1 BigoMOPS
这意味着:
1 loops_per_jiffy = 500000 / HZ BigoMOPS
所以loops_per_jiffy
看起来就像是一瞬间有 500000 条数百万条指令。
假设我想要 1 微秒延迟,如何使用这个loops_per_jiffie值
阅读源代码。它适用于各种架构,例如 x86/lib/delay.c 函数中的 udelay(( 或 mips 的 udelay((。看起来它会等待number_of_useconds_to_wait * loops_per_jiffy / 1000000 * 4 * HZ [+ 1]
循环(或类似的东西(。