BogoMips

BogoMips (הלחם מילים של "Bogus" ו-"MIPS"; בתרגום חופשי: מיליוני פקודות מזויפות בשנייה) הוא מדד גס למהירות המעבד המרכזי, המחושב על ידי ליבת לינוקס בעת אתחול מערכת המחשב, על מנת לכייל לולאת המתנה פעילה פנימית<ref name="lj"></ref>. הפונקציה <code>udelay</code>משתמשת בלולאה זו כדי לבצע המתנה פעילה מדויקת בלי תלות במהירות המעבד. 

בניגוד לתוכנות סינתטיות להשוואת ביצועי מעבדים המנסות למדוד את ביצועי המעבד באמצעות חיקויה התנהגות אופיינית של תוכנה אמיתית, Bogomips לא מבצעת פקודות אופייניות אלא לולאה של אוסף פקודות מצומצם שמטרתו העיקרית היא, להמתין שהזמן יחלוף.

לעיתים קרובות מקובל לצטט בהומור את ההגדרה הבאה למונח "מספר הפעמים בשנייה, בכפולות של מיליון, שמעבד יכול לא לעשות דבר"<ref name="quote">Eric S Raymond, and Geoff Mackenzie, published on the Internet in the early 1990s, untraceable origin.</ref><ref name="esr"></ref>.

== היסטוריה ==
לארס ויצניוס, ששימש כעוזר הוראה במחלקה למדעי המחשב באוניברסיטת הלסינקי פרסם בשנת 1993 בקובצת הדיון<ref></ref> comp.os.linux את ההודעה הבאה המסבירה מדוע הדבר נחוץ בליבת לינוקס:

: MIPS הוא קיצור של מיליוני הוראות לשנייה. זהו מדד למהירות החישוב של מעבד. כמו רוב המדדים האלו, משתמשים בו לרעה באופן תכוף.( קשה מאוד לבצע השוואה נכונה של ה-MIPS בן סוגים שונים של מחשבים ).
: ה-BogoMips הומצא על ידי לינוס עצמו עבור גרסת ליבת לינוקס 0.99.11 (מיום 11 ביולי 1993). בגרסה זו, התעורר הצורך בלולאת תזמון המבצעת "המתנה פעילה" למדידת זמנים קצרים מאוד או מדידת זמן מדויקת יותר מאשר משיטות המתנה אחרות. את לולאת התזמון, היה צורך לכייל בהתאם למהירות המעבד.
: כדי לעשות זאת, ליבת מערכת ההפעלה, בזמן האתחול, מדדה את זמן הביצוע של לולאת המתנה פעילה מסוימת. BogoMips נותן אינדיקציה מסוימת למהירות המעבד. אינדיקציה זו איננה מדעית כך שראוי לקרוא לה זיוף. ומכאן בא השם BogoMips כשאר "Bogo" נגזר מ Bogus שמשמעותו היא זיוף.
: הסיבות (יש שתיים) שהמדד מודפס במהלך האתחול הםː
: א) הדבר שימושי ברמה מסוימת לצורך ניפוי באגים ולבדיקה שהמטמון וכפתור הטורבו של המחשב עובדים.
: ב) לינוס אוהב לצחקק כשהוא רואה אנשים מבולבלים מהחדשות.

== דרוג BogoMips ==
ניתן להשתמש בטבלה הבאה כדי להעריך מראש, באופן משוער, את מדד ה-BogoMips.

הדירוג הוא עבור מעבד מסוים המריץ גרסת לינוקס עכשווית.

האינדקס משמש למטרות השוואה. הוא מיצג את היחס, עבוד מהירות מעבד מסוימת, למדד של מעד אינטל 386DX CPU.
{| class="sortable wikitable"
!מעבד/מערכת
!דרוג
!אינדקס
|-
|Intel 8088
|clock × 0.004
|0.02
|-
|Intel/AMD 386SX
|clock × 0.14
|0.8
|-
|Intel/AMD 386DX
|clock × 0.18
|1 (definition)
|-
|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
|-
|ARM9
|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
|-
|R4600
|clock × 1.00
|5.6
|-
|Hitachi SH-4
|clock × 1.00
|5.6
|-
|Raspberry Pi (Model B)
|clock × 1.00
|5.6
|-
|Intel Itanium 2
|clock × 1.49
|8.3
|-
|Alpha 21264
|clock × 1.99
|11.1
|-
|VIA Centaur
|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
|-
|AMD Sempron
|clock × 2.00
|11.1
|-
|UltraSparc II
|clock × 2.00
|11.1
|-
|Intel Pentium MMX
|clock × 2.00
|11.1
|-
|Intel Pentium 4
|clock × 2.00
|11.1
|-
|Intel Pentium M
|clock × 2.00
|11.1
|-
|Intel Core Duo
|clock × 2.00
|11.1
|-
|Intel Core 2 Duo
|clock × 2.00
|11.1
|-
|Intel Atom N455
|clock × 2.00
|11.1
|-
|Centaur C6-2
|clock × 2.00
|11.1
|-
|PowerPC 604/604e/750
|clock × 2.00
|11.1
|-
|Intel Pentium III Coppermine
|clock × 2.00
|11.1
|-
|Intel Pentium III Xeon
|clock × 2.00
|11.1
|-
|Motorola 68060
|clock × 2.00
|11.1
|-
|Intel Xeon MP (32-bit) (hyper-threading)
|clock × 3.97
|22.1
|-
|IBM S390
|not enough data (yet)
|
|-
|ARM
|not enough data (yet)
|
|}
במערכת ההפעלה לינוקס ערך ה-BogoMips מופיע בקובץ cpuinfo :<ref name="BogoMips HOWTO"></ref>

ניתן למצוא את הערך על ידי שימוש בפקודת החיפושː<syntaxhighlight lang="console">
$ grep -i bogomips /proc/cpuinfo
</syntaxhighlight>

== המתנה מבוססת טיימר ==
בגרסת הליבה 2.6, BogoMIPS מיושם על ידי חישוב הפרמטר loops_per_jiffy השמש את פונקציות ההמתנה הפעילה udelay ו- ndelay המשמשות למדידת זמן מדויקת.

בשנת 2012, חברת ARM תרמה מימוש <code>udelay</code> חדש המאפשר להשתמש בטיימר המערכת המובנה ברבים ממעבדי ARMv7 במקום בלולאת המתנה פעילה. מימוש זה שוחרר בגרסה 3.6 של ליבת לינוקס.<ref></ref> המתנה מבוססת טיימר יציבה יותר במערכות המשתמשות בהתאמה דינמית של תדר השעון כדי להתאים באופן דינמי את מהירות המעבד בזמן ריצה, מכיוון שערכי <code>loops_per_jiffies</code> לא בהכרח משתנים באופן ליניארי. כמו כן, מכיוון שתדר הטיימר ידוע מראש, אין צורך בכיול בזמן האתחול.

== קישורים חיצוניים ==
* [http://www.clifton.nl/bogomips.html BogoMips Mini-Howto, V38]

== הערות שוליים ==

קטגוריה:לינוקס