Пришлось сегодня на рабочий годовалый ноут (Lenovo Y50-70 i7-4710HQ@2.50GHz) втулить gentoo (дуалбутом). Ноут и под виндой шумел жутко и грелся как печка, а под линуксом да еще при сборке гетушных пакетов вообще на «взлет пошел», и греется как сковородка. Окозалось что мой CPU хоть и позиционируется как 2.5GHz но при сильной нагрузке он разгоняется аж до 3.5GHz - отсюда шум и разогрев недецкий.
Решил я ноут перевести в более комфортный режим работы, еще года 3-4 назад я для похожей задачи набросал простенький скрипт (cputune), пользуясь случаем его немного окультурил и решил тут выложить - вдруг кому понадобтся, да и кто шел начинает изучать может интересно будет посмотреть.
#!/bin/bash
cpus=(`ls /sys/devices/system/cpu|grep -e 'cpu[0-9]\+'`)
cpu0=${cpus[0]}
cpuN=${#cpus[*]}
min=`cat /sys/devices/system/cpu/${cpu0}/cpufreq/cpuinfo_min_freq`
max=`cat /sys/devices/system/cpu/${cpu0}/cpufreq/cpuinfo_max_freq`
function setGovernor {
for cpu in ${cpus[*]}; do
echo "${1}" > "/sys/devices/system/cpu/${cpu}/cpufreq/scaling_governor"
done
}
function toHZ {
i=$((${#1} - 1))
case "${1:$i:1}" in
'G' ) r=$((${1:0:$i} * 1000000)) ;;
'M' ) r=$((${1:0:$i} * 1000)) ;;
* ) r="${1}" ;;
esac
echo -n $r
}
case "${1}" in
"power" )
setGovernor "powersave"
;;
"speed" )
setGovernor "performance"
;;
"max" )
if [ -z "${2}" ]; then
fr=${max}
else
fr=`toHZ ${2}`
fi
for cpu in ${cpus[*]}; do
echo "${fr}" > "/sys/devices/system/cpu/${cpu}/cpufreq/scaling_max_freq"
done
;;
"min" )
if [ -z "${2}" ]; then
fr=${min}
else
fr=`toHZ ${2}`
fi
for cpu in ${cpus[*]}; do
echo "${fr}" > "/sys/devices/system/cpu/${cpu}/cpufreq/scaling_min_freq"
done
;;
"num" )
if [ -z "${2}" ]; then
n=${cpuN}
else
n=${2}
fi
for cpu in ${cpus[*]}; do
if [ ${n} -gt 0 ]; then
if [ -f "/sys/devices/system/cpu/${cpu}/online" ]; then
echo '1' > "/sys/devices/system/cpu/${cpu}/online"
fi
((n --))
else
echo '0' > "/sys/devices/system/cpu/${cpu}/online"
fi
done
;;
"" )
;;
* )
echo -n "CAPABILITIES: cpus: ${cpuN}, min freq: ${min}, max freq: ${max}, governors: "
cat "/sys/devices/system/cpu/${cpu0}/cpufreq/scaling_available_governors"
echo
;;
esac
active=0
for cpu in ${cpus[*]}; do
if [ -f "/sys/devices/system/cpu/${cpu}/online" ]; then
st=`cat "/sys/devices/system/cpu/${cpu}/online"`
if [ "${st}" = "1" ]; then
((active ++))
fi
else
((active ++))
fi
done
min=`cat /sys/devices/system/cpu/${cpu0}/cpufreq/scaling_min_freq`
max=`cat /sys/devices/system/cpu/${cpu0}/cpufreq/scaling_max_freq`
echo -n "STATUS: cpus online: ${active}, min freq: ${min}, max freq: ${max}, governor: "
cat "/sys/devices/system/cpu/${cpu0}/cpufreq/scaling_governor"
cat /proc/cpuinfo | grep 'MHz'
Использование:
Посмотреть информацию о CPU:
cputune info
Перевести ЦПУ в энергосберегающий режим:
cputune power
Перевести ЦПУ в «производительный» режим:
cputune speed
Установить верхний предел частоты процесора в 2.5GHz (2500MHz):
cputune max 2500M
Установить нижний предел частоты процессора в 1GHz:
cputune min 1G
Активировать только первые 2 ядра CPU (в моем случае это будет 1 едро + второе виртуальное - гиптрединг):
cputune num 2
Если хотите сбросить какойто параметр в значение по умолчанию - просто не опускает значение. Например активировать все ядра:
cputune num
Убрать верхнее ограничение по частоте:
cputune max
В принципе все довольно просто и очень эффективно получилось, для стандартной работы я делаю:
cputune max 2500M
Ноут работает довольно тихо и быстро.
Если нужно долго работать от батареи то:
cputune max 1G
cputune num 2
Шума нету, не греется, время автономной работы возрастает в разы