Обсуждение участника:Константавр — различия между версиями

Материал из Rosalab Wiki
Перейти к: навигация, поиск
(Содержимое страницы заменено на «Оставляйте все свои замечания тут, на виду у всех. Пусть мне будет стыдн...»)
 
(не показана одна промежуточная версия этого же участника)
Строка 1: Строка 1:
== Решение проблемы перегрева ноутбуков: Не для публикации ==
+
Оставляйте все свои замечания тут, на виду у всех. Пусть мне будет стыдно :)
 
+
'''"Проба пера", без картинок, не хватает форматирования и глаза грамотного редактора'''</br>
+
Владельцы лэптопов (или ноутбуков, кому как удобнее), часто испытывают проблемы с охлаждением, тут сказывается недостаток места в корпусе и если охлаждение спроектировано не оптимально или электроника не качественная, то у пользователя рано или поздно появляются проблемы. Вентилятор гудит на полную мощность, хотя Вы ничего не делаете, а то и вовсе выключается.
+
Раз Вы попали на эту страницу, значит этот вопрос Вас волнует. Что же, давайте разберёмся с этим вопросом. Если Вы начинающий пользователь, не бойтесь, я постараюсь сделать всё максимально доступно и сильно не вдаваться в технические вопросы.<br />
+
Расставим точки над i - Описаное решение на 100% подходит Роса линуксу с рабочим окружением KDE, если у Вас другой дистрибутив или рабочее окружение, то некоторые команды следует заменить. Рассказывать по все варианты я не буду, это просто собьёт с толку.<br />
+
Чистка кулеров (вентиляторов) тоже не входит, в руководство, на счёт этого скажу просто, кулер надо почистить В ПЕРВУЮ ОЧЕРЕДЬ и если не умеете, лучше отнесите в мастерскую, там его почистят, поменяют пасту, если что, переберут. (но не слушайте их, если скажут что линукс это не правильно, они его просто не знают)
+
 
+
== Как наблюдать за температурой ==
+
 
+
Запускаем системный монитор. Для этого нажмите на значок '''РокетЛаунчера''' (меню запуска приложений внизу слева на панели) и найдите '''Системный монитор''' и запустите его. Если не получается, не беда, вверху меню есть строка поиска, просто напишите в ней '''системный монитор''' он и появится.<br />
+
Что мы видим? список запущеных процессов, давайте сразу посмотрим, кто "ест" больше всех - нажмите вверху столбца '''% ЦП'''. Видите, больше всех ест системный монитор. Есть ещё одна вкладка '''Общая загрузка системы''', посмотрим, загрузка процессора, занятая память, сеть, Температуры нет. Сейчас сделаем: В меню '''Файл''' выберите '''Новая вкладка'''. Заголовок - пишите '''Температура''', строк - а сколько у Вас ядер процессора? В основном 2 или 4. Колонок - 2. и ОК.
+
Сбоку Вы видите разворачивающийся список. Выберите '''CPU Load - CPU 1 - Clock frequency'''. Нажмите на ней мышкой и перетащите на первое пустое поле, выберите '''числа''' - видите, это частота Вашего процессора (первое ядро). Сделайте тоже самое для каждого ядра процессора. Теперь перейдём к температурным датчикам: '''ACPI-Thermal Zone-0-Temperature''' - перетащите на пустое поле и выберите график. Если в Thermal Zone есть ещё датчики, сделайте тоже самое. А также в '''Hardware Sensors''', вытащите их все, чем больше тем нагляднее. Можете полюбоваться этой красотой :) Мы видим что как только частота поднимается, поднимается и температура.
+
 
+
== Управление частотой процессора ==
+
 
