一開始用 Banana Pi 架設 WordPress 的時候,因為散熱的考量,所以沒有使用手上效能較好的 banana pi m2 plus (cortex A7 quad core 1.34GHz),先使用了就算夏天35度高溫 CPU 也只有40多度的 banana pi (cortex A7 dual core 1GHz),而且不用加散熱片!但用了一陣子覺得速度實在太慢了,上傳圖片或是儲存文章都等很久,於是把目標轉移到火熱的 m2 plus。
雖然之前我把它當 android 機上盒,但他跑 android 也蠻頓,算然有放散熱片,還是很容易熱當,於是讓他退役。現在又燃起讓他回歸之心。
首先一樣用 Armbian 裝 docker 讓他起 WordPress 和 MySQL container。在安裝的時候 cpu 溫度不斷飆升,有時還被限制只能使用一核心,最後待機溫度落在65 ~70附近,那時候室溫約莫27、28度。
想說讓他先跑一段時間看看,結果才沒一個小時就熱當,穩定性超差!研究 Armbian 論壇發現,banana pi m2 plus 其實是抄 Orange pi,但不知道是為了 cost down 還是什麼原因,沒有使用 programmable voltage regulator,導致 CPU 降頻的時候電壓依然在 1.3v,沒有跟著往下調,所以待機溫度才降不下來。
為了能夠使用,勢必要為他加裝風扇做主動散熱。於是我特地到以前唸研究所時最常跑的今華電子材料行,尋找改裝零件。
最後帶回一個 7cm 12v 風扇,一個風扇鐵網,和兩長一短的銅柱,總共101 元,還在預算範圍內。立刻回家進行改裝!
我的想法是,利用之前購買的外殼。去掉上方的透明壓克力片,找螺絲孔間距接近主板上銅柱距離的風扇,先用小銅柱延長原來的高度,避免風扇葉片打到散熱片,然後再用螺絲直接鎖入。
由於主板另一側為了避開網路孔等接頭,所以銅柱開孔位置不一樣,我打算使用一根較長的銅柱直接撐在右下角的電源孔上面,另一頭與風扇鎖住,這樣就有三個支撐點可以讓風扇架上去。
先試裝看看,看起來頗 ok。
風扇電源的部分,主板上的 20 pin 有 5V 和 GND 可以使用,雖然購買的風扇是 12V,但硬接也只是轉速較慢而已,沒差。
試著直接把風扇插頭插上去,可以插,但是 3 pin 風扇的針腳定義依序是 5V (red)、轉速信號 (yellow)、GND (black)。20 pin 的部分從右上角開始為 2、4、6、8 pin ,分別是 5V、5V、GND、GPIO15。
如果直接從 2 pin 開始嘟上去的話,轉速訊號會對到 4 pin 也就是 5V,我上網查了一下,一般轉速訊號風扇端是 open drain 設計,如果導通的話會拉到 GND,這樣一定會 short。
所以我想從 4 pin 開始嘟,調換原來插頭的轉速信號和 GND 的位置,讓轉速訊號去對接 8 pin,反正沒有使用沒差。
風扇插頭一面有小孔,用一字起頂一下,電線就可以拔出來,掉換位置後再插回插頭,就完成調換,可以完美接上主板了!
啟動後測一下待機溫度,在室溫 25 度下平均落在 34 度左右,降溫非常多!
上網找了這個 python script stress 一下 CPU,最高溫來到 57 度,完全落在可接受範圍內。
#!/usr/bin/env python
"""
Produces load on all available CPU cores
Updated with suggestion to prevent Zombie processes
Linted for Python 3
Source:
insaner @ https://danielflannery.ie/simulate-cpu-load-with-python/#comment-34130
"""
from multiprocessing import Pool
from multiprocessing import cpu_count
import signal
stop_loop = 0
def exit_chld(x, y):
global stop_loop
stop_loop = 1
def f(x):
global stop_loop
while not stop_loop:
x*x
signal.signal(signal.SIGINT, exit_chld)
if __name__ == '__main__':
processes = cpu_count()
print('-' * 20)
print('Running load on CPU(s)')
print('Utilizing %d cores' % processes)
print('-' * 20)
pool = Pool(processes)
pool.map(f, range(processes))
因為只用 5V 去推 12V 的風扇,所以他沒有全速運轉,幾乎聽不到風扇聲,整體改裝結果還不錯!只需要定期清理一下灰塵就可以了!
延伸閱讀:
Raspberry Pi 當機自救!為他開啟 Watchdog 吧!
十分鐘架設自己的 VPN server
參考資料
Simulate CPU load with Python
Quick review of Banana Pi M2+