BogoMips

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』

BogoMips("bogus"=「いんちきの」+ MIPS)とは、LinuxカーネルのブートCPU速度そくどビジーループ使つかって科学かがくてき測定そくていした結果けっかである[1]。その定義ていぎとしてよくわれるのは「プロセッサがまった無駄むだ処理しょりを1秒間びょうかんなんひゃくまんかいできるか」である[2][3]

BogoMipsは、あるプロセッサがクロック周波数しゅうはすうキャッシュ有無うむから妥当だとう性能せいのうしめしているかを判断はんだんするのに使つかえる。ことなる種類しゅるいのCPUあいだでの性能せいのう比較ひかくには使つかえない[4][5]

歴史れきし[編集へんしゅう]

1993ねん、ラルス・ビルゼニウスが comp.os.linux にLinuxカーネルにBogoMipsが導入どうにゅうされた理由りゆうつぎのように投稿とうこうしている[6]

MIPSは Millions of Instructions Per Second(ひゃくまん命令めいれい毎秒まいびょう)のりゃくだ。プロセッサの速度そくどもとめる手段しゅだんである。そのような測定そくていほうおおくと同様どうよう適切てきせつ利用りようされるより乱用らんようされることがおおい(機種きしゅのコンピュータあいだでMIPSただしく比較ひかくするのは非常ひじょうむずかしい)。
BogoMipsはリーナス自身じしん発案はつあんである。Linuxカーネル 0.99.11(1993ねん7がつ11にち)はタイミングループを必要ひつようとしていた(時間じかん非常ひじょうみじかいのでループする以外いがいのウェイト手段しゅだん採用さいようできなかった)。タイミングループはプロセッサの処理しょり速度そくどちがいを較正こうせいしなければならない。そこでカーネルでブートにビジーループを実際じっさいまわしてみて、そのコンピュータがどの程度ていど速度そくどかを測定そくていすることにした。"Bogo" は "bogus"(いんちきの)に由来ゆらいし、それが一種いっしゅのごまかしであることを意味いみしている。BogoMipsのはプロセッサ速度そくど一種いっしゅ指標しひょうあたえるが、あまりにも科学かがくてきなので BogoMips 以外いがいさまがない。
ブートにその表示ひょうじする理由りゆうは2つある。だいいちにそのコンピュータのキャッシュや加速かそく手段しゅだんただしく機能きのうしているかをチェックするのに使つかえる。だいにリーナスはこのニュースをいて混乱こんらんしている人々ひとびとかけたときにくすくすわらうのが大好だいすきである。

BogoMipsのただしい比較ひかく[編集へんしゅう]

非常ひじょうおおまかではあるが、BogoMipsの相対そうたい計算けいさんするしき以下いかひょうしめす。この相対そうたいかくCPU使用しようされていた当時とうじLinuxでのBogoMipsもとづくものである。clock は、そのCPUのクロック周波数しゅうはすう。インデックスは、クロック周波数しゅうはすうたりの BogoMips の係数けいすうが Intel 386DX とおなじCPUを1とした相対そうたいである[7]

システム 相対そうたい インデックス
Intel 8088 clock × 0.004 0.02
Intel/AMD 386SX clock × 0.14 0.8
Intel/AMD 386DX clock × 0.18 1 (これを 1 とした)
Motorola 68030 clock × 0.25 1.4
Cyrix/IBM 486 clock × 0.34 1.8
Intel Pentium clock × 0.40 2.2
Intel486 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 8081 clock × 0.65 3.6
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 Cx5x86/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
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.01 11.2
Intel Xeon MP (32-bit)ハイパースレッディング clock × 3.97 22.1
IBM S390 データが不十分ふじゅうぶん
Intel ARM データが不十分ふじゅうぶん

BogoMipsの詳細しょうさい情報じょうほうすうひゃく測定そくていBogoMips Mimi-Howto にある。

Linuxカーネル 2.2.14 以降いこうキャッシュ設定せっていがBogoMipsの計算けいさんまえおこなわれるようになった。BogoMipsの計算けいさん方法ほうほうわっていないので、当時とうじの Pentium けいCPU以降いこうではBogoMipsやく2ばいになっている。このBogoMips変化へんか実際じっさいのプロセッサ性能せいのうにはなん効果こうかもない。