+
Итак, начнём с проверки, загружен ли модуль ядра для управления частотой процессора (а вдруг). В '''РокетЛаунчере''' ищем '''Konsole''' (Терминал), запустите его. Если не получается, не беда, вверху меню есть строка поиска, просто напишите в ней '''konsole''' он и появится. Откроется страшное чёрное окно, не бойтесь его, ведь теперь Вы хакер :) Ткните мышкой в это окно, чтобы убедиться что Вы там. Напишите слово '''su''' и нажмите клавишу Enter, теперь пароль root пользователя, вводите внимательно, Вы не увидите ввода символов и не сможете стереть неправильно введённый символ, но если не получилось, не бойтесь напишите опять '''su''' и повторите пароль. Если всё получилось, то в конце последней строки будет значок #, что означает что теперь Вы можете делать с системой что угодно. Этого то нам и надо :) Теперь пишем команду '''cpupower -c all frequency-info''' Жмём Enter и смотрим:
+
<pre>
+
analyzing CPU 0:
+
driver: powernow-k8
+
CPUs which run at the same hardware frequency: 0
+
CPUs which need to have their frequency coordinated by software: 0
+
maximum transition latency: 1000 ns.
+
hardware limits: 500 MHz - 2.00 GHz
+
available frequency steps: 2.00 GHz, 1000 MHz, 500 MHz
+
available cpufreq governors: conservative, userspace, powersave, ondemand, performance
+
current policy: frequency should be within 500 MHz and 2000 MHz.
+
The governor "ondemand" may decide which speed to use
+
within this range.
+
current CPU frequency is 1000 MHz (asserted by call to hardware).
+
boost state support:
+
Supported: no
+
Active: no
+
analyzing CPU 1:
+
driver: powernow-k8
+
CPUs which run at the same hardware frequency: 1
+
CPUs which need to have their frequency coordinated by software: 1
+
maximum transition latency: 1000 ns.
+
hardware limits: 500 MHz - 2.00 GHz
+
available frequency steps: 2.00 GHz, 1000 MHz, 500 MHz
+
available cpufreq governors: conservative, userspace, powersave, ondemand, performance
+
current policy: frequency should be within 500 MHz and 2000 MHz.
+
The governor "ondemand" may decide which speed to use
+
within this range.
+
current CPU frequency is 1000 MHz (asserted by call to hardware).
+
boost state support:
+
Supported: no
+
Active: no
+
</pre>
+
В этом выводе нас интересуют строки:
+
'''driver: powernow-k8''' Как видите, драйвер у меня загружен, у вас скорее всего будет другой драйвер, но главное он есть.
+
'''available frequency steps 2.00 GHz, 1000 MHz, 500 MHz''' Частоты процессора на которых он может работать.
+
'''The governor"ondemand" may decide which speed to use''' Политика энергосбережения, это тоже важно. ondemand - это хорошо.
+
Итак всё в порядке, можете переходить к разделу [[Регулировка температуры]]
+
 
+
== проблемы с модулем ядра ==
+
 
+
А тех же кому не повезло с драйвером (такое редко, но всётаки бывает), попрошу остаться. Если Вы видите это:
+
<pre>
+
analyzing CPU 0:
+
  no or unknown cpufreq driver is active on this CPU
+
  boost state support:
+
    Supported: no
+
    Active: no
+
analyzing CPU 1:
+
  no or unknown cpufreq driver is active on this CPU
+
  boost state support:
+
    Supported: no
+
    Active: no
+
</pre>
+
Видите? '''no or unknown cpufreq driver is active on this CPU''' Драйвер не загружен и поэтому не регулируется частота процессора. Что делать? Надо попробовать его загрузить, но какой выбрать?
+
*'''acpi_cpufreq''' Если у Вас процессор Intel, то этот драйвер скорее всего подойдёт.
+
*'''p4_clockmod''', '''speedstep-ich''', '''speedstep-smi''' - Линейка устаревших поцессоров Intel
+
*'''powernow-k7''' и '''powernow-k8''' процессоры AMD
+
Можете ввести команду cat /proc/cpuinfo, чтобы больше узнать о процессоре
+
Сильно не пугайтесь, если Вы попытаетесь загрузить не правильный драйвер - 1)он просто не загрузится, 2)его всегда можно выключить командой rmmod (и имя модуля)
+
Теперь пробуем загрузить его вручную - переключаемся опять в консоль и пишем команду '''modprobe acpi_cpufreq''' или modprobe powernow-k8 или другой модуль, жмём Enter. Не ругается? Посмотрим, завелось ли? В консоли нажмите на клавиатуре клавишу "стрелка вверх", или "стрелка вниз", чтобы найти команду которой мы смотрели работу процессора ('''cpupower -c all frequency-info'''), потом нажмите Enter. Теперь показывает драйвер и частоту? Ура! Вы победили злобного дракона! Теперь команда '''cpupower -c all frequency-set -g ondemand''' указываем какую политику энергосбережения использовать Переходим к следующему разделу
+
+
== Регулировка температуры ==
+
 
