Következő Előző Tartalom

2. Gyakran ismétlődő kérdések a BogoMIPS-ről

2.1 Mi az a BogoMIPS

A következő információk Lars Wirzenius wirzeniu@kruuna.Helsinki.FI 1993. szeptember 9-én írott leveléből valók, amelyben elmegyarázza a BogoMIPS fogalmát. További kiegészítések olvashatóak Alessandro Rubinitől rubini@norgana.systemy.it és Wim van Dorsttól.

``A MIPS a Millió Utasítás Másodpercenként rövidítése. Ez a számítógép számítási sebességének mértékegysége. Ezzel gyakrabban élnek vissza, mint amennyiszer helyesen használják, de ez a legtöbb ilyen mértékegységgel így van. Nagyon nehéz igazságosan összemérni különböző számítógépek MIPS értékeit.
A BogoMIPS-et Linus találta ki. A kernelnek (vagy egy eszközmeghajtónak?) szüksége van egy időzítő ciklusra (egy rövid de pontos időtartamra, amennyit várakozik bizonyos helyzetekben), amelyet a processzor sebességéből kell kiszámítani. Éppen ezért a kernel a rendszerinduláskor megméri, hogy egy bizonyos ciklus mennyi idő alatt fut le az adott számítógépen. A ``Bogo'' szó az angol ``bogus'' szóból ered, ami az jelenti: hamis, nem igazi. Ezért a BogoMIPS érték következtetni enged a processzor sebességére, de annyira áltudományos, hogy csak a BogoMIPS kifejezés illik rá.
Két oka van annak, hogy ez az érték megjelenik a képernyőn a rendszerinduláskor: a) elég jó hibakereséshez és annak ellenőrzésére, hogy a számítógépben be van-e kapcsolva a cache és a turbó gomb; b) Linus szeret kuncogni a hírcsoportokba írkáló megzavarodott embereken.''

A BogoMIPS-et az /usr/src/linux/init/main.c levő egyszerű algoritmussal határozza meg a kernel, és a loops_per_sec változóba teszi, amit egy csomó eszközmeghajtó használ a későbbiekben komoly dolgokra. A tulajdonképpeni udelay() függvény assemly nyelven megírva, ezért minden architektúrára más a definíciója az /include/asm/delay.h-ban. A loops_per_sec változót és a udelay() függvényt sok meghajtóprogram használja. Nézd meg:

cd /usr/src/linux #vagy ahol a kernel forrását tartod
find . -name '*.[hcS]' -exec fgrep loops_per_sec {} /dev/null \; 
find . -name '*.[hcS]' -exec fgrep udelay {} /dev/null \;

2.2 Hogy becsüljük meg, hogy mennyi lenne a helyes BogoMIPS érték?

Ian Jackson ijackson@nyx.cs.du.edu és Przmek Klosowski kezdeményezése alapján, általam jelentősen kibővítve és frissítve itt olvashatod a hozzávetőleges útmutatót a BogoMIPS kiszámításához:

Rendszer                      BogoMIPS         Összehasonlítás 
Intel 8088                  clock * 0.004         0.02 
Intel/AMD 386SX             clock * 0.14          0.8 
Intel/AMD 386DX             clock * 0.18          1 (definíció) 
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
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            clock * 1.00          5.6
Intel Celeron               clock * 1.00          5.6
Mips R4600                  clock * 1.00          5.6 
Alpha 21264                 clock * 1.99         11.1
AMD K5/K6/K6-2              clock * 2.00         11.1
UltraSparc II               clock * 2.00         11.1
Pentium MMX                 clock * 2.00         11.1 
PowerPC 604                 clock * 2.00         11.1
Motorola 68060              clock * 2.01         11.2 

Megjegyzendő, hogy a BogoMIPS-kiszámító ciklus nem használja ki teljesen sok processzor párhuzamos feldolgozási képességeit. Ilyen processzorok pl. az Intel Pentium és az Alpha 21164.

Megjegyzendő, hogy a BogoMIPS-kiszámító ciklus a nem Intel processzorokra hasonló, de nem ugyanaz.

2.3 Hogy határozzuk meg az aktuális BogoMIPS értéket?

Három módja van a BogoMIPS meghatározásának.

  1. Megnézhetjük a /proc/cpuinfo-t, pl. a `cat /proc/cpuinfo' parancs kiadásával.
  2. Megnézhetjük a rendszernaplót, hogy mit írodott bele a rendszerinduláskor (ha szükséges közvetlenül megszerezhetjük ezt az információt a dmesg vagy a syslogk paranccsal.
  3. Használjuk az önálló bogomips programot.

Egy lehetséges alternatíva, az önálló BogoMIPS program használata, amelyet akkor is használhatunk, ha nem Linux fut a rendszerünkön. Idézet Jeff Tranter jeff_tranter@mitel.com `readme' fájljából:

