目前遇到一个问题,两颗不同主频的芯片,在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中创建的:
1
2
3
4
5
6
7static 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:
1
2
3
4static 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中计算出来的。
1void __cpuinit calibrate_delay(void)
关于这个函数,主要的思想就是计算出在一个时钟节拍内,延迟了多大一个数。
关于计算过程,详细的解释参考:
http://www.groad.net/bbs/read.php?tid-3057.html
http://www.linuxdiyf.com/viewarticle.php?id=67777
最后
以上就是优美热狗最近收集整理的关于linux BogoMIPS学习记录的全部内容,更多相关linux内容请搜索靠谱客的其他文章。
发表评论 取消回复