linux BogoMIPS学习记录

2019-07-13 04:08发布

目前遇到一个问题,两颗不同主频的芯片,在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