Как увеличить агрессивность охлаждения на Debian на Macbook?

Как увеличить агрессивность охлаждения на Debian на Macbook?

У меня на Macbook Air установлен Debian (зачем? Потому что весело), ​​и он работает довольно хорошо.

Однако, заметив, что процесс под названием «kidle_inject» занимает 100% ресурсов ЦП на всех ядрах, я решил проверить температуру, и «датчики» сообщили мне, что она колеблется на уровне 96 градусов по Цельсию. Вентилятор еле работал.

Я заметил, что на OSX он запускается сразу после включения системы (возможно, он был еще теплым минуту назад), тогда как на Debian я его почти не слышу, и ноутбук также кажется более горячим на ощупь, когда на Debian.

Можно ли как-то заставить Debian использовать вентилятор более агрессивно?

решение1

http://allanmcrae.com/2010/05/simple-macbook-pro-fan-daemon/Начало оказалось полезным.

В /sys/devices/platform/applesmc.768/, есть несколько полезных опций, которые можно использовать для управления скоростью вращения вентилятора.

Существуют «fan1_min» и «fan1_max», которые представляют собой минимальную и максимальную скорость вращения вентилятора, «fan1_output» — параметр, который напрямую управляет вентилятором, и «fan1_manual», который заставляет систему игнорировать минимальные и максимальные настройки и напрямую реагировать на изменения «fan1_output».

Следующий пункт повестки дня — как контролировать все это автоматически.

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

Второе редактирование:

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

Третья правка: основываясь на алгоритмах на этой странице, я написал быстрый скрипт на Python, который при запуске от имени root, кажется, работает довольно хорошо:

#!/usr/bin/python
import time
import glob
import math

last_temp = 0

while True:

    time.sleep(1)

    files = glob.glob("/sys/devices/platform/applesmc.768/temp*_input")

    temp = 0

    for file in files:
        with open(file) as openfile:
            sensor_temp = openfile.read()

            temp = max(int(sensor_temp)/1000, temp)

    with open("/sys/devices/platform/applesmc.768/fan1_input") as fan1_input:
        current_speed = int(fan1_input.read())

    increasing = temp > last_temp

    last_temp = temp

    if increasing:
        if temp <= 65:
            speed = max(current_speed, 2000)
        elif 65 < temp < 80:
            step = (6200 - 2000) / ((80 - 65) * (80 - 64) / 2)
            speed = max(current_speed, math.ceil(2000 + (temp - 65) * (temp - 64) / 2 * step))
        elif temp >= 80:
            speed = 6200
    else:
        if temp >= 80:
            speed = 6200
        elif 55 < temp < 80:
            step = (6200 - 2000) / ( (80 - 55) * (80 - 54) / 2 )
            speed = min(current_speed, math.floor(6200 - (80 - temp) * (81 - temp) / 2 * step))
        elif temp <= 55:
            speed = 2000

    print "Temperature: " + str(temp) + " Increasing?: " + str(increasing) + " Current speed: " + str(current_speed) + " Target: " + str(speed)

    with open("/sys/devices/platform/applesmc.768/fan1_min", "w") as fan1_input:
    #with open("/home/werner/testtemp", 'w+') as fan1_input:
        fan1_input.write(str(int(speed)))

Связанный контент