Számos szerző hozzájárult a BogoMips-el kapcsolatos tudásom bővítéséhez. Itt szeretnék nekik köszönetet mondani mindezért.
Egy internetről származó (ismeretlen eredetű) humoros meghatározás szerint
– melyre Eric S Raymond esr@thyrsus.com
, és Geoff Mackenzie
freon@dialstart.net
hívta fel figyelmem – a BogoMIPS "az az X milliónyi
időszelet másodpercenként, amely alatt a processzor abszolút semmit sem csinál."
Egy pontosabb megfogalmazás Lars Wirzenius
wirzeniu@kruuna.Helsinki.FI
1993 szeptember 9.-i leveléből,
melyet Alessandro Rubini,
rubini@morgana.systemy.it
, és Wim van Dorst egészített ki:
A MIPS a Million Instructions Per Second (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 a mértékegysége. Gyakrabban élnek vissza, mint ahányszor helyesen használják. (Nagyon nehéz igazságosan összemérni különböző számítógépek MIPS értékeit.)A BogoMIPS Linus találmánya. A kernelnek (vagy egy eszközmeghajtónak?) szüksége van egy időzítő ciklusra (egy kellően rövid, de pontos időtartamra, amennyit várakozik bizonyos helyzetekben), amelyet a processzor sebessége alapján kell meghatározni. 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" az angol "bogus" szóból ered, melynek jelentése "hamis", "nem igazi". Vagyis 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 okból jelenik meg ez az érték a képernyőn rendszerinduláskor; a) jól használható annak ellenőrzésére, hogy a gépben be van-e kapcsolva a cache és a turbó gomb; b) Linus szeret kuncogni a hírcsoportokba irkáló megzavarodott embereken.
A BogoMIPS a /usr/src/linux/init/main.c
fájlban található
(egyszerű C függvény, nagyszerű példa a lebegőpontos számításra
egy mindenütt egész számokkal dolgozó kernelben). Az eredményt a
loops_per_sec
változóba teszi, ezt számos eszközmeghajtó használja
komoly dolgokra. A tulajdonképpeni udelay()
késleltető függvény
assemly nyelven megírva, ezért minden architektúrán más a meghatározása az
/include/asm/delay.h
fájlban. A loops_per_sec
változót ,
és az udelay()
függvényt számos meghajtóprogram használja. Te is megkeresheted ezeket:
cd /usr/src/linux #vagy ahol a kernel forrása van find . -name '*.[hcS]' -exec fgrep loops_per_sec {} /dev/null \; find . -name '*.[hcS]' -exec fgrep udelay {} /dev/null \;
Nem Intel processzoroknál a számítási ciklus hasonló, de nem ugyanaz, mivel másik assembler nyelven lett megírva. Mindezek ellenére is a BogoMIPS az egyetlen különféle processzorok esetén használható mérőszám, ezek sebességének megbecslésére. Nem minden CPU esetén kapható meg közvetlenül annak sebessége.
Ian Jackson, ijackson@nyx.cs.du.edu
, és
Przemek Klosowski kezdeményezése alapján, Wim van Dorst által
jelentősen kibővítve és az adatokat frissítve íme a
hozzávetőleges útmutató 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 (alapérték) 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 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 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 (hyperthreading) clock * 3.97 22.1 Hitachi SH-4 nincs elég adat (jelenleg) IBM S390 nincs elég adat (jelenleg) Intel ARM nincs elég adat (jelenleg)
Megjegyezendő, hogy a BogoMIPS értéket kiszámító ciklus sok processzor párhuzamos feldolgozási képességét nem használja ki teljesen, ilyen például az Intel Pentium és az Alpha 21164. Az "Új BogoMIPS algoritmus?" fejezetben olvashatsz erről. Ezért az ilyen processzorok némelyike újabb kernel esetén eltérő értéket adhat.
Három módja van a BogoMIPS meghatározásának:
/proc/cpuinfo
fájlban, például a
"cat /proc/cpuinfo"
paranccsal.
Ez a módszer a legelőnyösebb.Egy kevésbé fontos lehetőség, amely nem linux
rendszer esetében is használható (például Crays) talán egy önállóan
futó BogoMips program. Jelenleg egy karbantartott változata létezik (jelenleg v1.4),
amelyet Darrick Wong
djwong@thibs.menloschool.org
készített. Az eredeti változatot
Jeff Tranter jeff_tranter@mitel.com
írta. Idézet ennek readme fájljából:
"Fárasztó a rendszered újraindítása, hogy megtudd az aznapi BogoMips értéket? [...] A "BogoMips" egy önálló program, amely megmutatja rendszered teljesítményét, a világ egyik legelismertebb módszere segítségével. Ugyanazt a kódot használja, mint a Linux kernel a rendszer indulásakor, de felhasználói programként fut. [...] A program 1.3-as változata hordozható, és minden olyan rendszeren képes futni, amelyen van ANSI C fordító és programozói könyvtár."
Megjegyezendő, 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 elavult. Ezért keresd Darrick programját a
http://thibs.menloschool.org/~djwong/programs/bogomips/
webhelyen.
Mindig készít MSW*nd*ws bináris változatot is.
Linus Torvalds, torvalds@cc.helsinki.fi
, így magyarázta a
comp.os.linux.development hírcsoportban 1994. április 28.-án,
az egyesek által tapasztalt eltérést a BogoMIPS értékekben:
"A BogoMIPS értéket kiszámító ciklus "kvantált", így valószínűleg mindig pontosan ugyanazt az értéket fogja kapni. Általában különböző számokat kapsz, ha a sebesség éppen határértéken van, í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 beállítás 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.
A közhiedelemmel ellentétben a BogoMIPS algoritmus NEM változik jelentősen a kernel fejlődése során. Sőt, valójában mindenféle CPU esetében ugyanaz.
Ami változott 2.2.14-es kerneltől fogva, az a processzor BogoMIPS mérést megelőző állapota. Ez hatással van a folyamatban következő BogoMIPS számításra is. Az összes Intel és AMD Pentium variánsnál ezért körülbelül 2*clock-ra módosul az eredmény, holott valójában nem annyi.
Azokat az adatokat, ahol a mérési eredményt az újabb kernelek ily módon jelentősen "befolyásolták" * (csillag) jellel vannak megjelölve a felsorolásban. (Pentium II/III, Celeron, Athlon processzorok esetében).
Ez a fejezet számos a hálózaton és levé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:
A Linux indulásakor ezt az üzenetet kapom:Calibrating delay loop.. ok - 23.96 BogoMips failedHol és miért romlott el a késleltető ciklus kiszámítása?
Nem romlott el, abban az esetben ez lenne az üzenet:
Calibrating delay loop.. failed
Valószínűleg egy eszközmeghajtó jelez hibát – lehet, hogy az a bigyó amelynek működéséhez szükséges, nem található meg a gépedben. 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. A rendszer minden hibát jelez. 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. Valahol közvetlenül előtte vagy utána található az "ok - xx.xx BogoMips" szöveg.
A Linux 1.2 változata ó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. Ajánlott továbbá újrafordítani a kernelt, hogy csak azok a meghajtók legyenek benne, amelyekre valóban szükség van.
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 drasztikusan megnőnek, ha engedélyezzük a BIOS-ban a "branch-prediction" funkciót (elágazás előrejelzés). Megjegyezendő, 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 szokásos helyekről. A tapasztalatok szerint 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ás néven az AMD 486DX5, tulajdonképpen 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.
Szabad legyen megjegyeznem, hogy mindössze két okból érdemes a Linux által a rendszer indításakor megadott BogoMIPS értékkel foglalkozni:
Megjegyezendő, hogy sokkal komolyabb sebességmérő módszereket ismertet André D. Balsa, a Linux Benchmarking HOWTO-ban.