убунту на макбук про 10 (2013) перегревается

Вопрос или проблема

Я использую Ubuntu на MacBook Pro (2013), и он перегревается по сравнению с macOS, даже с включенным mbpfan. Есть ли другие способы дальше снизить рабочую температуру? Я вижу, что еще в 2010 году был способ вручную установить правила для вентилятора по этой ссылке

У меня есть MacBook Pro с графической картой Intel/Nvidia, и я включил графическую карту Nvidia
Использование GPU Nvidia

Я установил mbpfan с следующей конфигурацией температуры:

[general]
# см. https://ineed.coffee/3838/a-beginners-tutorial-for-mbpfan-under-ubuntu для значений
# 
# mbpfan загрузит макс / мин скорость из файлов, создаваемых драйвером applesmc. Если эти файлы не найдены, он установит все вентиляторы на значения по умолчанию min_speed = 2000 и max_speed = 6200
# установив значения для скоростей в этой конфигурации, он переопределит любые значения, которые найдет в:
# /sys/devices/platform/applesmc.768/fan*_min
# /sys/devices/platform/applesmc.768/fan*_max
# или значения по умолчанию.
#
# несколько вентиляторов могут быть настроены, используя ключ конфигурации min_fan*_speed и max_fan*_speed
# используемый номер будет соответствовать номеру файла вентилятора в драйвере applesmc, который используется для управления скоростью вентилятора.
#
#min_fan1_speed = 2000  # укажите *низкое* значение "cat /sys/devices/platform/applesmc.768/fan*_min"
#max_fan1_speed = 6200  # укажите *высокое* значение "cat /sys/devices/platform/applesmc.768/fan*_max"
#low_temp = 63          # попробуйте диапазоны 55-63, по умолчанию 63
low_temp = 55           # попробуйте диапазоны 55-63, по умолчанию 63
#high_temp = 66         # попробуйте диапазоны 58-66, по умолчанию 66
high_temp = 58          # попробуйте диапазоны 58-66, по умолчанию 66
max_temp = 86           # возьмите максимальное значение, возвращаемое командой "cat /sys/devices/platform/coretemp.*/hwmon/hwmon*/temp*_max", разделите на 1000
polling_interval = 1    # по умолчанию 1 секунда

Хотя температура моего MacBook все еще очень высока, кто-нибудь знает, как дальше контролировать проблему перегрева на macbook-ubuntu?

$ sensors
applesmc-isa-0300
Адаптер: ISA адаптер
Левая сторона  : 3474 RPM  (мин = 2160 RPM, макс = 5940 RPM)
Правая сторона : 3042 RPM  (мин = 2000 RPM, макс = 5499 RPM)
TB0T:         +36.0°C  
TB1T:         +36.0°C  
TB2T:         +34.5°C  
TC0E:         +65.5°C  
TC0F:         +67.5°C  
TC0P:         +51.5°C  
TC1C:         +63.0°C  
TC2C:         +63.0°C  
TC3C:         +63.0°C  
TC4C:         +61.0°C  
TCGC:         +63.0°C  
TCSA:         +58.0°C  
TCTD:          -0.2°C  
TCXC:         +65.2°C  
TG0D:         +61.8°C  
TG0P:         +56.0°C  
TG1D:         +64.0°C  
TG1F:         +63.2°C  
TG1d:         +58.0°C  
TH0A:         +37.8°C  
TH0B:         +40.8°C  
TH0V:         +41.0°C  
TH0a:         +37.8°C  
TH0b:         +40.8°C  
TH0c:        -127.0°C  
TH0x:         +40.8°C  
TM0P:         +52.0°C  
TM0S:         +51.2°C  
TMBS:         +51.0°C  
TP0P:         +53.5°C  
TPCD:         +56.0°C  
TS0D:        -127.0°C  
TS0P:        -127.0°C  
TS1D:        -127.0°C  
TS1P:        -127.0°C  
TW0P:         +47.5°C  
Ta0P:         +42.8°C  
TaSP:         +40.0°C  
Th1H:         +44.2°C  
Th2H:         +53.0°C  
Ts0P:         +33.0°C  
Ts0S:         +40.0°C  
Ts1S:         +41.0°C  

BAT0-acpi-0
Адаптер: ACPI интерфейс
in0:          12.40 V  
temp:         +36.3°C  
curr1:         0.00 A  (среднее =  +0.00 A)

