🔥作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生,研究方向无线联邦学习 🎬擅长领域:驱动开发,嵌入式软件开发,BSP开发 ❄️作者主页:一个平凡而乐于分享的小比特的个人主页 ✨收录专栏:Linux,本专栏目的在于,记录学习Linux操作系统的总结 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

BogoMIPS = Bogus(虚假的) + MIPS(每秒百万条指令)
想象场景:
你需要在没有秒表的情况下等待"大概1秒钟"
普通人: 快速数"1-2-3..." (每个人的语速不同)
Linux内核: 运行一个校准过的循环(BogoMIPS就是"语速测量器")启动流程:
[BIOS/UEFI] → [Bootloader] → [Linux内核加载]
↓
[BogoMIPS校准]
├── 开始计时
├── 运行固定次数的空循环
├── 停止计时
└── 计算:循环次数/时间 = BogoMIPS值时间轴: |------- t 毫秒 -------|
CPU活动: [空循环][空循环][空循环]... (N次)
↑开始计时 ↑结束计时
计算公式:
BogoMIPS = (N次循环 × 2) / (t秒 × 1,000,000)
示例:
假设:N=1000万次循环,t=0.1秒
BogoMIPS = (10,000,000 × 2) / (0.1 × 1,000,000) = 200.0对比维度 | BogoMIPS | 真实MIPS(如Dhrystone) |
|---|---|---|
目的 | 内核延迟校准 | CPU性能基准测试 |
准确性 | 粗略近似值 | 相对精确的度量 |
使用场景 | 内核内部使用 | 硬件评测、比较 |
稳定性 | 单次启动固定 | 多次测试取平均 |
计算内容 | 空循环(无实际工作) | 实际指令混合 |
依赖因素 | CPU频率、微架构 | 完整系统性能 |
典型值范围 | 几十到几千 | 几千到几万(现代CPU) |
# 方法1:查看内核启动信息
$ dmesg | grep -i bogomips
[ 0.000000] Calibrating delay loop... 499.71 BogoMIPS (lpj=2498560)
# 方法2:查看/proc/cpuinfo
$ cat /proc/cpuinfo | grep bogomips
bogomips : 4997.12CPU类型 频率 BogoMIPS值 说明
------------------ ------ ----------- ----------------------
Raspberry Pi 4 1.5GHz 108.00 ARM Cortex-A72
Intel Core i7-8700 3.2GHz 6384.00 现代x86处理器
Intel Pentium 4 3.0GHz 5990.40 古老NetBurst架构
ARM Cortex-A53 1.4GHz 38.40 低功耗ARM核心场景模拟:
// 内核需要实现一个微秒级延迟
void udelay(unsigned long usecs)
{
// 没有BogoMIPS:硬编码循环次数 ❌
// for(i=0; i<1000; i++); // 在不同CPU上时间不同!
// 有BogoMIPS:动态计算 ✅
loops = (usecs * loops_per_jiffy * HZ) / 1000000;
// loops_per_jiffy 来自BogoMIPS校准
while(loops--); // 精确延迟
}误解:"我的CPU有5000 BogoMIPS,比朋友4000的快25%"
事实:BogoMIPS不能用于跨平台/跨架构的性能比较!
原因:
┌─────────────────────────────────────────────┐
│ 影响因素: │
│ 1. CPU微架构差异(ARM vs x86 vs RISC-V) │
│ 2. 编译器优化差异 │
│ 3. 内存速度影响 │
│ 4. 节能模式状态 │
└─────────────────────────────────────────────┘传统方法问题:
+ 只测试主CPU核心
+ 假设所有核心频率相同
+ 不考虑动态频率调整
现代改进(部分内核):
┌─ 多核心分别校准
BogoMIPS ──┼─ 考虑Turbo Boost/降频
└─ 更精确的计时方法#!/bin/bash
# bogomips-demo.sh
echo "=== BogoMIPS演示 ==="
echo "1. 系统BogoMIPS值:"
grep -m1 bogomips /proc/cpuinfo
echo -e "\n2. 简单性能测试对比:"
echo "CPU型号: $(grep 'model name' /proc/cpuinfo | head -1 | cut -d: -f2)"
echo -e "\n3. 实际计算演示:"
echo "假设需要1ms延迟"
echo "根据BogoMIPS,内核会计算需要循环多少次空操作"

// 文件:init/calibrate.c
// 简化版校准逻辑
static unsigned long calibrate_delay_converge(void)
{
unsigned long lpj;
int i;
lpj = (1<<12); // 初始猜测值
// 逐步逼近精确值
for (i = 0; i < 5; i++) {
lpj = calibrate_delay_direct(lpj);
}
// 计算BogoMIPS值
printk(KERN_DEBUG "%lu.%02lu BogoMIPS (lpj=%lu)\n",
lpj/(500000/HZ),
(lpj/(5000/HZ)) % 100,
lpj);
return lpj;
}关键概念关系:
BogoMIPS → loops_per_jiffy → 精确延迟
1 jiffy = 1/HZ 秒(通常HZ=250,所以1 jiffy=4ms)
loops_per_jiffy = (BogoMIPS * 500000) / HZ
示例计算:
BogoMIPS = 2000, HZ = 250
loops_per_jiffy = (2000 * 500000) / 250 = 4,000,000需要关注的场景:
┌───────────────┬─────────────────────────────────┐
│ 场景 │ 原因 │
├───────────────┼─────────────────────────────────┤
│ 嵌入式开发 │ 确保时间敏感操作的准确性 │
│ 内核调试 │ 检查CPU频率/校准问题 │
│ 虚拟化环境 │ 确保guest时钟准确 │
│ 旧硬件移植 │ 新内核在老CPU上的兼容性 │
└───────────────┴─────────────────────────────────┘Documentation/timers/NO_HZ.txtinit/calibrate.c记住:BogoMIPS就像一把自制的尺子,它可能不精确也不标准,但对于制作它的人来说,足够测量自己的桌子了。Linux内核用它来"测量"自己的时间需求,而不是用来比较不同的"桌子"(CPU)大小。