BogoMips
# BogoMips

BogoMips (dai termini bogus dal significato di fasullo, inutile, e MIPS, million instructions per second) è un indice informale della velocità di una CPU, ideato da Linus Torvalds e calcolato dal kernel Linux durante la fase di boot, con lo scopo di calibrare i loop di temporizzazione interni (busy-loop).

Viene determinato misurando il tempo impiegato per eseguire un ciclo di istruzioni predefinito.

Spesso è goliardicamente definita come «milioni di volte per secondo in cui un processore può non fare assolutamente nulla». Torvalds ha coniato quest'accezione ironica per sottolineare l'inutilità dei BogoMIPS come misura comparativa delle prestazioni dei differenti sistemi.

Il valore calcolato per il proprio sistema viene mostrato a video durante le prime fasi di avvio del kernel. Il valore viene memorizzato nel file cpuinfo, parte dello pseudo-file system procfs e può essere richiamato aprendo in lettura il file, situato in /proc.

La seguente tabella permette di calcolare in modo approssimativo i BogoMips per differenti microprocessori:

| Sistema | Calcolo | Rapporto |
| - | - | - |
| Intel 8088 | clock * 0.004 | 0.02 |
| Intel/AMD 386SX | clock * 0.14 | 0.8 |
| Intel/AMD 386DX | clock * 0.18 | 1 (per definizione) |
| 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 |
| 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 |
| Mips R4600 | clock * 1.00 | 5.6 |
| Intel Itanium 2 | clock * 1.49 | 8.3 |
| Alpha 21264 | clock * 1.99 | 11.1 |
| Centaur VIA | 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 |
| UltraSparc II | clock * 2.00 | 11.1 |
| Pentium MMX | clock * 2.00 | 11.1 |
| Pentium 4 | clock * 2.00 | 11.1 |
| Centaur C6-2 | clock * 2.00 | 11.1 |
| PowerPC 604/604e/750 | clock * 2.00 | 11.1 |
| Motorola 68060 | clock * 2.01 | 11.2 |
| Intel Xeon (hyper-threading) | clock * 3.97 | 22.1 |
| Hitachi SH-4 | clock * 1 | |
| IBM S390 | non ancora disponibile | |
| Intel ARM | non ancora disponibile | |
| Broadcom BCM2708 (raspberry pi) | clock*0.9985 | |
| MIPS 34Kc (Mediatek MT751x) | clock * 0.665 | |

Poiché l'implementazione della cache è cambiata per alcune CPU (soprattutto Intel) durante l'evoluzione del kernel, possono essere validi rapporti diversi per il calcolo relativo a queste CPU. Inoltre l'algoritmo di calcolo non sfrutta pienamente il parallelismo di processori quali ad esempio il Pentium 4 e l'Alpha 21164 ed, in genere, i processori superscalari.

Se il valore calcolato per il proprio sistema dovesse differire significativamente dal valore calcolato con la tabella, è possibile che la cache sia male configurata o disattivata, oppure che il clock del processore sia ridotto rispetto al valore nominale (nei PC in uso fino agli anni '90 esisteva un tasto turbo con cui era possibile ridurre la velocità di clock).

