Bogomips是Linux内核在启动时计算出的一个处理器速度指标,但它不代表CPU的真实性能,而是用于内核的兼容性测试和调度参考,数值高不一定意味着性能强。
Bogomips值高好还是低好?先别急着下结论
很多刚接触Linux的朋友,在查看/proc/cpuinfo时都会看到一栏Bogomips,第一反应是拿它和CPU主频做对比,或者用不同服务器的Bogomips数值直接比高低,这种做法在行业共识中被认为是不准确的。
Bogomips的真实身份:内核的“节拍器”
Bogomips最初是功能,而非性能指标,Linus Torvalds在开发早期内核时,需要一种方法在内核启动时校准延时循环,Bogomips就是通过运行一个固定的空循环,然后计算CPU在单位时间内能跑多少轮得出的数值,它的本质是测试内核的忙等待速度,而不是应用层的性能。
- 该数值由内核计算,与CPU频率、缓存、架构都有关联。
- 它直接决定了内核内部某些延时函数的刻度精度。
- 数值越高,通常意味着CPU的“内核运算”速度越快,但不代表浮点能力或缓存吞吐量。
为什么不能直接对比Bogomips数值?
环境不同,结果没有可比性。
如果你用两台配置完全一样、但运行不同Linux发行版的服务器,Bogomips数值可能会不同,因为该数值受内核版本、编译选项、时钟源等因素影响。
- 同一台机器,安装CentOS 7和Ubuntu 22.04,Bogomips可能差出几十个单位。
- 虚拟化环境下,Bogomips会显著降低,因为虚拟机无法直接访问物理CPU的硬件时钟周期。
- 动态频率调整开启时,Bogomips是在启动时那个瞬间的频率下计算出来的,后续频率变化 不会 更新该数值。
Bogomips值高好还是低好,这个问题只在你自己的同一台机器、同一内核版本下才有参考意义。 跨机器对比Bogomips,不算一个严谨的做法。
如何查看和理解Bogomips单位?
Bogomips的单位是“BogoMIPS”,即“Bogus MIPS”的缩写,直译就是“伪MIPS”,它试图模拟每秒处理百万条指令的能力,但并非真实指令。
常用查看命令
获取Bogomips信息非常简单,以下命令是每个Linux管理员都应掌握的。
- cat /proc/cpuinfo | grep bogomips
这是最直接的方法,能列出所有CPU核心的Bogomips数值。 - lscpu
这个命令更人性化,会以表格形式展示CPU架构信息,包括Bogomips。 - dmesg | grep Bogomips
查看内核启动日志中的校准信息,能看到计算的真实过程。
数值范围说明
- 物理机环境下,现代x86_64处理器Bogomips通常在 4000到6000 之间。
- 虚拟机环境下,该数值通常远低于物理机,可能在 2000以下,这属于正常现象。
- ARM架构设备,由于体系结构差异,Bogomips数值普遍偏低,与x86对比没有意义。
linux bogomips怎么算的?动动手做个校准
要是你想亲手验证一下,Linux早就提供了用户态校准工具,这比直接看数值更直观,也能让你理解它的计算逻辑。
使用内置工具进行校准
Linux内核在用户空间提供了一个Bogomips校准程序,路径是 /usr/bin/lpeng 或 nbench,但更标准的方法是使用 hackbench 或 stress 工具间接观察,不过最“正统”的体验是下载编译内核源码中的 calibrate.c 模块。
实操步骤(以Ubuntu/Debian为例):
- 安装必要的编译环境:
apt install build-essential - 下载内核源码:
apt install linux-source - 解压后找到
arch/x86/kernel/calibrate.c文件。 - 查看里面的
calibrate_delay_direct()函数,这就是Bogomips的计算核心。
这个函数会执行一个循环,直到系统时钟走完一个固定的时间片,然后根据循环次数换算成Bogomips。它不依赖任何外部基准测试,完全是内核自包含的。
计算逻辑的简化说明
- 内核记录一个时间点。
- 内核执行一个简单的
for (i = 0; i < 0x10000000; i++);循环。 - 内核记录循环结束后的时间点。
- 用循环次数除以时间差,再乘以一个换算系数,得到Bogomips。
这解释了为什么Bogomips更多反映的是纯整数运算的循环速度,与内存带宽、磁盘I/O、浮点运算完全无关。
Bogomips和CPU频率的真实关系
很多用户把Bogomips和CPU主频直接挂钩,认为频率翻倍,Bogomips也翻倍。这个观点不完全正确。
在不同频率下的表现
- 第一代Core i5处理器:基础频率2.67GHz,开启睿频后3.2GHz,Bogomips数值在启动时是固定的,比如5320。
- 第四代Haswell处理器:同样是2.67GHz,Bogomips可能达到5380。
为什么会有差异?
Bogomips的计算时间非常短,通常发生在内核启动初期,此时CPU的电源管理策略尚未完全生效,频率可能处于基础状态,也可能已进入睿频。加上内核版本的优化,循环执行效率也在变化,所以Bogomips和CPU频率并不是线性映射关系。
当Bogomips高的时候,意味着什么?
- 在某些老旧内核或特定硬件上,Bogomips偏高确实能反映CPU的“裸循环速度”快。
- 但在现代CPU中,Bogomips更像是兼容性校验的附属品,业内专家指出,判断服务器性能时,建议直接使用
sysbench、unixbench或stress-ng做压力测试,而不是依赖Bogomips。
虚拟化场景下的Bogomips:一个常见误区
假设你买了云服务器,比如酷番云轻量应用服务器或简米云ECS,通过 cat /proc/cpuinfo 看到Bogomips只有400,而你的物理机是5000,于是怀疑云服务商“偷性能”,这是最典型的误区。
虚拟化对Bogomips的影响
- KVM / Xen 虚拟化:Bogomips数值会被大幅降低,因为虚拟机内核的延时循环依赖虚拟化时钟,而不是真实硬件时钟。
- 容器化环境(Docker/LXC):容器共享宿主机内核,Bogomips数值通常与宿主机一致,不会降低。
- VMware ESXi:默认情况下,VMware会尝试暴露真实的物理CPU信息,但Bogomips仍然可能偏低。
判断标准:
不在于Bogomips数值高低,而在于你是否能通过该数值判断性能瓶颈,在虚拟化环境中,Bogomips数值低是正常的,不能用它来投诉云服务商,真正要看的指标是 CPU steal time,通过 vmstat 1 或 top 查看 %st 一列。
云服务器选型时的参考
如果要在简米云上选择通用型ECS还是计算型ECS,不要看Bogomips,而要看实例规格中的“CPU时钟频率”和“睿频频率”,比如计算型实例通常会明确标注基准频率和睿频上限,而通用型实例可能共享更多的资源。
Q&A:关于Linux Bogomips的常见疑问
为什么我的树莓派Bogomips只有800,而服务器是6000?
树莓派用的是ARM架构,Bogomips的计算逻辑在ARM上效率不同,且内核版本通常较新,优化了循环代码,加上ARM单核性能本就不如x86,数值低并不是故障。只要系统运行稳定,没有明显的调度延迟,Bogomips数值低无需担心。
能否通过修改内核参数来提高Bogomips?
不能,Bogomips是内核启动时通过硬件校准自动计算的,不受任何sysctl或内核引导参数直接影响,你无法通过 ech 命令写入该数值,如果你在BIOS中关闭了CPU的节能选项(如C-States),让CPU始终以最高频率启动,Bogomips可能会略有提升,但这属于变相调整,而非直接修改。
监控Bogomips能发现CPU性能退化吗?
部分情况下可以,假设你有一台物理机,运行多年后重装系统,发现Bogomips从5000降到了3000,这可能是内核版本变化导致的,但也可能是硬件故障的征兆,比如电源管理芯片异常、时钟发生器不稳定。但更可靠的做法是通过stress-ng测试CPU的稳定性,同时监控温度与频率,比单纯看Bogomips更准确。
Bogomips是Linux内核的“老伙计”,见证了几十年的发展,但在现代服务器运维中,它的诊断价值有限。 真正需要关注的是CPU使用率、负载均值、上下文切换和缓存命中率,Bogomips作为入门参考可以,但不要用它来做性能决策。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/509238.html
![[Linux] Linux 查看硬件配置(screenfetch;lscpu;lsmem;hostnamectl;dmidecode)](https://i2.hdslb.com/bfs/archive/57c8f9cf490321781e3018a534dd90f6e65d5e45.jpg)


