|
|
(не показаны 2 промежуточные версии этого же участника) |
Строка 1: |
Строка 1: |
− | == Решение проблемы перегрева ноутбуков: Не для публикации ==
| + | Оставляйте все свои замечания тут, на виду у всех. Пусть мне будет стыдно :) |
− | | + | |
− | "Проба пера", без картинок, не хватает форматирования и глаза грамотного редактора
| + | |
− | Владельцы лэптопов (или ноутбуков, кому как удобнее), часто испытывают проблемы с охлаждением, тут сказывается недостаток места в корпусе и если охлаждение спроектировано не оптимально или электроника не качественная, то у пользователя рано или поздно появляются проблемы. Вентилятор гудит на полную мощность, хотя Вы ничего не делаете, а то и вовсе выключается.
| + | |
− | Раз Вы попали на эту страницу, значит этот вопрос Вас волнует. Что же, давайте разберёмся с этим вопросом. Если Вы начинающий пользователь, не бойтесь, я постараюсь сделать всё максимально доступно и сильно не вдаваться в технические вопросы.<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%, частота максимальная, температура растёт и вдруг частота начинает снижаться, а следом и температура. Это работает наш скрипт.
| + | |
Оставляйте все свои замечания тут, на виду у всех. Пусть мне будет стыдно :)