Page suivantePage précédenteTable des matières

2. Que sont les BogoMips ?

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 :

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 \;


Page suivantePage précédenteTable des matières