XPEnology
April 19
Автопереключение регуляторов процессора
Скрипт переключения регуляторов частоты процессора в зависимости от нагрузки (переключает между performance и powersave)
1. Создать файл со следующим содержимым:
#!/bin/bash # Пороговые значения средней нагрузки (1-минутный период) HIGH_THRESHOLD=1.5 LOW_THRESHOLD=0.5 # Интервал проверки в секундах INTERVAL=5 # Проверка доступных governors check_governors() { local governors=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors 2>/dev/null) if [[ ! "$governors" =~ "performance" ]]; then echo "Error: Performance governor not available!" exit 1 fi if [[ ! "$governors" =~ "powersave" ]]; then echo "Error: Powersave governor not available!" exit 1 fi } # Установка governor для всех ядер CPU set_governor() { local governor="$1" for cpu in /sys/devices/system/cpu/cpu[0-9]*; do echo "$governor" > "$cpu/cpufreq/scaling_governor" 2>/dev/null done echo "Governor set to $governor" } # Функция сравнения чисел с плавающей точкой compare_float() { awk -v n1="$1" -v n2="$2" 'BEGIN { if (n1 > n2) exit 0; else exit 1 }' } # Основной цикл main() { check_governors echo "Starting CPU frequency governor control..." echo "High threshold: $HIGH_THRESHOLD | Low threshold: $LOW_THRESHOLD | Interval: $INTERVAL sec" while true; do local load=$(awk '{print $1}' /proc/loadavg) local current_gov=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor) if compare_float "$load" "$HIGH_THRESHOLD"; then [[ "$current_gov" != "performance" ]] && set_governor "performance" elif compare_float "$LOW_THRESHOLD" "$load"; then [[ "$current_gov" != "powersave" ]] && set_governor "powersave" fi sleep "$INTERVAL" done } # Запуск скрипта main
2. Сохранить как cpu_gov.sh и сделать исполняемым:
chmod +x cpu_gov.sh
sudo ./cpu_gov.sh