bogomips 是 Linux 内核在启动时,通过一个简单的循环计算出的一个“理论”值,它用于粗略地衡量 CPU 的速度,但它不能**作为衡量 CPU 性能的可靠标准。

详细解释
Bogomips 是什么?
BogoMIPS 是 "Bogus MIPs"(伪 MIPS)的缩写,这里的 "Bogus" 意味着它是“假的、不真实的”。
它是由 Linus Torvalds(Linux 内核的创始人)编写的一个内建校准程序,在 Linux 系统启动时自动运行,它的唯一目的就是计算这个值。
它是如何计算的?
bogomips 的计算过程非常简单,不涉及任何复杂的指令或真实的任务,它本质上是一个“空循环”。
- 开始计时:记录一个精确的时间戳。
- 执行循环:让 CPU 尽可能快地重复一个简单的循环操作(通常是
rdtsc指令,用于读取时间戳计数器)。 - 结束计时:循环执行固定的次数后,再记录一个时间戳。
- 计算结果:根据执行的总时间和循环次数,计算出 CPU 每秒能执行多少百万次(Mega)这个循环,这个结果就是
bogomips值。
核心要点:这个循环没有任何实际意义,它只是在测量 CPU 执行一个特定、无用的循环的速度。
Bogomips 的主要用途是什么?
尽管它不是一个性能基准,但它有两个非常重要的用途:
a) 内部延迟校准
这是它最主要、最核心的用途,Linux 内核中的某些定时器和延迟函数需要知道 CPU 的“大致速度”来工作,内核需要知道 usleep() 函数应该让 CPU 空转多久才能实现精确的微秒级延迟。
bogomips 为内核提供了一个快速、简单且足够准确的“猜测值”,用于这些内部操作,它确保了不同速度的 CPU 上,系统的时间行为是一致的。
b) 识别硬件变化
bogomips 的值与 CPU 的核心频率、架构和缓存大小等因素相关,如果一个管理员在修改系统配置(如 CPU 频率缩放、超频、更换 CPU 或虚拟机资源调整)后,检查 bogomips 值发生了巨大变化,这可以作为一个信号,表明底层硬件或虚拟化环境可能发生了改变。
Bogomips 不能用来做什么?
这是理解 bogomips 最关键的一点:
绝对不要用 bogomips 来比较不同 CPU 的性能!
原因如下:
- 架构依赖:不同 CPU 架构(如 x86, ARM, PowerPC)的指令集不同,它们的循环效率也不同,一个 ARM 芯片的
bogomips可能很高,但这不代表它比一个 x86 芯片快。 - 与实际性能无关:
bogomips只测量一个特定空循环的速度,一个 CPU 可能在科学计算、游戏或数据库处理上表现出色,但在bogomips的空循环上表现平平,反之亦然,现代 CPU 的复杂特性(如多级缓存、分支预测、SIMD 指令、多核等)在bogomips测试中完全被忽略了。 - 容易受影响:
bogomips值会受到 CPU 的当前频率(是否处于节能模式)、内核版本、编译器优化选项等多种因素的影响,导致结果不稳定且不可靠。
如何查看 Bogomips?
你可以通过以下命令查看你的 bogomips 值:
# 方法一:查看 /proc/cpuinfo 文件(最常用) cat /proc/cpuinfo | grep bogomips # 方法二:使用 dmesg 命令查看启动日志 dmesg | grep bogomips
示例输出:
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 79
model name : Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz
stepping : 3
microcode : 0xa7
cpu MHz : 2100.000
cache size : 8192 KB
physical id : 0
siblings : 8
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 22
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1d arch_capabilities
bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs taa itlb_multihit srbds mmio_stale_data retbleed gds
bogomips : 4800.00
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:
| 特性 | 描述 |
|---|---|
| 全称 | Bogus MIPs (伪 MIPS) |
| 本质 | Linux 启动时通过一个空循环计算出的理论值。 |
| 用途 | 主要:为内核内部定时器和延迟函数提供校准。 次要:帮助管理员检测硬件/配置的变更。 |
| 误区 | 绝对不能用于准确比较不同 CPU 的实际性能。 |
| 影响因素 | CPU 架构、频率、内核版本等。 |
把它看作是 Linux 内核启动时顺便打印出来的一个“彩蛋”或系统指纹,而不是一个严肃的性能指标,要评估 CPU 性能,请使用专业的基准测试工具,如 sysbench, geekbench, phoronix-test-suite 等。
