今回は、ラズパイ4をオーバークロックします。

ここんとこ、ラズパイ上のVS Codeで、自動取引ソフトつくってみたり、Twitter API で遊んだりしていて、もっさり感が許せなくなってきた。Windowsのメインマシン側との連携するのも一つの方法だけど、やっぱり、実行環境そのものでコードいじくれたほうが、楽だよね、大した分量のコードでもないし、所詮、一人でいじるだけだから。

ならば、オーバークロックして、少しでも、もっさり感をなくせないのか、というのが今回のトライです。 結果、2.2Ghzまでいけました。動的なクロックのコントロールは、この先、役にたちそうなので、詳細を記しておきます。

公式のオーバークロック記事とその紹介記事

まずは、ここ、ラズパイ公式サイト。Config.txt に記載できる、Overclock オプションの記事。

https://www.raspberrypi.org/documentation/configuration/config-txt/overclocking.md

ここに、Config.txt に周波数やら電圧やらのオプション記載してオーバークロックできるからね、ってのと、クロックやCPU温度の測定方法が書かれています。温度見るなら、vcgencmd measure_temp とか。やってみたって記事はこちら。

The MagPi magazine
How to overclock Raspberry Pi 4 — The MagPi magazine
Run your Raspberry Pi 4 faster with our guide to safely overclocking the CPU and GPU
dummy

ここは、英語だけど、これを解説した日本語記事は、山ほどあります。その中で、まとまっててわかりやすかったのがこちらの記事。

note(ノート)
Raspberry Pi 4をオーバークロックする方法|npaka|note
以下の記事が面白かったので、ざっくり翻訳しました。 ・How to overclock Raspberry Pi 4 1. はじめに 「Raspberry Pi 4」の心臓部には、最大クロック速度1,500MHz(1.5GHz)で動作する「ARM Cortex-A72 CPU」(中央処理装置)があります。クロックは、プロセッサ内のすべてのコンポーネントを同期するために使用される電子パルスです。最大クロック速度1.5GHzは、プロセッサが1秒あたり15億回更新することを意味します。これをさらに増やすことができます。 2. 必要なもの ・Raspberry Pi 4
dummy

この内容までは、すぐ見つかります。で、ここでまた、新たな疑問と不満。どのぐらいまで上げられるのかってのと、いちいち再起動めんどくせーっていうの。

もし、動的に変えられたら、限界見極めも楽にできるけど、Config.txt を書き替えながら限界テストなんかしようもんなら、起動できなくなって元に戻すのが、まずめんどくさいじゃんね。カード抜いて、別のマシンでConfig.txt を書き換えて元に戻す。そんなのアホくさくて、やってられんよ。

しかも、最終的には、コード編集したりデスクトップ使いはオーバークロックしたいし、実運用するときは、落として安定させたい。だから、コマンドやスクリプトやプログラムから動的に変えたい。

ということで、もう一歩踏み込んで、制御方法を調査。大体、わかったので、以下、紹介していきます。

Cpufrequtils というパッケージ

まず、今回やりたいことを実行できる、神パッケージ、”CPUfreqUtils” をインストールしましょう。


sudo apt install cpufrequtils

このパッケージは、Linux-Kernel が提供してくれる CPU 情報に対する情報収集や操作を行えるコマンドです。参考までに、CPU情報というのは、/sys/devices/system/cpu/cpu*/cpufreq/ にある、sysfs設定情報です。ここにあったんですね。

なお、このパッケージの使い方のドキュメントはここにあります。

https://www.thinkwiki.org/wiki/How_to_use_cpufrequtils#Examples

基本は、二つのコマンド、cpufreq-info、と、cpufreq-set です。これに加え、Config.txt の設定も影響しますので、これらの設定と使い方を簡単に説明していきます。

Config.txt と cpufrequtils の設定値を更新

まず、Config.txt の CPU 周波数・Voltage設定を次のように書き換えます。Voltageはめいっぱい上げときます。


sudo mousepad /boot/config.txt

arm_freq = 2500 です。2.5GHz!!!
このまま、再起動したら、きっと立ち上がらなくなっちゃうので、注意!まだ、再起動してはだめですよ。

次に、/etc/init.d の下にある、cpufrequtils を編集します。


sudo mousepad /etc/init.d/cpufrequtils

GOVERNOR は、ondemand 以外にしても、起動時は、ondemand になります。MAX_SPEED と MIN_SPEED に、1500000 と、800000 を入れます。ここがポイントです。書き換え前にダブルクォーテーションで囲ってあったりしますけど、eg で書いてあるように外して記述しましょう。

