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 rendszermagnak (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 az /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 #or where else source is located 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 3.7 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 rendszermag esetén eltérő értéket adhat.
Három módja van a BogoMIPS meghatározásának:
megnézhető a /proc/cpuinfo, fájlban, például a `cat /proc/cpuinfo`paranccsal. Ez a módszer a legelőnyösebb.
megtalálható a syslog kimenetében, hogy mit írt ki a rendszer indulásakor. Szerencsés esetben az induláskor érvényes virtuális konzolon még megvan az információ (ha szükséges az Alt-F1 kombinációval válts át erre), egyébként a dmesg vagy syslogk parancs kiadásával kapható meg az infó. Így pontos információ kapható, de több munkába kerül.
önállóan futó bogomips program használatával. Ez kizárólag nem linuxos rendszereken ajánlott, ennek okára az alábbiakban mutatok rá.
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.orgké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 rendszermag az 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 programkö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 rendszermag az 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/. 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 rendszermagot 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 rendszermagot az adott processzorra.
A közhiedelemmel ellentétben a BogoMIPS algoritmus NEM változik jelentősen a rendszermag fejlődése során. Sőt, valójában mindenféle CPU esetében ugyanaz.
Ami változott 2.2.14-es rendszermagtó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.frezt kérdezték 1995. márciusában:
A Linux indulásakor ezt az üzenetet kapom:
Hol és miért romlott el a késleltető ciklus kiszámítása?
Calibrating delay loop.. ok - 23.96 BogoMips failed
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 rendszermagot, 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 rendszermagot 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:
Vajon az érték az adott processzornak megfelelő? (típus, órajel, belső cache). Sok processzor hibásan van beállítva, azaz:
a memória cache beállítása rossz (a "write-back" nem jó a BogoMIPS-nek, gyakran 5-nél is kisebb érték jön ki; a "write-through" a jó)
turbo gomb (be kell kapcsolni)
a BIOS által emulált cache (cseréld ki valódira)
és egyéb hasonló cache-el és órajellel kapcsolatos beállítások, amelyek sokszor a BIOS-tól függenek
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? Ez lényegében butaság, de soha nem fékezte meg az embereket a sebességmérő programok használatában, ugye? :-)
Megjegyezendő, hogy sokkal komolyabb sebességmérő módszereket ismertet André D. Balsa, a Linux Benchmarking HOWTO-ban.
| Előző | Tartalomjegyzék | Következő |
| A legalacsonyabb és a legmagasabb BogoMIPS értékek | Értékek gyűjteménye |