以前から気になっていたのです。ラズパイのBogoMips。model 1 B+は、
697.95
などという値を報告してくるのに、model 3 B+ は、
38.40
などという値です。実際に同じソフトウエアを走らせたら model 3 B+の方が、ずっと早いのに(ま、Pi 3 B+は4コアですがね)。クロックアップとかそんな問題以前の圧倒的な差、なぜでしょう。まあ、BogoMipsなどは「非科学的な値」だから信用するな、と言われても、この結果、何か理由がある筈。気になって夜も眠れない。。。
※「トホホな疑問」投稿順Indexはこちら
BogoMipsについては、日本語の良いドキュメントがあるのでリンクを張っておきます。そこに書かれている定義?は、
プロセッサが一秒間に何百万回無益な処理をできるかを計測した数値
です。公平なベンチマークに使えるものでもなく、偽物だとか、非科学的だとか言われているようです。しかし、Linuxカーネルがブート時に測定してくれて、
$ cat /proc/cpuinfo
とすれば何時でも参照できる値であります。ちゃんと恙なく動いておるかや、と確認できる値でもあり、また、特に目の前に Armアーキテクチャの4台のボードが並んでいると、同系統のCPUでもあり比べてみたくなるものです。
- Raspberry Pi Zero W
- Raspberry Pi model 1 B+
- Raspberry Pi model 3 B+
- Jetson Nano
以前から気になったのが、Pi1 B+ は以下のような表示なのに
$ cat /proc/cpuinfo processor : 0 model name : ARMv6-compatible processor rev 7 (v6l) BogoMIPS : 697.95 ~以下略~
Pi3 B+は、
$ cat /proc/cpuinfo processor : 0 model name : ARMv7 Processor rev 4 (v7l) BogoMIPS : 38.40 ~以下略~
どうしてこんなに違うの? CPUの違い、それともOSのバージョン? そこでPi Zero Wを取り出しました。Pi Zero WのCPUは Pi1 B+と同じBCM2835。そしてOSのバージョンは、Pi3 B+にインストールしてあるのと同じ 4.19.57+(Pi1 B+にインストールしてあるのは、4.9.35+)
$ cat /proc/cpuinfo processor : 0 model name : ARMv6-compatible processor rev 7 (v6l) BogoMIPS : 697.95 ~以下略~
どうも、CPUコアの違いのようです。Pi1 B+とPi ZeroのArm 11ベースのコアだと大きい数字(私が見る限り尤もらしい数字。Pi3のはどうみてもMips値としては小さすぎる)が出るみたい。念のため、Jetson Nanoでも見てみました。Jetson Nanoは、64ビットモードで動いているのでRaspbianの32ビットモードとは異なります。Linuxのバージョンは、4.9.140-tegra。コアはPi 3 B+とは同世代ですが、クロック速度もマイクロアーキテクチャも違う。
$ cat /proc/cpuinfo processor : 0 model name : ARMv8 Processor rev 1 (v8l) BogoMIPS : 38.40 ~以下略~
まさかの Pi3 B+とまったく同じ小さいスコア。なぜ? 調べてみても、BogoMipsなんか信用するでないみたいなことばかりが見つかって、理由を書いてあるところがなかなかありません。これは、もしかして、カーネルのソースを読まないと駄目なのか?と思ったら、灯台下暗しと言うべきでしょう、英語版のWikipediaのBogoMipsの項目の下の方に
Timer-based-Delays
という項目があり、説明が書かれていました。見つかって良かった。詳しいことはそちらを読んでくだされ。簡単にまとめると2012年にArm社がArm v7以降のCPUに対して、それまでの「信用のおけない」ソフトウエアのビジーウエイトループに変わるハードウエアタイマの遅延機能を導入したのだそうです。お陰で安定した機能になったが、ビジーウエイトでCPU速度を測る前提だったBogoMipsは、CPUの速度ではなくハードで実装されたタイマの値を反映するようになってしまった、とのこと。そのせいで、JetsonでもPi3 B+でも同じ値だったんだ。そんだけ読んだら納得です。夜も眠れるというものだ、いや、いまからもう眠いが。