+
Посмотрим, что говорят наши датчики температуры? Опять же в консоли пишем '''sensors''' и видим:
+
<pre>
+
acpitz-virtual-0
+
Adapter: Virtual device
+
temp1:        +57.0°C  (crit = +105.0°C)
+
 
+
k10temp-pci-00c3
+
Adapter: PCI adapter
+
temp1:        +60.5°C  (high = +70.0°C)
+
</pre>
+
Это у моего компьютера такое, обратите внимание на '''(crit = +105.0°C)''' - это температура до которой он не должен доходить, у вашего может и другая температура и датчик другой (но acpitz-virtual-0 всегда будет, на него и будем опираться). Теперь нам надо создать два скрипта для контроля температуры. Для этого запустите '''Dolphin''' (он рядом со значком Рокет лаунчера). Убедитесь что вы находитесь в домашней папке. Теперь в пустом месте нажмите правой кнопкой мыши и в появившемся меню - Создать - Текстовый файл. Введите имя файла '''temperature.sh''' теперь ОК. В домашней папке появится файл throttle.sh Щёлкните по нему два раза, откроется текстовый редактор. В редакторе вставьте ниже приведённый текст:</br>
+
'''Примечание:''' тут хотелось бы подсветку синтаксиса
+
<pre>
+
#!/bin/bash
+
# temp_throttle.sh max_temp
+
 
+
# USE CELCIUS TEMPERATURES.
+
 
