ボゴミップス

BogoMips(「bogus」とMIPSを組み合わせた造語)は、 Linuxカーネルが起動時に内部のビジーループを補正するために行うCPU速度の大まかな測定値である[1]この用語のよく引用される定義は、「プロセッサが1秒間に全く何もできない回数の百万倍数」である。[2] [3]

BogoMipsは、対象のプロセッサが類似プロセッサの適切な範囲内にあるかどうかを確認するために使用できる値です。つまり、BogoMipsはプロセッサのクロック周波数と、存在する可能性のあるCPUキャッシュの両方を表します。異なるCPU間のパフォーマンス比較には使用できません。[4]

歴史

1993年にLars Wirzeniusはcomp.os.linuxにLinuxカーネルへの導入理由を説明するUsenetメッセージ[5]を投稿しました。

[...]
MIPSは「Millions of Instructions Per Second(100万命令/秒)」の略称です。プロセッサの計算速度を表す指標です。しかし、他の多くの指標と同様に、正しく使用されるよりも乱用されることの方が多いのが現状です(異なる種類のコンピュータ間でMIPSを公平に比較​​することは非常に困難です)。
BogoMipsはLinus氏自身の発明です。Linuxカーネルバージョン0.99.11(1993年7月11日)では、タイミングループ(非ビジーループ方式の待機には時間が短すぎる、または厳密すぎる、あるいはその両方)が必要でした。このループはマシンのプロセッサ速度に合わせて調整する必要がありました。そのため、カーネルは起動時に、特定のビジーループがコンピュータ上でどれだけ速く実行されるかを測定します。「Bogo」は「bogus」(偽物)に由来しており、これは偽物を意味します。したがって、BogoMips値はプロセッサ速度の指標となることは間違いありませんが、BogoMips以外の言葉で表現するにはあまりにも非科学的です。
起動時にこれが印刷される理由 (2 つあります) は、a) デバッグやコンピュータのキャッシュとターボ ボタンが機能しているかどうかを確認するのに多少役立つこと、b) Linus がニュースで困惑している人々を見るとくすくす笑うのが大好きだということです。
[...]

適切なBogoMips評価

非常におおよその目安として、BogoMipsは以下の表で事前に計算できます。この値は、その時点の最新かつ適用可能なLinuxバージョンにおける、そのCPUの標準的な値です。この指標は、比較のために、任意のCPUの「クロック速度あたりのBogoMips」をIntel 386DX CPUの同じ値と比較したものです。[6] [7]

システム評価索引
インテル 8088時計 × 0.0040.02
インテル/AMD 386SX時計 × 0.140.8
インテル/AMD 386DX時計 × 0.181(定義)
モトローラ 68030時計 × 0.251.4
サイリックス/ IBM 486時計 × 0.341.8
インテルペンティアム時計 × 0.402.2
インテル 486時計 × 0.502.8
AMD 5x86時計 × 0.502.8
ミップスR4000/R4400時計 × 0.502.8
ARM9時計 × 0.502.8
モトローラ 68040時計 × 0.673.7
パワーPC603時計 × 0.673.7
インテルStrongARM時計 × 0.663.7
ネクスジェンNx586時計 × 0.754.2
パワーPC601時計 × 0.844.7
アルファ 21064 /21064A時計 × 0.995.5
アルファ 21066 /21066A時計 × 0.995.5
アルファ 21164 /21164A時計 × 0.995.5
インテルペンティアム プロ時計 × 0.995.5
サイリックス 5x86 / 6x86時計 × 1.005.6
インテルペンティアム II / III時計 × 1.005.6
AMD K7/アスロン時計 × 1.005.6
インテルセレロン時計 × 1.005.6
インテルItanium時計 × 1.005.6
R4600時計 × 1.005.6
日立SH-4時計 × 1.005.6
ラズベリーパイ(モデルB)時計 × 1.005.6
インテルItanium 2時計 × 1.498.3
アルファ 21264時計 × 1.9911.1
VIA ケンタウロス時計 × 1.9911.1
AMD K5/K6/K6-2/K6-III時計 × 2.0011.1
AMDデュロン/アスロンXP時計 × 2.0011.1
AMDセンプロン時計 × 2.0011.1
ウルトラスパークII時計 × 2.0011.1
インテルペンティアム MMX時計 × 2.0011.1
インテルペンティアム 4時計 × 2.0011.1
インテルペンティアム M時計 × 2.0011.1
インテルCore Duo時計 × 2.0011.1
インテルCore 2 Duo時計 × 2.0011.1
インテルAtom N455時計 × 2.0011.1
ケンタウロスC6-2時計 × 2.0011.1
PowerPC 604/604e/750時計 × 2.0011.1
インテルペンティアム III コッパーマイン時計 × 2.0011.1
インテルペンティアム III Xeon時計 × 2.0011.1
モトローラ 68060時計 × 2.0011.1
Intel Xeon MP (32 ビット) (ハイパースレッディング)時計 × 3.9722.1

