【Raspberry Pi】オーバークロック限界に挑む!
今回は、ラズパイ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 とか。やってみたって記事はこちら。
ここは、英語だけど、これを解説した日本語記事は、山ほどあります。その中で、まとまっててわかりやすかったのがこちらの記事。
この内容までは、すぐ見つかります。で、ここでまた、新たな疑問と不満。どのぐらいまで上げられるのかってのと、いちいち再起動めんどくせーっていうの。
もし、動的に変えられたら、限界見極めも楽にできるけど、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を別のマシンで書き換えなおす、なあんて、やっかいなことにはなりません。楽ですよね。次は、でっかいファンでもつけてみようかなぁ。
コメント
0 件のコメント :
コメントを投稿