LINUX.ORG.RU

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

 , ,


2

2

Пришлось сегодня на рабочий годовалый ноут (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

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

★★★★

Ответ на: комментарий от mandala

У меня там акаунта нету, регестрироваться влом (может позже). Если у кого есть акаунт/желание можете закопипастить, я на авторские права не претендую :)

zaz ★★★★
() автор топика
Ответ на: комментарий от anonymous

Весь мир из костылей и велосипедов. Поздно что-то менять.

mandala ★★★★★
()

Напомнило мой костыль shy-mode, только в отличие от моего, Ваш более прост и универсален (хотя непонятно, зачем он, если есть cpufrequtils и cpupower).

batekman ★★★
()
Ответ на: комментарий от batekman

Я даже и не сомневался что чтото похожее есть, но про cpufrequtils я от Вас первый раз услышал :). А из за врожденной лени мне проще/приятней чтото навелосипедить чем мучать гугл на предмет поиска нужного решения. Особенно когда я точно знаю что я хочу, и как это можно реализовать по быстрому :) .

zaz ★★★★
() автор топика
Ответ на: комментарий от unanimous

У Вас в детстве отбирали все карандаши и фломастеры с криками «Вот тебе картины Репина, прекрати рисовать своё убожество!»? :)

Почему-то складывается именно такое впечатление, когда кто-то недоволен кустарной поделкой простого пользователя, который сделал её just for fun и имел неосторожность поделиться с широкой общественностью.

batekman ★★★
()
Ответ на: комментарий от batekman

в детстве
рисовать своё убожество

Как ты хитро намекнул на отставание ОПа в развитии.

anonymous
()
Ответ на: комментарий от batekman

Да мне всё равно, что ты делаешь, но нормальный взрослый человек предупредил бы о том, что существуют более совершенные решения. Поскольку ты это не сделал, это сделал я за тебя — это форум, мой ответ прочтёшь не только ты, но и другие, в том числе и желающие с помощью твоей поделки решить какие-то свои проблемы. Прочтут и узнают о правильных способах решения.

unanimous ★★★★★
()
Ответ на: комментарий от unanimous

Прочтут и узнают о правильных способах решения.

Мой комп, как хочу, так и решаю. С какой стати другие решения правильней?

И вообще, что такое правильно? Где почитать про это?

mandala ★★★★★
()
Ответ на: комментарий от unanimous

В первом комментарии я сказал ОПу про cpufrequtils и cpupower, если ты мне :) Про TLP только слышал пару раз, поэтому его советовать не могу.

batekman ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.