BogoMips
BogoMips (הלחם מילים של "Bogus" ו-"MIPS"; בתרגום חופשי: מיליוני פקודות מזויפות בשנייה) הוא מדד גס למהירות המעבד המרכזי, המחושב על ידי ליבת לינוקס בעת אתחול מערכת המחשב, על מנת לכייל לולאת המתנה פעילה פנימית[1]. הפונקציה udelay
משתמשת בלולאה זו כדי לבצע המתנה פעילה מדויקת בלי תלות במהירות המעבד.
בניגוד לתוכנות סינטטיות להשוואת ביצועי מעבדים המנסות למדוד את ביצועי המעבד באמצעות חיקויה התנהגות אופיינית של תוכנה אמתית, Bogomips לא מבצעת פקודות אופייניות אלא לולאה של אוסף פקודות מצומצם שמטרתו העיקרית היא, להמתין שהזמן יחלוף.
לעיתים קרובות מקובל לצטט בהומור את ההגדרה הבאה למונח "מספר הפעמים בשנייה, בכפולות של מיליון, שמעבד יכול לא לעשות דבר"[2][3].
היסטוריה
לארס ויצניוס, ששימש כעוזר הוראה במחלקה למדעי המחשב באוניברסיטת הלסינקי פרסם בשנת 1993 בקובצת הדיון[4] comp.os.linux את ההודעה הבאה המסבירה מדוע הדבר נחוץ בליבת לינוקס:
- MIPS הוא קיצור של מיליוני הוראות לשנייה. זהו מדד למהירות החישוב של מעבד. כמו רוב המדדים האלו, משתמשים בו לרעה באופן תכוף.( קשה מאוד לבצע השוואה נכונה של ה-MIPS בן סוגים שונים של מחשבים ).
- ה-BogoMips הומצא על ידי לינוס עצמו עבור גרסת ליבת לינוקס 0.99.11 (מיום 11 ביולי 1993). בגרסה זו, התעורר הצורך בלולאת תזמון המבצעת "המתנה פעילה" למדידת זמנים קצרים מאוד או מדידת זמן מדויקת יותר מאשר משיטות המתנה אחרות. את לולאת התזמון, היה צורך לכייל בהתאם למהירות המעבד.
- כדי לעשות זאת, ליבת מערכת ההפעלה, בזמן האתחול, מדדה את זמן הביצוע של לולאת המתנה פעילה מסוימת. BogoMips נותן אינדיקציה מסוימת למהירות המעבד. אינדיקציה זו איננה מדעית כך שראוי לקרוא לה זיוף. ומכאן בא השם BogoMips כשאר "Bogo" נגזר מ Bogus שמשמעותו היא זיוף.
- הסיבות (יש שתיים) שהמדד מודפס במהלך האתחול הםː
- א) הדבר שימושי ברמה מסוימת לצורך ניפוי באגים ולבדיקה שהמטמון וכפתור הטורבו של המחשב עובדים.
- ב) לינוס אוהב לצחקק כשהוא רואה אנשים מבולבלים מהחדשות.
דרוג BogoMips
ניתן להשתמש בטבלה הבאה כדי להעריך מראש, באופן משוער, את מדד ה-BogoMips.
הדירוג הוא עבור מעבד מסוים המריץ גרסת לינוקס עכשווית.
האינדקס משמש למטרות השוואה. הוא מיצג את היחס, עבוד מהירות מעבד מסוימת, למדד של מעד אינטל 386DX CPU.
מעבד/מערכת | דרוג | אינדקס |
---|---|---|
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 :[5]
ניתן למצוא את הערך על ידי שימוש בפקודת החיפושː
$ grep -i bogomips /proc/cpuinfo
המתנה מבוססת טיימר
בגרסת הליבה 2.6, BogoMIPS מיושם על ידי חישוב הפרמטר loops_per_jiffy השמש את פונקציות ההמתנה הפעילה udelay ו- ndelay המשמשות למדידת זמן מדויקת.
בשנת 2012, חברת ARM תרמה מימוש udelay
חדש המאפשר להשתמש בטיימר המערכת המובנה ברבים ממעבדי ARMv7 במקום בלולאת המתנה פעילה. מימוש זה שוחרר בגרסה 3.6 של ליבת לינוקס.[6] המתנה מבוססת טיימר יציבה יותר במערכות המשתמשות בהתאמה דינמית של תדר השעון כדי להתאים באופן דינמי את מהירות המעבד בזמן ריצה, מכיוון שערכי loops_per_jiffies
לא בהכרח משתנים באופן ליניארי. כמו כן, מכיוון שתדר הטיימר ידוע מראש, אין צורך בכיול בזמן האתחול.
קישורים חיצוניים
הערות שוליים
- ^ Van Dorst, Wim (בינואר 1996). "The Quintessential Linux Benchmark". Linux Journal. נבדק ב-2008-08-22.
{{cite journal}}
: (עזרה) - ^ Eric S Raymond, and Geoff Mackenzie, published on the Internet in the early 1990s, untraceable origin.
- ^ Raymond, Eric S. "Hackers Jargon File".
- ^ Wirzenius, Lars. "Re: printing & BogoMips".
- ^ "BogoMips mini-Howto".
- ^ Deacon, Will. "ARM: 7452/1: delay: allow timer-based delay implementation to be selected".
38514580BogoMips