Orange Pi 3 cpufrequtils

OrangePi3にはデフォルトでcpufrequtilsがインストールされていてarmbian-configから動作クロックやモードを変更することができます。

現在は開発バージョンということもありほぼ毎日アップグレードが入っています。

armbian-configから設定した値は保持されるのですがアップグレード後の再起動では初期値に戻ってしまいます。
状況に応じてもう少し簡単に動作クロックを変更できるようにしてみたいと思います。

アップグレード

# apt update && apt upgrade


現在のバージョン
armbian-image-release
カードを作成、インストール時のバージョン
armbian-release
アップグレード後のバージョン

armbian-config system cpu


クロックは9ステップ、governorは6モードあります
minimum 480MHz
maximum 1.8GHz
governor ondemand


設定した値は/etc/default/cpufrequtilsに記載されます。

minimum 480MHz governor ondemand は固定としてmaximumの値を変更します。


アイコンを作成
888MHzから1.8GHzの6Stepを切り替えます。

pythonランチャの作成

TKなどのインストールはZeroの記事を参照
書き換えは簡単に済ませるためsedを実行しています。(4行目を削除、新たに値をインサート)
~/bin/cpufreq.py

#!/usr/bin/python3

from tkinter import *
from tkinter import ttk
import subprocess
import time
import sys

root = Tk()
root.title('Shutdown Menu')
style = ttk.Style()
style.theme_use('default') #('clam', 'alt', 'default', 'classic')

# Frame as Widget Container
frame1 = ttk.Frame(
    root,
    padding=5)
frame1.grid()

# Button 1
def cpu888M():
    subprocess.run("sudo sed -i '4d' /etc/default/cpufrequtils", shell=True)
    subprocess.run("sudo sed -i '4i MAX_SPEED=888000' /etc/default/cpufrequtils", shell=True)
    subprocess.run("sudo systemctl restart cpufrequtils", shell=True)
icon1 = PhotoImage(file='~/.icons/cpu888M.png')
button1 = ttk.Button(
    frame1,
    image=icon1,
    command=cpu888M)
button1.grid(row=1,column=1)

# --- 省略 ---

# Button 6
def cpu180G():
    subprocess.run("sudo sed -i '4d' /etc/default/cpufrequtils", shell=True)
    subprocess.run("sudo sed -i '4i MAX_SPEED=1800000' /etc/default/cpufrequtils", shell=True)
    subprocess.run("sudo systemctl restart cpufrequtils", shell=True)
icon6 = PhotoImage(file='~/.icons/cpu180G.png')
button6 = ttk.Button(
    frame1,
    image=icon6,
    command=cpu180G)
button6.grid(row=2,column=3)

root.mainloop()

cpuは熱くなる


通常のファイルサーバーとしては1.8GHz動作でもほとんど問題ないのですがmp4エンコードなどではcpu温度が90℃を超えてきます。
Raspbianではクロック制御が入ってきますがarmbianではいまのところ無いようです。

http://www.orangepi.org/orangepibbsen/forum.php?mod=viewthread&tid=244

some temp:
cat /sys/devices/virtual/thermal/thermal_zone0/temp
current cpu freq:
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq


cpuには温度に対する何らかの保護回路があると思いますが危険な領域に突入しています。

アイドリング時は1.8GHz動作も変わらず現在のところ50℃以下に治まっています。


cpufrequtilsは実行中でもリアルタイムに制御します。
1.32GHzまで下げると72℃前後で落ち着いてきます。この辺は放熱板とのバランスになりますね。
(適当放熱板では少々役不足のようです)
それでもエンコードスピードはそれほど下がらずRPi3より早い。

通常運用は1.32GHz〜1.49GHzで行こうと考えています。
起動はshutdown.pyを含めてスクリプトで実行しています。(適当にdmenuやボタンに登録)
~/bin/shutdown.sh

#!/bin/sh
~/bin/cpufreq.py &
sleep 1
~/bin/shutdown.py &
sleep 1
xterm -e htop &