D'après Lars Wirzenius wirzeniu@kruuna.Helsinki.fi,
courrier du 9 septembre 1993, expliquant ce que sont les BogoMips, et
quelques informations complémentaires de Win van Dorst :
MIPS est l'abréviation de Millions d'Instructions Par Seconde.
C'est une façon de mesurer la vitesse de traitement d'un programme
par un microprocesseur. Comme la plupart des unités de ce type,
on l'utilise le plus souvent abusivement (il est très difficile
de comparer correctement les vitesses exprimées en MIPS de
différents types de microprocesseurs).
Les BogoMips sont une invention de Linus. Le noyau (ou peut-être un pilote de
périphériques ?) a besoin d'une boucle d'attente (le
temps d'attente est trop court ou requiert une trop grande précision
pour utiliser une autre méthode qu'une attente active) qu'il est
nécessaire de calibrer en fonction de la vitesse du processeur sur
lequel Linux s'exécute. Ainsi le noyau mesure lors du
démarrage la vitesse d'exécution d'une boucle d'instructions
déterminée.
Bogo vient de l'américain bogus, qui signifie
faux, bidon. Une vitesse en BogoMips donne donc une indication de la
vitesse d'un microprocesseur, mais l'unité est définie
trop peu scientifiquement pour que l'on puisse l'appeler autrement
qu'un BogoMips.
Les raisons (il y en a deux) pour lesquelles la mesure de cette
vitesse est affichée lors du démarrage du noyau
sont :
- cela peut servir pour le débogage et pour vérifier
que le cache et le bouton turbo d'une machine sont bien actifs ;
- Linus ne se lasse pas de lire les messages de gens
paniqués à ce propos dans les News.
L'algorithme C qui calcule le nombre de BogoMips se trouve dans le
fichier source /usr/src/linux/init/main.c, et c'est la
variable du noyau associée loops_per_sec (boucles par
seconde) qui est utilisée par de nombreux pilotes pour des besoins
plus concrets. La fonction d'attente à proprement parler udelay() est
en assembleur, c'est pourquoi chaque portage en a sa propre définition dans
/include/asm/delay.h.
La variable loops_per_sec et la fonction udelay() sont utilisés dans
de nombreux drivers, regarder :
cd /usr/src/linux #où la ou les sources sont stockées
find . -name '*.[hcS]' -exec fgrep loops_per_sec {} /dev/null \;
find . -name '*.[hcS]' -exec fgrep udelay {} /dev/null \;
|