Laptop энергопотребление и шум: различия между версиями
lor>Cetjs2 м (Откат правок 163.172.227.165 (обсуждение) к версии Mandala) |
Admin (обсуждение | вклад) м (1 версия импортирована) |
(нет различий)
| |
Текущая версия от 21:39, 27 февраля 2023
Перенесено из Laptop энергопотребление и шум. Большое спасибо zaz.
Пришлось сегодня на рабочий годовалый ноутбук (Lenovo Y50-70 i7-4710HQ@2.50GHz) установить gentoo (дуалбутом/второй системой). Ноутбук и под windows шумел жутко и грелся как печка. А под linux, да еще при сборке gentoo-пакетов, вообще на «взлет пошел» и греется как сковородка. Оказалось, что мой CPU хоть и позиционируется как 2.5GHz, но при сильной нагрузке он разгоняется до 3.5GHz — отсюда шум и разогрев не детский.
Решил я ноутбук перевести в более комфортный режим работы. Еще года 3-4 назад я для похожей задачи набросал простенький скрипт (cputune). Пользуясь случаем его немного окультурил и решил тут выложить — вдруг кому понадобится. Да и кто shell начинает изучать — может интересно будет посмотреть.
Скрипт 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
Шума нет, не греется, время автономной работы возрастает в разы.