目前遇到一个问题,两颗不同主频的芯片,在android下显示的/proc/cpuinfo中的BogoMIPS竟然是一样的。
借机学习一下BogoMIPS是怎么计算的。
BogoMIPS
(Bogo--Bogus--伪的,MIPS--millions of instruction per second) 按照字面的解释是“不太真实的MIPS”。之所以不太真实,那是因为其计算方法并不十分精确。
在linux启动时,会有显示下面的一句话,在是linux/init/calibrate.c中计算并显示出来。
Calibrating delay loop... 1205.86 BogoMIPS (lpj=6029312)
/proc/cpuinfo
cat 这个文件可以看到cpu相关信息。该文件是在linux/fs/proc/cpuinfo.c中创建的:
static int __init proc_cpuinfo_init(void)
{
proc_create("cpuinfo", 0, NULL, &proc_cpuinfo_operations);
return 0;
}
module_init(proc_cpuinfo_init);
在proc_cpuinfo_operations的open函数中,调用了cpuinfo_op:
static int cpuinfo_open(struct inode *inode, struct file *file)
{
return seq_open(file, &cpuinfo_op);
}
而cpuinfo_op是在arch/arm/kernel/setup.c中,其中的c_show就是cat /proc/cpuinfo所显示的。
其中打印BogoMIPS所使用的变量是在linux/init/calibrate.c中计算出来的。
void __cpuinit calibrate_delay(void)
关于这个函数,主要的思想就是计算出在一个时钟节拍内,延迟了多大一个数。
关于计算过程,详细的解释参考:
http://www.groad.net/bbs/read.php?tid-3057.html
http://www.linuxdiyf.com/viewarticle.php?id=67777