Következő Előző Tartalom

2. Gyakran Ismétlődő Kérdések a BogoMIPS-ről

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.

2.1 Mi az a BogoMips?

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.

2.2 Hogyan becsüljük meg a BogoMIPS helyes értékét?

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.

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

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

  1. megnézhető a /proc/cpuinfo fájlban, például a "cat /proc/cpuinfo" paranccsal. Ez a módszer a legelőnyösebb.
  2. 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.
  3. ö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.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.

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

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.

2.5 Új BogoMIPS algoritmus?

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).

2.6 BogoMips ... failed

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
      failed
Hol é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.

2.7 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 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.

2.8 Miért érdekes a BogoMIPS?

Szabad legyen megjegyeznem, hogy mindössze két okból érdemes a Linux által a rendszer indításakor megadott BogoMIPS értékkel foglalkozni:

  1. Vajon az érték az adott processzornak megfelelő? (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? 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.


Következő Előző Tartalom