coretemp-isa-0000
Адаптер: ISA адаптер
Package id 0:  +64.0°C  (высокая = +87.0°C, критическая = +105.0°C)
Core 0:        +64.0°C  (высокая = +87.0°C, критическая = +105.0°C)
Core 1:        +64.0°C  (высокая = +87.0°C, критическая = +105.0°C)
Core 2:        +64.0°C  (высокая = +87.0°C, критическая = +105.0°C)
Core 3:        +64.0°C  (высокая = +87.0°C, критическая = +105.0°C)

BAT0-virtual-0
Адаптер: Виртуальное устройство
temp1:        +36.3°C  

Я решил свою проблему перегрева с помощью скрипта throttle/unthrottle 🙂

  1. Установить mbpfan : https://github.com/linux-on-mac/mbpfan
  2. Установить cpupower: https://manpages.debian.org/buster/linux-cpupower/cpupower.1.en.html
  3. Используйте кастомизированный скрипт throttle/unthrottle от Sepero: http://seperohacker.blogspot.com/2012/10/linux-keep-your-cpu-cool-with-frequency.html
    https://github.com/Sepero/temp-throttle
    Я адаптировал скрипт Sepero, используя cpupower:
#!/bin/bash

# Использование: temp_throttle.sh max_temp
# ИСПОЛЬЗУЙТЕ ЦЕЛЬСИУСОВЫЕ ТЕМПЕРАТУРЫ.
# версия 2.21

cat << EOF
Автор: Sepero 2016 (sepero 111 @ gmx . com)
URL: http://github.com/Sepero/temp-throttle/

EOF

# Дополнительные ссылки
# http://seperohacker.blogspot.com/2012/10/linux-keep-your-cpu-cool-with-frequency.html

# Дополнительные кредиты
# Wolfgang Ocker <weo AT weo1 DOT de> - Патч для неуказанных частот процессора.

# Лицензия: GNU GPL 2.0

# Общая функция для вывода ошибки и выхода.
err_exit () {
    echo ""
    echo "Ошибка: $@" 1>&2
    exit 128
}

