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
Шума нет, не греется, время автономной работы возрастает в разы.