BogoMIPSの計算けいさん[編集へんしゅう]

Linuxカーネル (2.6.x) での BogoMips は /usr/src/linux/init/calibrate.c というソースファイルで実装じっそうされている。Linuxカーネルが使用しようするタイミングパラメータ loops_per_jiffy (Jiffy についてはジフィ参照さんしょう)を計算けいさんもとめている。まず、ソースコードのコメントをしめす。

 /*
   * A simple loop like
   *  while ( jiffies < start_jiffies+1)
   *    start = read_current_timer();
   * will not do. As we don't really know whether jiffy switch
   * happened first or timer_value was read first. And some asynchronous
   * event can happen between these two events introducing errors in lpj.
   *
   * So, we do
   * 1. pre_start <- When we are sure that jiffy switch hasn't happened
   * 2. check jiffy switch
   * 3. start <- timer value before or after jiffy switch
   * 4. post_start <- When we are sure that jiffy switch has happened
   *
   * Note, we don't know anything about order of 2 and 3.
   * Now, by looking at post_start and pre_start difference, we can
   * check whether any asynchronous event happened or not
   */

loops_per_jiffyudelay関数かんすうμみゅーびょう単位たんい遅延ちえん)とndelay関数かんすう(ナノびょう単位たんい遅延ちえん)の実装じっそう使つかわれている。これらの関数かんすう一部いちぶのドライバがハードウェアをつのに必要ひつようとしている。これらはビジーウェイト採用さいようしているので、使用しようするとカーネルは実質じっしつてきにブロックされる。i386アーキテクチャの場合ばあい /usr/src/linux/arch/i386/lib/delay.c にて delay_loopつぎのように実装じっそうされている。

/* simple loop based delay: */
static void delay_loop(unsigned long loops)
{
  int d0;

  __asm__ __volatile__(
    "\tjmp 1f\n"
    ".align 16\n"
    "1:\tjmp 2f\n"
    ".align 16\n"
    "2:\tdecl %0\n\tjns 2b"
    :"=&a" (d0)
    :"0" (loops));
}

これをCの擬似ぎじコードでなおすと、つぎのようになる。

static void delay_loop(long loops)
{
  long d0 = loops;
  do {
    --d0;
  } while (d0 >= 0);
}

BogoMipsのさらなる詳細しょうさいと(ほとんどがふるいが)すうひゃくのBogoMipsが BogoMips mini-Howto[4] にある。

脚注きゃくちゅう[編集へんしゅう]

  1. ^ Van Dorst, Wim (January 1996). “The Quintessential Linux Benchmark”. Linux Journal. http://www.linuxjournal.com/article/1120 2008ねん8がつ22にち閲覧えつらん. 
  2. ^ エリック・レイモンドとジェフ・マッケンジーが1990年代ねんだいはじめごろインターネット発言はつげんしたが、起源きげん追跡ついせき不能ふのう
  3. ^ Raymond, Eric S.. “Hackers Jargon File”. 2012ねん7がつ15にち閲覧えつらん
  4. ^ a b Van Dorst, Wim (2006ねん3がつ2にち). “BogoMips Mini-Howto”. 2008ねん8がつ22にち閲覧えつらん
  5. ^ Blidung, Thomas. “Re: How many BogoMips should I expect from my 486DX2 running Linux?”. 2012ねん7がつ15にち閲覧えつらん
  6. ^ Wirzenius, Lars. “Re: printing & BogoMips”. 2012ねん7がつ15にち閲覧えつらん
  7. ^ Bekman, Stas. “What is a BogoMip?”. 2012ねん7がつ15にち閲覧えつらん

外部がいぶリンク[編集へんしゅう]

この記事きじは2008ねん11月1にち以前いぜんFree On-line Dictionary of Computingから取得しゅとくした項目こうもく資料しりょうもとに、GFDL バージョン1.3以降いこうの「RELICENSING」(さいライセンス) 条件じょうけんもとづいてまれている。