无论您在MikroTik上碰到什么问题,本站都可以为您排忧解难。远离烦恼,腾出您宝贵的精力和时间处理更加有价值的事情。 注册 | 登陆

CM3588的自动CPU调频

近期购买了CM3588,因为使用的全被动散热,在持续30分钟的CPU满载后会出现温度超过70度的情况。为了保障CPU能应对极端负载环境,特此做了一个自动调整CPU主频的脚本。确保CPU温度持续维持在合理的温度范围内,并且尽可能释放最大性能。
脚本默认在70度会开始降频,60度会开始恢复,每10秒循环一次。
 
 

 

BASH脚本
  1. #!/bin/bash  
  2.   
  3. # 温度阈值  
  4. TEMP_THRESHOLD_HIGH=70  # 超过此温度时降低频率  
  5. TEMP_THRESHOLD_LOW=60   # 低于此温度时提高频率  
  6.   
  7. # 0-3核和4-7核的CPU最大频率路径  
  8. CPU0_3_MAX_FREQ_PATH="/sys/devices/system/cpu/cpu[0-3]/cpufreq/scaling_max_freq"  
  9. CPU4_7_MAX_FREQ_PATH="/sys/devices/system/cpu/cpu[4-7]/cpufreq/scaling_max_freq"  
  10.   
  11. # 0-3核和4-7核的频率列表  
  12. AVAILABLE_FREQS_0_3=(408000 600000 816000 1008000 1200000 1416000 1608000 1800000)  
  13. AVAILABLE_FREQS_4_7=(408000 600000 816000 1008000 1200000 1416000 1608000 1800000 2016000 2208000 2256000)  
  14.   
  15. # CPU温度文件路径  
  16. TEMP_PATH="/sys/class/thermal/thermal_zone0/temp"  
  17.   
  18. # 获取当前最大频率的索引  
  19. get_current_freq_index() {  
  20.     local freq_path=$1  
  21.     local freqs=("${!2}")  
  22.     current_freq=$(cat $freq_path)  
  23.     for i in "${!freqs[@]}"do  
  24.         if [ "${freqs[$i]}" -eq "$current_freq" ]; then  
  25.             echo $i  
  26.             return  
  27.         fi  
  28.     done  
  29.     echo -1  
  30. }  
  31.   
  32. # 设置CPU的最大频率  
  33. set_max_freq() {  
  34.     local paths=$1  
  35.     local freq=$2  
  36.     for path in $pathsdo  
  37.         echo "$freq" > "$path"  
  38.     done  
  39. }  
  40.   
  41. # 主逻辑循环  
  42. while true; do  
  43.     # 读取当前温度  
  44.     temp=$(cat "$TEMP_PATH")  
  45.     temp=$((temp / 1000)) # 转换为摄氏度  
  46.   
  47.     # 调整0-3核的频率  
  48.     current_index_0_3=$(get_current_freq_index "/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq" AVAILABLE_FREQS_0_3[@])  
  49.     if [ "$temp" -ge "$TEMP_THRESHOLD_HIGH" ] && [ "$current_index_0_3" -gt 0 ]; then  
  50.         new_index=$((current_index_0_3 - 1))  
  51.         set_max_freq "$CPU0_3_MAX_FREQ_PATH" "${AVAILABLE_FREQS_0_3[$new_index]}"  
  52.         echo "温度: $temp°C,高于${TEMP_THRESHOLD_HIGH}°C,0-3核降至频率: ${AVAILABLE_FREQS_0_3[$new_index]}"  
  53.     elif [ "$temp" -le "$TEMP_THRESHOLD_LOW" ] && [ "$current_index_0_3" -lt $((${#AVAILABLE_FREQS_0_3[@]} - 1)) ]; then  
  54.         new_index=$((current_index_0_3 + 1))  
  55.         set_max_freq "$CPU0_3_MAX_FREQ_PATH" "${AVAILABLE_FREQS_0_3[$new_index]}"  
  56.         echo "温度: $temp°C,低于${TEMP_THRESHOLD_LOW}°C,0-3核升至频率: ${AVAILABLE_FREQS_0_3[$new_index]}"  
  57.     else  
  58.         echo "温度: $temp°C,0-3核频率保持不变: ${AVAILABLE_FREQS_0_3[$current_index_0_3]}"  
  59.     fi  
  60.   
  61.     # 调整4-7核的频率  
  62.     current_index_4_7=$(get_current_freq_index "/sys/devices/system/cpu/cpu4/cpufreq/scaling_max_freq" AVAILABLE_FREQS_4_7[@])  
  63.     if [ "$temp" -ge "$TEMP_THRESHOLD_HIGH" ] && [ "$current_index_4_7" -gt 0 ]; then  
  64.         new_index=$((current_index_4_7 - 1))  
  65.         set_max_freq "$CPU4_7_MAX_FREQ_PATH" "${AVAILABLE_FREQS_4_7[$new_index]}"  
  66.         echo "温度: $temp°C,高于${TEMP_THRESHOLD_HIGH}°C,4-7核降至频率: ${AVAILABLE_FREQS_4_7[$new_index]}"  
  67.     elif [ "$temp" -le "$TEMP_THRESHOLD_LOW" ] && [ "$current_index_4_7" -lt $((${#AVAILABLE_FREQS_4_7[@]} - 1)) ]; then  
  68.         new_index=$((current_index_4_7 + 1))  
  69.         set_max_freq "$CPU4_7_MAX_FREQ_PATH" "${AVAILABLE_FREQS_4_7[$new_index]}"  
  70.         echo "温度: $temp°C,低于${TEMP_THRESHOLD_LOW}°C,4-7核升至频率: ${AVAILABLE_FREQS_4_7[$new_index]}"  
  71.     else  
  72.         echo "温度: $temp°C,4-7核频率保持不变: ${AVAILABLE_FREQS_4_7[$current_index_4_7]}"  
  73.     fi  
  74.   
  75.     sleep 10  
  76. done  

 

Tags: arm, 3588, nas, cpu, 调频

« 上一篇 | 下一篇 »

 

发表评论

评论内容 (必填):