if [ $# -ne 1 ]; then
    # Если температура не была указана, вывести сообщение и выйти.
    echo "Пожалуйста, укажите максимальную желаемую температуру в Цельсиях." 1>&2
    echo "Например:  ${0} 60" 1>&2
    exit 2
else
    # Установить первый аргумент как максимальную желаемую температуру.
    MAX_TEMP=$1
fi

### НАЧАЛО Инициализация глобальных переменных.

# Частота увеличится, когда будет достигнута низкая температура.
LOW_TEMP=$((MAX_TEMP - 5))

CORES=$(nproc) # Получить количество ядер ЦП.
echo -e "Количество обнаруженных ядер ЦП: $CORES\n"
CORES=$((CORES - 1)) # Вычесть 1 из $CORES для удобства подсчета позже.

# Температуры рассчитываются до тысячных долей.
MAX_TEMP=${MAX_TEMP}000
LOW_TEMP=${LOW_TEMP}000

FREQ_FILE="/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies"
FREQ_MIN="/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq"
FREQ_MAX="/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq"

# Сохранить доступные частоты ЦП в строке, разделенной пробелами FREQ_LIST.
if [ -f $FREQ_FILE ]; then
    # Если $FREQ_FILE существует, получить частоты из него.
    FREQ_LIST=$(cat $FREQ_FILE | xargs -n1 | sort -g -r | xargs) || err_exit "Не удалось прочитать доступные частоты ЦП из файла $FREQ_FILE"
elif [ -f $FREQ_MIN -a -f $FREQ_MAX ]; then
    # В противном случае, если $FREQ_MIN и $FREQ_MAX существуют, сгенерировать список частот между ними.
    FREQ_LIST=$(seq $(cat $FREQ_MAX) -100000 $(cat $FREQ_MIN)) || err_exit "Не удалось вычислить доступные частоты ЦП"
else
    err_exit "Не удалось определить доступные частоты ЦП"
fi

FREQ_LIST_LEN=$(echo $FREQ_LIST | wc -w)

# CURRENT_FREQ сохранит индекс текущей используемой частоты в FREQ_LIST.
CURRENT_FREQ=2

# Это список возможных мест для считывания текущей температуры системы.
TEMPERATURE_FILES="
/sys/class/thermal/thermal_zone0/temp
/sys/class/thermal/thermal_zone1/temp
/sys/class/thermal/thermal_zone2/temp
/sys/class/hwmon/hwmon0/temp1_input
/sys/class/hwmon/hwmon1/temp1_input
/sys/class/hwmon/hwmon2/temp1_input
/sys/class/hwmon/hwmon0/device/temp1_input
/sys/class/hwmon/hwmon1/device/temp1_input
/sys/class/hwmon/hwmon2/device/temp1_input
null
"

# Сохраните первое местоположение температуры, которое существует, в переменной TEMP_FILE.
# Местоположение, сохраненное в $TEMP_FILE, будет использоваться для считывания температуры.
for file in $TEMPERATURE_FILES; do
    TEMP_FILE=$file
    [ -f $TEMP_FILE ] && break
done

[ $TEMP_FILE == "null" ] && err_exit "Местоположение для считывания температуры не найдено."

### КОНЕЦ Инициализация глобальных переменных.

### НАЧАЛО определение функций скрипта.

# Установите максимальную частоту для всех ядер ЦП.
set_freq () {
    # Из строки FREQ_LIST мы выбираем элемент с индексом CURRENT_FREQ.
    FREQ_TO_SET=$(echo $FREQ_LIST | cut -d " " -f $CURRENT_FREQ)
    echo $FREQ_TO_SET
    for i in $(seq 0 $CORES); do
        # Попробуйте установить частоту ядра, записав в /sys/devices.
        { echo $FREQ_TO_SET 2> /dev/null > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_max_freq; } ||
        # В противном случае попробуйте установить частоту ядра с помощью команды cpufreq-set.
        { cpupower -c $i frequency-set -u $FREQ_TO_SET > /dev/null; } ||
        #{ cpufreq-set -c $i --max $FREQ_TO_SET > /dev/null; } ||
        # В противном случае возвращаем сообщение об ошибке.
        { err_exit "Не удалось установить частоту ЦП ядра$i. Запустите скрипт от имени пользователя Root. Некоторые системы могут требовать установки пакета cpufrequtils."; }
    done
}

# Уменьшит частоту ЦП, если это возможно.
throttle () {
    if [ $CURRENT_FREQ -lt $FREQ_LIST_LEN ]; then
        CURRENT_FREQ=$((CURRENT_FREQ + 1))
        echo -n "уменьшение "
        set_freq $CURRENT_FREQ
    fi
}

# Увеличит частоту ЦП, если это возможно.
unthrottle () {
    if [ $CURRENT_FREQ -ne 1 ]; then
        CURRENT_FREQ=$((CURRENT_FREQ - 1))
        echo -n "увеличение "
        set_freq $CURRENT_FREQ
    fi
}

get_temp () {
    # Получите температуру системы. Возьмите максимум из всех счетчиков

    TEMP=$(cat $TEMPERATURE_FILES 2>/dev/null | xargs -n1 | sort -g -r | head -1)
}

### КОНЕЦ определение функций скрипта.

echo "Инициализация до максимальной частоты ЦП"
unthrottle

# Основной цикл
while true; do
    get_temp # Получает текущую температуру и устанавливает ее в переменную TEMP.
    if   [ $TEMP -gt $MAX_TEMP ]; then # Уменьшить частоту, если слишком жарко.
        throttle
    elif [ $TEMP -le $LOW_TEMP ]; then # Увеличить частоту, если прохладно.
        unthrottle
    fi
    sleep 3 # Время между проверками температур.
done

И наконец, после использования скрипта с установленной температурой 50, я смог снизить свою температуру ЦП на 10°C!

$ sensors
applesmc-isa-0300
Адаптер: ISA адаптер
Левая сторона  : 3620 RPM  (мин = 2160 RPM, макс = 5940 RPM)
Правая сторона : 3360 RPM  (мин = 2000 RPM, макс = 5499 RPM)
TB0T:         +33.5°C  
TB1T:         +33.5°C  
TB2T:         +32.5°C  
TC0E:         +55.0°C  
TC0F:         +58.2°C  
TC0P:         +45.2°C  
TC1C:         +55.0°C  
TC2C:         +55.0°C  
TC3C:         +55.0°C  
TC4C:         +55.0°C  
TCGC:         +55.0°C  
TCSA:         +48.0°C  
TCTD:          -0.5°C  
TCXC:         +52.5°C  
TG0D:         +52.5°C  
TG0P:         +47.2°C  
TG1D:         +55.0°C  
TG1F:         +54.2°C  
TG1d:         +49.0°C  
TH0A:         +35.0°C  
TH0B:         +37.0°C  
TH0V:         +37.0°C  
TH0a:         +35.0°C  
TH0b:         +37.0°C  
TH0c:        -127.0°C  
TH0x:         +37.0°C  
TM0P:         +46.5°C  
TM0S:         +45.2°C  
TMBS:         +45.0°C  
TP0P:         +48.8°C  
TPCD:         +51.0°C  
TS0D:        -127.0°C  
TS0P:        -127.0°C  
TS1D:        -127.0°C  
TS1P:        -127.0°C  
TW0P:         +43.5°C  
Ta0P:         +38.8°C  
TaSP:         +36.2°C  
Th1H:         +39.8°C  
Th2H:         +44.8°C  
Ts0P:         +31.0°C  
Ts0S:         +35.5°C  
Ts1S:         +37.2°C  

BAT0-acpi-0
Адаптер: ACPI интерфейс
in0:          12.38 V  
temp:         +33.7°C  
curr1:         0.00 A  (среднее =  +0.00 A)

coretemp-isa-0000
Адаптер: ISA адаптер
Package id 0:  +58.0°C  (высокая = +87.0°C, критическая = +105.0°C)
Core 0:        +51.0°C  (высокая = +87.0°C, критическая = +105.0°C)
Core 1:        +58.0°C  (высокая = +87.0°C, критическая = +105.0°C)
Core 2:        +53.0°C  (высокая = +87.0°C, критическая = +105.0°C)
Core 3:        +52.0°C  (высокая = +87.0°C, критическая = +105.0°C)

BAT0-virtual-0
Адаптер: Виртуальное устройство
temp1:        +33.7°C  

Ответ или решение

Проблема перегрева MacBook Pro (2013) при использовании Ubuntu действительно может быть вызвана различными факторами. На основе информации, предоставленной в вашем запросе, давайте рассмотрим несколько подходов для уменьшения температуры вашего устройства и последствий перегрева.

1. Оптимизация настроек mbpfan

Вы уже установили mbpfan и настроили его параметры в соответствии с вашим окружением. Однако всегда стоит проверить, правильно ли установлены минимальные и максимальные значения для вентиляторов. Примечание: значения в вашей конфигурации уже выглядят адекватными, но вы можете попробовать немного увеличить максимальные обороты вентиляторов для более агрессивного охлаждения. Убедитесь, что вы изменили значения так:

max_fan1_speed = 6500  # Попробуйте увеличить это значение
# Все остальные параметры могут остаться прежними

2. Использование cpupower и скрипта ограничения частоты CPU

Вы уже внедрили скрипт для ограничения частоты процессора, что является отличным шагом. Этот метод позволяет вам понизить рабочую частоту CPU в зависимости от температуры, что значительно снижает нагревание. Вот некоторые дополнительные рекомендации по его настройке:

  • Убедитесь, что вы устанавливаете частоту процессора на достаточном уровне, чтобы избежать значительных ухудшений производительности, но при этом позволяя системе опуститься до более низких температур.
  • Проверьте, нет ли утечек памяти или фоновых процессов, которые могут значительно повышать нагрузку на CPU.

3. Замена графической подсистемы

Согласно вашей информации, вы используете графическую карту Nvidia. Важно убедиться, что вы используете Intel GPU, когда это возможно, так как встроенная графика обычно менее требовательна к энергии и производит меньше тепла. Установите и настройте утилиту prime-select для переключения между графическими процессорами:

sudo prime-select intel

Не забывайте перезагрузить устройство после изменения.

4. Мониторинг и очистка системы

Регулярно проверяйте наличие фоновых процессов, которые могут вызывать чрезмерное использование CPU. Вы можете использовать команду top или htop, чтобы следить за активностью процессов в реальном времени. Убедитесь, что нет ни одного процесса, который потребляет чрезмерные ресурсы.

Также рекомендуем периодически очищать систему от пыли и грязи, закупоривающей вентиляционные решетки и мешающей нормальному потоку воздуха.

5. Настройка параметров ядра

Некоторые версии ядра Linux позволяют управлять энергопотреблением и производительностью. Если ваша версия Ubuntu это поддерживает, рассмотрите возможность применения конфигураций Intel P-State.

6. Дополнительные шаги

  • Убедитесь, что в вашем BIOS/UEFI включены все параметры управления питанием.
  • Возможно, стоит попробовать установить более легкие окружения рабочего стола (например, XFCE или LXDE вместо GNOME или KDE), что может снизить нагрузку на графику и процессор.

Заключение

В совокупности указанные методы могут значительно помочь в снижении температуры вашего MacBook Pro под управлением Ubuntu. Экспериментируйте с настройками, пока не найдете оптимальные для вашего устройства. Если проблема не решится, возможно, стоит рассмотреть возможность возврата к macOS для лучшей оптимизации системы в комплекте с железом.

Оцените материал
Добавить комментарий

Капча загружается...