BogoMips (from "bogus" and MIPS) is a crude measurement of CPU speed made by the Linux kernel when it boots to calibrate an internal busy-loop. An often-quoted definition of the term is "the number of million times per second a processor can do absolutely nothing".
BogoMips is a value that can be used to verify whether the processor in question is in the proper range of similar processors, i.e. BogoMips represents a processor's clock frequency as well as the potentially present CPU cache. It is not usable for performance comparisons among different CPUs.
History
In 1993, Lars Wirzenius posted a Usenet message explaining the reasons for its introduction in the Linux kernel on comp.os.linux:
: [...]
: MIPS is short for Millions of Instructions Per Second. It is a measure for the computation speed of a processor. Like most such measures, it is more often abused than used properly (it is very difficult to justly compare MIPS for different kinds of computers).
: BogoMips are Linus's own invention. The linux kernel version 0.99.11 (dated 11 July 1993) needed a timing loop (the time is too short and/or needs to be too exact for a non-busy-loop method of waiting), which must be calibrated to the processor speed of the machine. Hence, the kernel measures at boot time how fast a certain kind of busy loop runs on a computer. "Bogo" comes from "bogus", i.e, something which is a fake. Hence, the BogoMips value gives some indication of the processor speed, but it is way too unscientific to be called anything but BogoMips.
: The reasons (there are two) it is printed during boot-up is that a) it is slightly useful for debugging and for checking that the computer[’]s caches and turbo button work, and b) Linus loves to chuckle when he sees confused people on the news.
: [...]
Proper BogoMips ratings
As a very approximate guide, the BogoMips can be pre-calculated by the following table. The given rating is typical for that CPU with the then current and applicable Linux version. The index is the ratio of "BogoMips per clock speed" for any CPU to the same for an Intel 386DX CPU, for comparison purposes.
{| class="sortable wikitable"
!System!!Rating!!Index
|-
|Intel 8088 ||clock × 0.004||0.02
|-
|Intel/AMD 386SX ||clock × 0.14||0.8
|-
|Intel/AMD 386DX ||clock × 0.18||1 (definition)
|-
|Motorola 68030||clock × 0.25||1.4
|-
|Cyrix/IBM 486||clock × 0.34||1.8
|-
|Intel Pentium||clock × 0.40||2.2
|-
|Intel 486 ||clock × 0.50||2.8
|-
|AMD 5x86||clock × 0.50||2.8
|-
|MIPS R4000/R4400||clock × 0.50||2.8
|-
|ARM9||clock × 0.50||2.8
|-
|Motorola 68040||clock × 0.67||3.7
|-
|PowerPC 603||clock × 0.67||3.7
|-
|Intel StrongARM||clock × 0.66||3.7
|-
|NexGen Nx586||clock × 0.75||4.2
|-
|PowerPC 601||clock × 0.84||4.7
|-
|Alpha 21064/21064A||clock × 0.99||5.5
|-
|Alpha 21066/21066A||clock × 0.99||5.5
|-
|Alpha 21164/21164A||clock × 0.99||5.5
|-
|Intel Pentium Pro||clock × 0.99||5.5
|-
|Cyrix 5x86/6x86 ||clock × 1.00||5.6
|-
|Intel Pentium II/III||clock × 1.00||5.6
|-
|AMD K7/Athlon||clock × 1.00||5.6
|-
|Intel Celeron||clock × 1.00||5.6
|-
|Intel Itanium||clock × 1.00||5.6
|-
|R4600||clock × 1.00||5.6
|-
|Hitachi SH-4||clock × 1.00||5.6
|-
|Raspberry Pi (Model B)||clock × 1.00||5.6
|-
|Intel Itanium 2||clock × 1.49||8.3
|-
|Alpha 21264||clock × 1.99||11.1
|-
|VIA Centaur||clock × 1.99||11.1
|-
|AMD K5/K6/K6-2/K6-III||clock × 2.00||11.1
|-
|AMD Duron/Athlon XP||clock × 2.00||11.1
|-
|AMD Sempron||clock × 2.00||11.1
|-
|UltraSparc II||clock × 2.00||11.1
|-
|Intel Pentium MMX||clock × 2.00||11.1
|-
|Intel Pentium 4||clock × 2.00||11.1
|-
|Intel Pentium M||clock × 2.00||11.1
|-
|Intel Core Duo||clock × 2.00||11.1
|-
|Intel Core 2 Duo||clock × 2.00||11.1
|-
|Intel Atom N455||clock × 2.00||11.1
|-
|Centaur C6-2||clock × 2.00||11.1
|-
|PowerPC 604/604e/750||clock × 2.00||11.1
|-
|Intel Pentium III Coppermine||clock × 2.00||11.1
|-
|Intel Pentium III Xeon||clock × 2.00||11.1
|-
|Motorola 68060||clock × 2.00||11.1
|-
|Intel Xeon MP (32-bit) (hyper-threading)||clock × 3.97||22.1
|}
With the 2.2.14 Linux kernel, a caching setting of the CPU state was moved from behind to before the BogoMips calculation. Although the BogoMips algorithm itself wasn't changed, from that kernel onward the BogoMips rating for then current Pentium CPUs was twice that of the rating before the change. The changed BogoMips outcome had no effect on real processor performance.
In a shell, BogoMips can be easily obtained by searching the cpuinfo file: Timer-based delays are more robust on systems that use frequency scaling to dynamically adjust the processor's speed at runtime, as <code>loops_per_jiffies</code> values may not necessarily scale linearly. Also, since the timer frequency is known in advance, no calibration is needed at boot time.
One side effect of this change is that the BogoMIPS value will reflect the timer frequency, not the CPU's core frequency. Typically the timer frequency is much lower than the processor's maximum frequency, and some users may be surprised to see an unusually low BogoMIPS value when comparing against systems that use traditional busy-wait loops.
See also
- Turbo button
- Instructions per second
References
External links
- BogoMips Mini-Howto, V38
- Sources of classical standalone benchmark