+
if [ $# -ne 1 ]; then
+
# If tempurature wasn't given, then print a message and exit.
+
echo "Please supply a maximum desired temperature in Celcius." 1>&2
+
echo "For example:  temp_throttle.sh 60" 1>&2
+
exit 2
+
else
+
#Set the first argument as the maximum desired temperature.
+
MAX_TEMP=$1
+
fi
+
 
+
# The frequency will increase when low temperature is reached.
+
let LOW_TEMP=$MAX_TEMP-3
+
 
+
CORES=$(nproc) # Get number of CPU cores.
+
echo -e "Number of CPU cores detected $CORES\n"
+
 
+
# For some reason the temperatures internally have three zero's behind them.
+
MAX_TEMP=${MAX_TEMP}000
+
LOW_TEMP=${LOW_TEMP}000
+
 
+
declare -a FREQ_LIST=($(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies))
+
let CURRENT_FREQ=1
+
 
+
function set_freq {
+
        echo ${FREQ_LIST[$1]}
+
        for((i=0;i<$CORES;i++)); do
+
                echo ${FREQ_LIST[$1]} > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_max_freq
+
        done
+
}
+
 
+
function throttle {
+
        if [ $CURRENT_FREQ -ne $((${#FREQ_LIST[@]}-1)) ]; then
+
                let CURRENT_FREQ+=1
+
                echo -n "throttle "
+
                set_freq $CURRENT_FREQ
+
        fi
+
}
+
 
+
function unthrottle {
+
        if [ $CURRENT_FREQ -ne 0 ]; then
+
                let CURRENT_FREQ-=1
+
                echo -n "unthrottle "
+
                set_freq $CURRENT_FREQ
+
        fi
+
}
+
 
+
function get_temp {
+
# Get the system temperature.
+
# If one of these doesn't work, the try uncommenting another.
+
+
        TEMP=$(cat /sys/class/thermal/thermal_zone0/temp)
+
        #TEMP=$(cat /sys/class/hwmon/hwmon0/temp1_input)
+
        #TEMP=$(cat /sys/class/hwmon/hwmon1/device/temp1_input)
+
}
+
 
+
while true; do
+
get_temp
+
        if  [ $TEMP -gt $MAX_TEMP ]; then # Throttle if too hot.
+
                throttle
+
        elif [ $TEMP -le $LOW_TEMP ]; then # Unthrottle if cool.
+
                unthrottle
+
        fi
+
        sleep 5
+
done
+
</pre>
+
Сохраните файл и закройте редактор.
+
Топерь также создадим файл с названием starttemp.sh И вставим нижеприведённый текст:
+
<pre>
+
#!/bin/bash
+
# ограничитель температуры
+
needed_module="" #Тут Вставьте нужный драйвер в кавычках
+
governor="ondemand" # Политика энергосбережения
+
temperature=88 # поставьте максимальную температуру, по умолчанию 88 градусов
+
cpufreq=/sys/bus/cpu/devices/cpu0/cpufreq #Тут оставил место для изменения пути, если надо в других дистрибутивах
+
if [${needed_module} != ""] # проверяем, выбран ли модуль ядра
+
then
+
if ! [ -e ${cpufreq} ] # если такая папка не существует, значит модуль не загружен
+
then modprobe ${needed_module} # загружаем
+
fi
+
fi
+
cpupower -c all frequency-set -g ${governor} # устанавливаем нужную политику
+
killall temp_throttle.sh #если до этого был запущен регулятор температуры, убиваем его
+
# и запускаем снова
+
/usr/local/bin/throttle.sh ${temperature} &
+
exit 0
+
</pre>
+
Тут остановимся подробнее:
+
*'''needed_module=""''' - тут в кавычках можно проставить свой модуль ядра(это нужно тем у кого он не загружается сам при старте системы)
+
*'''governor="ondemand"''' - выставить политику энергосбережения. ondemand - быстрый разгон до максимума по требованию, conservative - медленнее разгоняется и притормаживает, мне больше нравится, performance - максимальная частота постоянно, для перегревающегося ноутбука не вариант. и powersave - максимальное энергосбережение, тоже не вариант, это постоянно работать на минимуме мощностей.
+
*'''temperature=88''' У меня критическая температура 105°C, я скинул 17°, чтобы компьютер успел среагировать, да и вообще, больше 90° не надо. Вы же посчитайте от своей критической температуры.
+
Сохраните файл и закройте редактор.
+
Теперь дадим разрешение на запуск этих файлов: В Dolphin (в домашней папке) выделите оба файла и нажмите на них правой кнопкой мыши, в открывшемся меню - Свойства - Вкладка Права - поставить галочку Исполняемый файл и OK. Теперь Вы разрешили запуск скриптов. Но их надо поместить на место. Перейдите в консоль (вы её не закрыли? если закрыли, то запустите снова и волучите права root, как в начале. Теперь впишите туда команды (внимание, не добавляйте лишних пробелов в конце):
+
<code>mv starttemp.sh /etc/pm/power.d/</code>
+
Нажмите Enter
+
<code>mv throttle.sh /usr/local/bin/</code>
+
Нажмите Enter
+
Теперь все файлы настроены и помещены на место. Можно испытывать. Вытащите шнур питания компьютера, подождите пять секунд и снова вставьте. Теперь запустите '''Системный монитор''', переключите на таблицу процессов, в строке фильтра напишите throttle. Есть он в списке? тогда всё хорошо, переходим на вкладку температура и смотрим что происходит. Для наглядности запустите всё то от чего греется компьютер, например зайдите на youtube, найдите hd video, запустите два-три экземпляра на лучшем качестве и смотрите за температурой, поцессор нагружен на 100%, частота максимальная, температура растёт и вдруг частота начинает снижаться, а следом и температура. Это работает наш скрипт.
+

Текущая версия на 19:37, 18 января 2013

Оставляйте все свои замечания тут, на виду у всех. Пусть мне будет стыдно :)