calibrate_delay系统启动时有什么功能



从这个 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]循环(或类似的东西(。

最新更新