Linuxカーネル2.2.14では、 CPU状態のキャッシュ設定がBogoMips計算の後ろから前へ移動されました。BogoMipsアルゴリズム自体は変更されていませんでしたが、このカーネル以降、当時のPentium CPUのBogoMips値は変更前の2倍になりました。変更されたBogoMips値は、実際のプロセッサ性能には影響を与えませんでした。[要出典]

シェルでは、BogoMipsはcpuinfoファイルを検索することで簡単に取得できます。[7]

$ grep  -i  bogomips  /proc/cpuinfo

BogoMipsの計算

カーネル2.6.xでは、BogoMipsは/usr/src/linux/init/calibrate.cカーネルソースファイルに実装されています。これはLinuxカーネルのタイミングパラメータloops_per_jiffyjiffyを参照)の値を計算します。ソースコードからの説明:

 /* * 次のような単純なループ * while ( jiffies < start_jiffies+1 ) * 開始 = read_current_timer(); *はダメです。Jiffy Switchが * が最初に発生したか、timer_value が最初に読み取られました。また、非同期 * これら 2 つのイベントの間にイベントが発生する可能性があり、lpj にエラーが発生します。 * * だから私たちは * 1. pre_start <- jiffyスイッチが発生していないことを確認したとき * 2. ジフィースイッチを確認する * 3. start <- jiffyスイッチの前または後のタイマー値 * 4. post_start <- jiffyスイッチが確実に実行されたとき * * 注意: 2 と 3 の順序については何もわかりません。 * さて、post_startとpre_startの違いを見ると、 * 非同期イベントが発生したかどうかを確認する */

loops_per_jiffyudelayは、(マイクロ秒単位の遅延)および(ナノ秒単位の遅延)関数を実装するために使用されますndelay。これらの関数は、一部のドライバがハードウェアを待機するために必要です。ビジーウェイトndelay技術が使用されているため、 /関数の実行中はカーネルが実質的にブロックされることに注意してくださいudelay。i386アーキテクチャでは、次のようdelay_loopに実装されています/usr/src/linux/arch/i386/lib/delay.c

/* 単純なループベースの遅延: */ static void delay_loop ( unsigned long loops ) { int d0 ;       __asm__ __volatile__ ( " \t jmp 1f \n " ".align 16 \n " "1: \t jmp 2f \n " ".align 16 \n " "2: \t decl %0 \n\t jns 2b" : "=&a" ( d0 ) : "0" (ループ)); }          

次のアセンブラコードと同等

; 入力: eax = d0 ; 出力: eax = 0 jmp start .align 16 start: jmp body .align 16 body: decl eax jns body          

C擬似コードに書き直すことができる

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

BogoMips に関する完全な情報と詳細、そして数百もの参考資料は、(古いですが)BogoMips mini-Howto に記載されています。[4]

タイマーベースの遅延

2012年、ARMはudelayビジーウェイトループの代わりに、多くのARMv7 CPUに組み込まれているシステムタイマーを使用できるようにする新しい実装を提供しました。この実装はLinuxカーネルバージョン3.6でリリースされました。[8]タイマーベースの遅延は、実行時にプロセッサの速度を動的に調整するために周波数スケーリングloops_per_jiffiesを使用するシステムでは、値が必ずしも線形にスケーリングされない可能性があるため、より堅牢です。また、タイマー周波数は事前にわかっているため、ブート時のキャリブレーションは不要です。

この変更による副作用の一つとして、BogoMIPS値はCPUコア周波数ではなくタイマー周波数を反映するようになります。通常、タイマー周波数はプロセッサの最大周波数よりもはるかに低いため、従来のビジーウェイトループを使用するシステムと比較すると、BogoMIPS値が異常に低いことに驚くユーザーもいるかもしれません。

参照

参考文献

  1. ^ ヴァン・ドースト、ヴィム (1996 年 1 月)。 「典型的な Linux ベンチマーク」。Linux ジャーナル2008 年 8 月 22 日に取得
  2. ^ エリック・S・レイモンドとジェフ・マッケンジーが1990年代初頭にインターネットで公開したもので、出所は追跡不可能。
  3. ^ レイモンド、エリック S.「ハッカー専門用語ファイル」。
  4. ^ ab Van Dorst、Wim (2006 年 3 月 2 日)。 「BogoMips Mini-Howto」 (V38 版) 2008 年 8 月 22 日に取得
  5. ^ Wirzenius, Lars. 「印刷と BogoMips について」
  6. ^ Bekman, Stas. 「BogoMipとは何か?」
  7. ^ ab "BogoMips mini-Howto".
  8. ^ Deacon, Will. 「ARM: 7452/1: delay: タイマーベースの遅延実装を選択できるようにする」
  • BogoMips ミニハウツー、V38
  • 古典的なスタンドアロンベンチマークのソース
「https://en.wikipedia.org/w/index.php?title=BogoMips&oldid=1307022014」より取得