このファイルのコメントには、/sys/devices/system/cpu/cpu0/cpufreq/scailing_available_frequencies にある値しか認めないよって書いてあります。違っていると機能しません。で、そのファイルってのがこちら。frequenciesというのと、governorsというのがあって、MAX_SPEEDとMIN_SPEEDはこのfrequnciesというファイルに記載の数値しか受け付けません。また、GOVERNORのモード設定も、governorsというファイルに記載のモードしか受付ないということになります。

このファイル、普通のテキストエディタでは開けません。Geany で開きましょう。

そうすると、中身は、こんなになってます。GOVERNROの設定モードは後ほど解説します。

周波数は、KHz単位の数値で入ってます。また、この周波数の範囲は、そう、Config.txt で指定した範囲になってます。先ほど、500MHz ~2500MHz にしましたので、500000から100000づつで、2600000まであります。この中にある数字をつかって、MAX_SPEEDやMIN_SPEEDの設定を埋め込まないと正しく設定できません。

また、cpufrequtilsのファイル内で指定した周波数で起動しますので、MAX_SPEEDへ大きすぎる値を設定してはいけません。立ち上がらなくなります。コマンドで、Config.txt で書いた範囲なら変更できますので、最初は、MAX_SPEEDとMIN_SPEEDは、1500000 と、800000 と書いておくようにします。

さあ、再起動してみましょう。

起動後状態の確認

まず、起動直後の状態を確認してみましょう。

cpufreq-info -o で現在のMax-Min、モードが確認できます。ondemand モードは負荷によって周波数を可変するモードです。cpufreq-info -c 0 で、現在の稼働状況を確認できます。-c 0 は、CPU のコア指定をしています。コア4つありますが、全部出すとうっとおしいし、周波数を別々にコントロールはできないようなのでCPU0を指定しました。

ごちゃごちゃでてますが、current CPU frequency is …のところで、800MHz が、確認できます。

オーバークロック ファーストトライ!!

さて、周波数を変更するのは、sudo cpufreq-set -f 1.5GHz でできます。

1.5GHz へオーバークロックできました!

それでは、2.0GHzでは?ならないですよね。Max設定が効いちゃってます。では、上限になってるMax設定を変更して、より高い周波数設定にチャレンジしましょう。

要注意!Max設定の変更の前にモード確認!

このあと、Max設定の変更をしていきますが、注意が必要です。一旦、無難な周波数設定をしたあとにやらないといけません。モードが、ondemand のままだと、負荷にあわせて勝手に周波数をいじられてしまい、そのままダウンしかねません。実は、前の節で一旦、1.5GHzへの変更をかけたのは、このためです。

いきなりやると、こうなります。ハングアップ後はスクショとれないので、スマホで撮った画像です。

一旦、周波数設定をすれば、自動的にuserspace モード(ユーザー設定の周波数で動作する)になってくれますので、Max 設定を変更しても、勝手に高い周波数動作になることはありません。周波数変更後、-o オプションで確認すると、userspace モードになっているのが確認できます。

動作モード、governor

各モード governor については、以下、一覧つけておくので、変更時は注意するようにしましょう。Max設定をいじっていると、ハングアップしかねません。

Governor 動作
performance 負荷に関わらず最大動作周波数で動作
powersave 負荷に関わらず最小動作周波数で動作
ondemand CPU負荷に応じ動的に動作周波数を変更(低遅延で負荷の変化に追従)
conservative CPU負荷に応じ動的に動作周波数を変更(ゆっくりと段階的に変更)
userspace ユーザー指定の動作周波数で動作
schedutil スケジューラによってCPU周波数を選択

MAX設定変更!

では、いよいよ、Max設定を変更します。先ほど、1.5Ghz動作にしましたのでGovernorはuserspaceモードで動作中。MAX設定をコマンドで変更しても、1.5Ghz動作を続けるのでハングアップしたりしません。変更は権限が必要なので、sudoをつけて以下のように設定します。


sudo cpufreq-set --max 2500000

これで、上限値が2.5GHzの1.5GHz動作状態になりました。設定後は、cpufreq-info -o で確認しておきましょう。

MAX設定が変わったので、徐々に周波数をあげてみましょう。


sudo cpufreq-set -f 2.0Ghz

これで、2.0GHz動作になりました。動作確認をしながら、少しづつ上げていきます。ちなみに、私の環境だと、2.2GHzまでは動作しました。

限界突破後の再起動、楽でしょ

限界突破して、ハングアップしても、再起動すれば、Config.txt/Cpufrequtil 内の設定どおり(最大は1.5GHz)にて再起動されますので、SD抜いてConfigを別のマシンで書き換えなおす、なあんて、やっかいなことにはなりません。楽ですよね。次は、でっかいファンでもつけてみようかなぁ。