Quoted from the Internet, origin unknown but brought to the attention
by Eric S Raymond esr@thyrsus.com, and Geoff Mackenzie
freon@dialstart.net, there is an humourously illustrative
definition of BogoMips as ''the number of million times per second
a processor can do absolutely nothing.''
On a more precise basis, from Lars Wirzenius'
wirzeniu@kruuna.Helsinki.FI mail of 9 September 1993, explaining
Bogomips, with additional detailed information by Alessandro Rubini,
rubini@norgana.systemy.it, and by Wim van Dorst:
`MIPS is short for Millions of Instructions Per Second.
It is a measure for the computation speed of a program.
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 invention. The kernel (or was it a
device driver?) needs 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 computers caches and turbo button work,
and b) Linus loves to chuckle when he sees confused
people on the news.'
BogoMips are being determined in /usr/src/linux/init/main.c
(simple C algorithm), and the pertaining kernel
variable loops_per_sec is used in several drivers for more
serious purpose. The actual delay function udelay() is in
assembler, and therefore each port has its own definition in
/include/asm/delay.h. The loops_per_sec variable
and the udelay() function are used in numerous drivers,
see:
cd /usr/src/linux #or where else source is located
find . -name '*.[hcS]' -exec fgrep loops_per_sec {} /dev/null \;
find . -name '*.[hcS]' -exec fgrep udelay {} /dev/null \;
The BogoMips calculation loop for the non Intel CPUs is similar
but not the same, because it is programmed in another assembler
language. BogoMips is however the only portable way over the various
CPUs (Intel-type and non Intel-type) for getting an indication of
the CPU speed. Even CPU clock speed is not available on all CPUs.
From a initiative by Ian Jackson, ijackson@nyx.cs.du.edu, and
Przemek Klosowski, much updated and expanded by Wim van Dorst for
current data, as listed below:
As a very approximate guide, the BogoMips can be calculated by:
Note that the BogoMips calculation loop does not take full
advantage of the parallelism of various processors, such
as the Intel Pentium and the Alpha 21164.
There are three methods to determine the current BogoMips, viz.
looking in /proc/cpuinfo, e.g., with
`cat /proc/cpuinfo`. This method is highly
preferred above the alternatives.
looking in the syslog output to see what was printed there
during booting (if necessary retrieving the information
explicitly with dmesg or syslogk). This alternative gives
accurate information but is more work.
using the standalone bogomips program. This is
only recommended for non-Linux system, for reasons pointed
out below.
A non-determinative alternative, which is also applicable for non-Linux
systems such as Crays and so, may be the standalone BogoMips
program. From the readme file by Jeff Tranter, jeff_tranter@mitel.com:
`Tired of rebooting your system so you can see how many
BogoMips it's running at today? [...] "Bogomips" is a
standalone program that displays your system performance
using one of the world's most recognized benchmarks. It
uses the same code that is used in the Linux kernel while
booting, but runs as a user program. [...] Version 1.3 of
BogoMips is now portable and should run on any system
that supports an ANSI C compiler and library.'
Note that due to system load values calculated with the
standalone program on Linux systems may be lower than registered in the
list below. Intrinsically the standalone cannot give precisely
similar information to the boot sequence BogoMips, since system
load will compete with this program run by an ordinary user.
Therefore only boot sequence BogoMips ratings are listed below.
Be aware that the file
sunsite.unc.edu:/pub/Linux/system/status/bogo-1.2.tar.gz/
contains the latest version 1.3 (sic), which is yet rather outdated.
Nonetheless, due to its good portability, it should compile and run
on nearly every system with a C compiler.
From Linus Torvalds, torvalds@cc.helsinki.fi, explaining about the
variation one may see in the BogoMips rating, in c.o.l.development,
at 28 April 2025
`The BogoMips calculation loop is "quantizised", so you're
most likely to get the exact same number all the time.
You usually will get different numbers only if the speed
is just on the "edge", when small variations (different
time for interrupt ticks etc) will make it jump from one
value to the other.'
If a kernel is not compiled specifically for the pertaining CPU,
also some (even large) variations of the BogoMips ratings can occur,
mainly due to erroneous alignment. This problem apparently only occurs
on the various x86 CPUs (Intel and clones). Fortunately it can easily
be solved: recompile the kernel specifically for your CPU.
No, the BogoMips algorithm, contrarily to popular believe, did
NOT change over the various kernel versions. Furthermore, it is
intrinsically the same for all CPUs of all makes.
What did change in kernel version 2.2.14 is the CPU state
setting just before the BogoMips calculation. This affects the
BogoMips rating for all Intel and AMD Pentium variations, resulting
in approximately 2*clock, where these were not 2*clock. The
entries based on these upgraded kernel versions are marked
in the list below with an initial *.
Suggested by various questions on the net and private mail,
e.g., by Lily, lbliao@alumni.caltech.edu, and by Pierre Frenkiel,
frenkiel@cdfap2.in2p3.fr. In March 1995 they asked:
`When I boot Linux I get the message:
Calibrating delay loop.. ok - 23.96 BogoMips
failed
Where/why has the calibration delay loop failed?'
It didn't fail. If it had failed the text would have been
Calibrating delay loop.. failed
What likely did fail was a driver for some gadget which
you may not have in your machine. Just after calculating
the BogoMips rating all device drivers are initiated.
First the SCSI devices, then Net devices, etc. Any
failure is duly reported. Noteworthy is the AHA152x
driver. Other effects of failing drivers (and not of
failing BogoMips calculations) are systems crashes, long
waits, and complete system locks, somewhere close to
(just before or just after) outputting the ok - xx.xx BogoMips
text.
Since Linux 1.2 many error messages have improved, so
upgrade to at least that version to find out which
particular driver it is that is failing. Also recompile
the kernel to only include the drivers that are actually
needed for your hardware configuration.
Cyrix 486-like CPUs need cache enabling software, sometimes
referred to as BogoBoost software. Cyrix 5x86 and 6x86 CPUs may
have their BogoMips improved drastically by branch-prediction
(BIOS option). Note that the performance improvement may be
marginal. There are several packages available for adjusting
Cyrix CPUs, such as the BogoBoost patch, cx5x86mod, and set6x86,
all from the normal archives, in obvious places. It is reported
the Cyrix 6x86 CPUs may give better performance when the kernel is
compiled with 486-optimization, instead Pentium-optimization.
NexGen 386-enhanced CPUs, marked as Nx586, are listed as
386-like, since the fact that they are performing like
Pentium machines is not relevant to BogoMips.
AMD 5x86, also denoted as AMD 486DX5, are quadrupled 486/33
machines. They are fully in line with other 486 CPUs. The AMD
K5 and the K6 are Pentium-like CPUs, with their own BogoMips multipliers.
Let me add that there are only two reasons for paying attention
to the BogoMips rating that is presented on booting Linux:
To see whether it is in the proper range for the particular
processor, its clock frequency, and the potentially present
cache. Many CPUs are prone to faulty setups of
memory cache setting (write-back is wrong for BogoMips, often
reported lower than 5; write-through is ok)
turbo-buttons (should be ON)
BIOS-software emulated fake cache (change it for real cache)
similar cache and clock related things, sometimes
also BIOS-software related
To see whether your system is faster than mine. Of course this
is completely wrong, unreliable, ill-founded, and utterly
useless, but all benchmarks suffer from this same problem. So
why not use it? This inherent stupidity has never before stopped
people from using benchmarks, has it? :-)
Note that more serious uses for real benchmarking are
addressed in the Linux Benchmarking Howto by André D. Balsa.