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 \;
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.
Három módja van a BogoMIPS meghatározásának.
/proc/cpuinfo
-t, pl.
a `cat /proc/cpuinfo
' parancs kiadásával.dmesg
vagy a syslogk
paranccsal.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.
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.
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 failedMié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.
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.
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:
Megjegyzendő, hogy sokkal komolyabb sebességmérő módszereket ismertet André D. Balsa a Linux Benchmarking Howto-ban.