``Unalmas folyton újraindítani a gépedet, hogy megtudd az aznapi BogoMIPS értéket? [...] A `BogoMIPS' egy önálló program, amely leméri a gép sebességét a világon egyik legjobban ismert módszerrel. Ugyanazt a kódot használja, mint a Linux kernel rendszerindításkor, de felhasználói programként fut. [...] A program 1.3-as verziója hordozható, és minden olyan rendszeren képes futni, amelyen van ANSI C fordító és programkönyvtár.''

Megjegyzendő, hogy a rendszer leterheltsége miatt az önálló program által szolgáltatott érték alacsonyabb lehet, mint a lenti táblázatokban megadottak. Ez természetes, hiszen az önálló program nem adhat ugyanakkora értéket, mint a kernel a rendszer indulásakor, mert versenyeznie kell a többi processzel, amelyek vele párhuzamosan futnak a gépen. Éppen ezért csak a rendszer indulásakor érvényes BogoMIPS értékeket adtuk meg a lenti táblázatokban.

Figyelem, a sunsite.unc.edu:/pub/Linux/system/status/bogo-1.2.tar.gz fájl tartalmazza a legfrissebb 1.3-as verziót (nem elírás!), de ez is elég elavult.

2.4 Eltérések a BogoMIPS értékekben

Linus Torvalds, torvalds@cc.helsinki.fi így magyarázta az a comp.os.linux.development hírcsoportban 1994. április 28-án az egyesek által esetleg tapasztalt eltéréseket a BogoMIPS értékekben:

``A BogoMIPS-et kiszámító ciklus `kvantált', úgyhogy valószínűleg mindig egzaktul ugyanazt a számot fogod kapni. Csak akkor kapsz különböző számokat, ha a sebesség éppen a határon van, és így a kis eltérések (különböző idejű megszakítások, stb.) egyik vagy másik értéket adják végeredményül.''

Ha a kernelt nem kifejezetten arra a processzorra fordították, amelyen fut, akkor szintén lehetnek (akár egész nagy) eltérések a BogoMIPS értékekben, főleg a hibás alingment miatt. A probléma csak a különféle x86 (Intel és klónjai) processzorokon jelentkezik. A hiba szerencsére nagyon egyszerűen elhárítható: újra kell fordítani a kernelt az adott processzorra.

Megjegyzendő, hogy a közhiedelemmel ellentétben a BogoMIPS algoritmus NEM változik jelentősen a kernel fejlődése során.

2.5 BogoMIPS ... failed

Ez a fejezet számos a hálózaton és magánlevélben feltett kérdés alapján készült. Lily lbliao@alumni.caltech.edu, és Pierre Frenkiel frenkiel@cdfap2.in2p3.fr ezt kérdezték 1995. márciusában:

``Amikor elindítom a Linuxot, ezt az üzenetet kapom:
      Calibrating delay loop.. ok - 23.96 BogoMIPS
      failed
Miért és hol romlott el a késleltető ciklus kiszámítása?''

Nem romlott el. Ha elromlott volna, akkor ez lenne az üzenet:

      Calibrating delay loop.. failed

Valószínűleg egy eszközmeghajtó hibás működéséből adódik az üzenet. Rögtön a BogoMIPS kiszámítása után az összes eszközmeghajtó inicializálódik. Először a SCSI eszközök, aztán a hálózati eszközök, stb. Minden hibát jelez a rendszer. Említésre méltó az AHA152x meghajtója. A hibás meghajtóprogramok (és nem a hibás BogoMIPS számítás) további kísérőjelenségei a rendszerösszeomlás, hosszú várakozás, teljes lefagyás.

A Linux 1.2 óta sokat fejlődött a hibaüzenetek érthetősége, érdemes minimum erre a verzióra frissíteni, így megállapítható, hogy melyik meghajtóprogram hibázott.

2.6 Mi a helyzet a klón processzorokkal? (Cyrix, NexGen, AMD, stb.)

A Cyrix 486-szerű processzorainál szoftveresen kell engedélyezni a cache használatát, néha BogoBoost szoftver néven hivatkoznak erre. A Cyrix 5x86 és 6x86 processzorok BogoMIPS értekei drsztikusan megnőnek, ha engedélyezzük a BIOS-ban a `branch-prediction'-t (elágazás előrejelzés). Megjegyzendő, hogy a teljesítménynövekedés elenyésző lesz. Több csomag is van a Cyrix processzorok beállítására, például a bogoboost folt, a cx5x86mod és a set6x86. Mindegyik letölthető a a szokásos helyekről. Az a tapasztalat, hogy a Cyrix 6x86 processzor jobban teljesít, ha kernelt 486-ra optimalizálják a Pentiumra optimalizálás helyett.

A NexGen Nx586 jelű felturbózott 386-os processzorai a 386-szerű processzoroknál vannak felsorolva, mert az a tény, hogy a Pentium alapú gépekkel összemérhető teljesítményt nyújtanak, nem érdekes a BogoMIPS szempontjából.

Az AMD 5x86, másnéven az AMD 486DX5, nem más, mint egy 33 MHz-et négyszerező 486-os processzor. Teljesen beleillik a 486-osok sorába. Az AMD K5 és K6 Pentium-szerű processzorok, a saját BogoMIPS szorzóikkal.

2.7 Miért érdekes a BogoMIPS?

Hadd jegyezzem meg, hogy csak két oka van annak, hogy érdemes a Linux által a rendszer indításakor megadott BogoMIPS értékkel foglalkozni:

  1. Vajon az érték a processzornak megfelelő-e? (Típus, órajel, belső cache.) Sok processzor hibásan van beállítva, azaz
  2. A te géped gyorsabb, vagy az enyém? Természetesen ez teljesen hibás, megbízhatatlan, megalapozatlan és semmi értelme, de ez minden sebességmérő programról elmondható. Tehát miért ne használjuk? Az hogy lényegében butaság, soha nem fékezte meg az embereket a sebességmérő programok használatában, ugye? :-)

Megjegyzendő, hogy sokkal komolyabb sebességmérő módszereket ismertet André D. Balsa a Linux Benchmarking Howto-ban.


Következő Előző Tartalom