Raspberry Piの最高温度設定について

## 追記：2021年1月28日
この記事は、ラズパイ3Bの発売時に書いたものですが、ラズパイ4でも同じく最高温度設定が使えます。ラズパイ3B+のみ、もうひとつ設定が追加されているので、紹介しておきます。

ラズパイ3B+のみ、temp_limitに加えて、temp_soft_limitという項目が増えました。
デフォルトでは、temp_soft_limit=60（最高70°C）で、設定温度になると1.4GHzから1.2GHzへ下がります。3Bのスロットリングは、1.2GHzからすぐに600MHzに落ちてしまうので、それと比べるとソフト、という訳ですね。60-70°Cになったら少しスロットルを絞り、80°Cを超えたら85°Cに向けてさらに絞るという感じ？　ラズパイ3B、4Bには無い。[ref: Overclocking options in config.txt](https://www.raspberrypi.org/documentation/configuration/config-txt/overclocking.md)

オマケ：画面右上に出る高温警告アイコン[(from Firmware warning icons)](https://www.raspberrypi.org/documentation/configuration/warning-icons.md)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5412/0f9cf46e-1f6c-1360-7042-8496f6b9e249.png" width=10%>スロットリング中<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5412/8bc7146a-4f2a-8814-d4e3-7e2378dfa943.png" width=10%>最高温度85°Cに到達



**追記終わり。＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝**


##2016年2月末ラズパイ3が熱かった（人気、温度）

先週末、2017年3月4日、5日、ラズパイ5才のバースデーパーティーが開かれました。
https://www.raspberrypi.org/blog/whats-on-raspberry-pi-birthday-2017/
https://www.youtube.com/watch?v=omenFAcfR8k

ちょうど1年前、Raspberry Pi 3Bが発表されました。当時、ラズパイ2から1年という早い登場、クロック向上、WiFi/Bluetooth内蔵、ということで話題になりました。人気沸騰。と、同時に、めちゃくちゃCPU温度が上がる！という記事がありました。温度も熱い。

"The Raspberry Pi 3 Does Not Halt and Catch Fire"
「ラズベリーパイ3が止まらなくて火が出る」
http://makezine.com/2016/03/02/raspberry-pi-3-not-halt-catch-fire/
![hot-pi.png](https://qiita-image-store.s3.amazonaws.com/0/5412/d9256f9b-98b4-5c42-edb1-ac68bb4fcbc3.png)
Thermal image of the Raspberry Pi 3. (Credit: [Gareth Halfacree](https://freelance.halfacree.co.uk/))

ラズパイ財団サイドからも、記事が上がりました。
"No, your Raspberry Pi 3 won't overheat in everyday use, says its creator"
「いいえ、通常使用ではラズベリーパイ3はオーバーヒートしない、創造者曰く」
http://www.zdnet.com/article/no-your-raspberry-pi-3-wont-overheat-in-everyday-use-says-its-creator/

動作限界温度の85°Cに向けて80°Cからスロットリングが始まり、問題なく85°Cで止まることが説明されています。

ファームウェアのアップデートでスロットリングのバグが修正されたような形跡もありましたが、ラズパイもいよいよヒートシンクやファンが必要かということで、一旦落ち着きました。

ラズパイ2よりすごく速い、と言うためにちょっと無理目な設定になっている、とも言えます。たぶん。


##もうちょっと低い温度で抑えられないのか？

ただ、センサーで85°Cということは、部分的にはもっと高いポイントもあるかも、とか、ケースに密閉された時に大丈夫かということで不安でした。さらに、子ども達が文字通りパーソナルに使えるコンピューターとして家庭に入ることを考えると、かなり心配でした。プラスティックなら融け始める温度だし。

##最高温度の制限ができる！

ラズパイが密閉されて使用される案件に関わっていて、なんとかならないかと調べたところ、最高温度の制限が可能ということが判明。できるやん。

##設定方法

/boot/config.txtにtemp_limit=75などと書く。以上。

この場合、70°Cからスロットリングが始まり、CPUクロックが標準の1.2GHzから段階的に600MHzまで低速化、75°C以下を保てるようになります。スロットル時の最低CPUクロックも同様にarm_freq_min=400などと、さらに低く設定できますが、こちらよりも最高温度設定が優先され300MHzに落ちたりするので、あえて設定する必要はない模様。

デフォルト、省略時設定は、85°Cです。80°Cからスロットルを絞り、85°Cを越えないように制御。

追記：ラズパイ3B+にだけtemp_soft_limitがあります。デフォルト60°C、最高70°Cまで設定可能。設定温度で1.4GHz → 1.2GHzへスロットリング。ラズパイ3B、4Bには無い。

```
temp_soft_limit=65
temp_limit=75
```

##現在のCPU速度を知るコマンドの変遷

昔はこれでした。ちょっと前に使えなくなりました。
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
ちょっと前(2017年1月）はこれが使えていました。
sudo cat /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq
参考：http://stackoverflow.com/questions/37426578/how-raspbian-can-control-temperature-by-setup-temp-limit-in-config-txt#_=_


カーネル4.9.11（現在の標準は4.4）で試したところ、これは使えます。
vcgencmd measure_clock arm

2019年2月8日追記
カーネル4.14.79で見てみたら、3種類とも使えるように修復（？）された模様。

##手軽にCPUをいじめる方法

設定がうまくいっているのか調べたい時、以下のようにします。

yes > /dev/null & これを8連発とか。
killall yes いじめ終了の時。

連続的にCPUクロックと温度を表示する時は、こんな感じで。
while true; do vcgencmd measure_clock arm ; vcgencmd measure_temp; sleep 1; done

どうしてもパフォーマンスが欲しい時は、ヒートシンクやファンなど放熱対策を。そういう必要がない時は、最高温度の設定をしておきましょう。


##その他、関連コマンド
vcgencmd measure_clock arm　　現在のCPUクロックを表示
vcgencmd measure_temp　　　　現在の温度を表示
vcgencmd get_config int　　　　各種設定確認

vcgencmd get_throttled　　スロットル情報の表示

スロットル情報の読み方(throttled=0x60002 など)：
下の3ビットは現在の状態
　0: under-voltage　コア電圧低下中
　1: arm frequency capped　CPUクロック制限中
　2: currently throttled　スロットリング実施中
上の3ビットは履歴
　16: under-voltage コア電圧低下を記録
　17: arm frequency CPUクロック制限を記録
　18: throttling スロットリング実施を記録

###参考ページ
[RPI vcgencmd usage](http://www.elinux.org/RPI_vcgencmd_usage)
[Runcommand warning if voltage/temperature throttling]
(https://retropie.org.uk/forum/topic/2295/runcommand-warning-if-voltage-temperature-throttling)