Laptop энергопотребление и шум

Материал из MediaWiki
Перейти к навигации Перейти к поиску

Перенесено из 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

Шума нет, не греется, время автономной работы возрастает в разы.