Как снизить энергопотребление и шум ноутбука?

Мой ноутбук — Acer TMX349-M-535L. Это очень удачная железка. Единственный его недостаток в том, что он может быть шумным. Я производил настройку в Elementary OS, но в Ubuntu то же самое. С базовыми настройками системы ноутбук шумит практически всегда. Но, если уделить немного внимания настройкам энергоэффективности, то его будет слышно лишь тогда, когда это действительно нужно. Остальное время он будет радовать тишиной, да и работать от батареи станет дольше.

Шум в этой модели — это пара вентиляторов системы охлаждения. Больше внутри ноутбука шуметь нечему. Диск — твердотельный, оптический привод отсутствует. Разборка Acer TravelMate TMX349-M-535L.

Датчики

Когда требуется снизить скорость вращения вентиляторов, то пользователи Linux обычно обращаются к программам lm_sensors (Linux-monitoring sensors) и fancontrol.

Первая представляет собой набор утилит и драйверов, которые позволяют отслеживать показания датчиков температуры, напряжения и скорости вращения вентиляторов. Вторая — это уже непосредственно инструмент изменения скорости вращения вентиляторов. Скорость можно автоматически менять, в зависимости от показаний температуры.

Установка программ:

sudo apt install lm-sensors fancontrol

Теперь определить и посмотреть датчики можно командами:

sudo sensors-detect
sudo sensors

У меня не получилось пойти по этому пути. Утилита sensors-detect для Acer TMX349-M-535L нашла всего один интерфейс из числа поддерживаемых, где доступны только показания датчиков температуры. Датчики вентиляторов полностью отсутствуют:

root@d1monNB:/home/d1mon# sensors
acpitz-virtual-0
Adapter: Virtual device
temp1:        +33.0°C  (crit = +98.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:  +33.0°C  (high = +100.0°C, crit = +100.0°C)
Core 0:         +33.0°C  (high = +100.0°C, crit = +100.0°C)
Core 1:         +30.0°C  (high = +100.0°C, crit = +100.0°C)

Иногда, когда не все датчики доступны, то может помочь параметр:

acpi_enforce_resources=lax

Он прописывается, как дополнительный в загрузчик Grub.

Делается это в файле etc/default/grub в таком виде:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_enforce_resources=lax"

Мне это не помогло.

Не помог и поиск в интернете. Модель ноутбука и его материнская плата нигде не упоминается в руководствах настройки датчиков скорости вращения вентиляторов.

Узнать материнскую плату ноутбука можно так:

root@d1monNB:/home/d1mon# inxi -Fxz
System:    Host: d1monNB Kernel: 4.4.0-77-generic x86_64 (64 bit gcc: 5.4.0) Desktop: N/A
           Distro: elementary 0.4 loki
Machine:   System: Acer (portable) product: TravelMate X349-M v: V1.09
           Mobo: Acer model: Cassiopeia_SK v: V1.09 Bios: Insyde v: V1.09 date: 12/30/2016
CPU:       Dual core Intel Core i5-6200U (-HT-MCP-) cache: 3072 KB
           flags: (lm nx sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx) bmips: 9599
           clock speeds: max: 2800 MHz 1: 799 MHz 2: 799 MHz 3: 799 MHz 4: 799 MHz
Graphics:  Card: Intel Sky Lake Integrated Graphics bus-ID: 00:02.0
           Display Server: X.org 1.18.4 drivers: intel (unloaded: fbdev,vesa)
           tty size: 135x24 Advanced Data: N/A for root
Audio:     Card Intel Sunrise Point-LP HD Audio driver: snd_hda_intel bus-ID: 00:1f.3
           Sound: Advanced Linux Sound Architecture v: k4.4.0-77-generic
Network:   Card: Intel Wireless 7265 driver: iwlwifi bus-ID: 02:00.0
           IF: wlp2s0 state: up mac: <filter>
Drives:    HDD Total Size: 256.1GB (45.5% used) ID-1: /dev/sda model: HFS256G39TND size: 256.1GB temp: 25C
Partition: ID-1: / size: 227G used: 102G (48%) fs: ext4 dev: /dev/sda2
           ID-2: swap-1 size: 8.45GB used: 0.00GB (0%) fs: swap dev: /dev/dm-0
RAID:      No RAID devices: /proc/mdstat, md_mod kernel module present
Sensors:   System Temperatures: cpu: 33.0C mobo: N/A
           Fan Speeds (in rpm): cpu: N/A
Info:      Processes: 208 Uptime: 2:44 Memory: 1500.8/7848.3MB Init: systemd runlevel: 5 Gcc sys: 5.4.0
           Client: Shell (bash 4.3.461) inxi: 2.2.35

Проблема

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

И это действительно было странно наблюдать. Ноутбук бездействует, каких-то ресурсоёмких задач не выполняется. Тем не менее, его вентиляторы во всю жужжат. Обороты не максимальные, но слышно очень хорошо, особенно в тишине.

Решение

С целью оптимизации использования ресурсов ноутбука и увеличения времени его автономной работы существуют специальные программы. Наверное, их много всяких. Я пробовал использовать две, самые рекомендуемые в Linux-cообществе — это PowerTOP и TLP.

PowerTOP

Сразу скажу, что после экспериментов я отказался от использования PowerTOP. Но на всякий случай я всё же расскажу про неё. Может, потом мне или кому-нибудь эта информация всё же пригодиться.

Установка:

sudo apt install powertop

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

В результате мы имеем сводку по количеству обращений (пробуждений), текущему расходу батареи, оставшемуся времени работы от батареи:

PowerTOP 2.8      Обзор      Статистика б Частотная статист Статистика уст Tunables
Разряд батареи составляет 10.8 Вт
Предполагаемое оставшееся время работы 1 часов, 39 минут

Сводка: 487,3 пробуждений/с.,  9,8 ГП оп./с., 0,0 VFS ops/sec and 9,3% CPU use

Power est.              Использование       Событий/с    Категория       Описание
  2.06 W     33,7 ms/s     191,6        Process        /usr/lib/firefox/firefox
  893 mW      9,5 ms/s      74,7        Process        gala
  570 mW      1,3 ms/s      58,0        Interrupt      [126] i915_bpo
  333 mW     11,2 ms/s      24,6        Process        /usr/lib/xorg/Xorg -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten
  230 mW      4,9 ms/s      20,6        Process        pantheon-terminal
  162 mW     40,1 µs/s      16,7        Timer          intel_uncore_fw_release_timer
  144 mW     92,0 µs/s      14,7        Process        [rcu_sched]
  142 mW      6,2 ms/s      10,8        Process        wingpanel
  137 mW    526,8 µs/s      13,8        Timer          tick_sched_timer
  119 mW      4,0 ms/s       9,8        Process        doublecmd
  107 mW    371,5 µs/s      10,8        Interrupt      [6] tasklet(softirq)
 77.8 mW    261,3 µs/s       7,9        Process        [irq/128-iwlwifi]
 69.6 mW     11,6 ms/s      0,00        Process        plank
 63.5 mW      2,6 ms/s       4,9        Process        psensor
 58.4 mW    202,0 µs/s       5,9        Process        nginx: worker process
 47.9 mW     44,8 µs/s       4,9        kWork          gen6_pm_rps_work
 20.7 mW    271,1 µs/s       2,0        Process        /usr/share/skypeforlinux/skypeforlinux --executed-from=/home/d1mon --pid=1947
 19.5 mW     66,8 µs/s       2,0        Process        /usr/lib/rtkit/rtkit-daemon
 19.3 mW     42,9 µs/s       2,0        Process        [rtsx_usb_ms_1]
 19.1 mW     14,7 µs/s       2,0        kWork          pm_runtime_work
 19.1 mW      8,8 µs/s       2,0        kWork          flush_to_ldisc
 13.1 mW    601,0 µs/s       1,0        Process        /usr/lib/x86_64-linux-gnu/indicator-application/indicator-application-service
 11.1 mW    265,7 µs/s       1,0        kWork          i915_gem_retire_work_handler
 10.3 mW    135,0 µs/s       1,0        Process        powertop
 10.3 mW    132,1 µs/s       1,0        Interrupt      [124] xhci_hcd
 9.82 mW     48,2 µs/s       1,0        Process        /usr/lib/accountsservice/accounts-daemon

Всё это показывается не просто так. Пользователю предоставляется возможность влиять на обращения к процессам. Настройки доступны на отдельной вкладке «Tunables», куда можно переключиться клавишей «Tab». Здесь отдельным службам и устройствам можно разрешить автоматический уход в спячку. Чем меньше служб и устройств будет постоянно бодрствовать, тем лучше.

Чтобы PowerTOP постоянно контролировала систему нужно запустить её, как службу. Для этого требуется создать файл /etc/systemd/system/powertop.service, его содержимое:

[Unit]
Description=PowerTop Service

[Service]
Type=idle
Environment="TERM=dumb"
# запуск в режиме максимального энергосбережения.
ExecStart=/usr/sbin/powertop --auto-tune
# запуск с настройками по умолчанию.
#ExecStart=/usr/sbin/powertop

[Install]
WantedBy=multi-user.target

Обратите внимание, что запуск службы в файле можно выполнять одним из двух способов. Закоментируйте первый и раскоментируйте второй, если он вам больше подходит.

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

Включение автозапуска службы:

systemctl enable powertop.service

Выключение автозапуска: 

systemctl disable powertop.service

Есть ещё процесс калибровки, запускается командной:

sudo powertop -calibrate

Экран погаснет, потом будет менять яркость, потом снова погаснет, потом всё восстановится. Занимает калибровка примерно 5-10 минут, ноутбук должен при этом работать от аккумулятора, трогать его не рекомендуется. Прерывать процесс тем более не рекомендуется.

Программа PowerTOP интересная. Многие пишут, что она помогает. Но в моём случае она оказалась неэффективной. Вентиляторы продолжали жужжать.

TLP

Итак, вторая программа — TLP, установка:

sudo add-apt-repository ppa:linrunner/tlp
sudo apt update
sudo apt install tlp

Вначале добавляем фирменный репозиторий. Там версия более новая, я использовал её.

Запуск:

sudo tlp start

Вывод всякой полезной информации, текущих настроек:

sudo tlp-stat

Вывод информации и текущих настроек именно по процессору:

sudo tlp-stat -p

Моя выдача, уже настроенная:

root@d1monNB:/home/d1mon# tlp-stat -p
--- TLP 0.9 --------------------------------------------

+++ Processor
CPU model      = Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz

/sys/devices/system/cpu/cpu0/cpufreq/scaling_driver    = intel_pstate
/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor  = powersave
/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors = performance powersave
/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq  =   400000 [kHz]
/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq  =  2800000 [kHz]

/sys/devices/system/cpu/cpu1/cpufreq/scaling_driver    = intel_pstate
/sys/devices/system/cpu/cpu1/cpufreq/scaling_governor  = powersave
/sys/devices/system/cpu/cpu1/cpufreq/scaling_available_governors = performance powersave
/sys/devices/system/cpu/cpu1/cpufreq/scaling_min_freq  =   400000 [kHz]
/sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq  =  2800000 [kHz]

/sys/devices/system/cpu/cpu2/cpufreq/scaling_driver    = intel_pstate
/sys/devices/system/cpu/cpu2/cpufreq/scaling_governor  = powersave
/sys/devices/system/cpu/cpu2/cpufreq/scaling_available_governors = performance powersave
/sys/devices/system/cpu/cpu2/cpufreq/scaling_min_freq  =   400000 [kHz]
/sys/devices/system/cpu/cpu2/cpufreq/scaling_max_freq  =  2800000 [kHz]

/sys/devices/system/cpu/cpu3/cpufreq/scaling_driver    = intel_pstate
/sys/devices/system/cpu/cpu3/cpufreq/scaling_governor  = powersave
/sys/devices/system/cpu/cpu3/cpufreq/scaling_available_governors = performance powersave
/sys/devices/system/cpu/cpu3/cpufreq/scaling_min_freq  =   400000 [kHz]
/sys/devices/system/cpu/cpu3/cpufreq/scaling_max_freq  =  2800000 [kHz]

/sys/devices/system/cpu/intel_pstate/min_perf_pct      = 14
/sys/devices/system/cpu/intel_pstate/max_perf_pct      = 75
/sys/devices/system/cpu/intel_pstate/no_turbo          = 1
/sys/devices/system/cpu/intel_pstate/turbo_pct         = 25
/sys/devices/system/cpu/intel_pstate/num_pstates       = 25

x86_energy_perf_policy: program for your kernel not installed.

/proc/sys/kernel/nmi_watchdog                          = 0

+++ Undervolting
PHC kernel not available.

По умолчанию программа TLP настроена очень поверхностно и поэтому работает тоже не очень неэффективно. Чтобы улучшить ситуацию выполняем следующие действия.

Останавливаем службу:

sudo service tlp stop

Отключаем всё управление частотами процессора, которые могут быть в дистрибутиве по умолчанию. Это сделать нужно обязательно, т.к. TLP возмёт на себя эту обязанность и нельзя допускать, чтобы что-то при этом мешалось. Официальная документация. Рекомендую заглянуть туда на всякий случай, может быть в будущем, когда вы читаете эту статью, что-то поменялось. Команда отключения:

sudo update-rc.d -f ondemand remove

Открываем в редакторе файл /etc/tlp.conf, я пользуюсь mc и встроенным редактором — кнопка «F4». Здесь проверяем параметры, все они должны быть раскомментированы:

Следующие два параметра надо наоборот закомментировать в файле:

Запускам обратно службу и наслаждаемся результатом:

sudo service tlp start

Мой результат

Теперь, когда ноутбук бездействует, то его абсолютно не слышно!

То же самое, если выполнять какие-то несложные операции или посещать сайты не перегруженные скриптами и рекламой. Работать в тишине можно с настройками системы, файлами, некоторыми программами, да и много ещё чем.

Нагрузить ноутбук, чтобы он зашумел — не проблема. Но теперь этот шум хотя бы не просто так.

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

Оценка времени автономной работы в Elementary OS

5 комментариев

ЮВ
Мне тоже не нравится как шумит ноут при относительном бездействии. Я живу за ним, устаю от гула. А он у меня еще и дизайнерский - мощный. Проделал с TLP операции. Наблюдаю...
ЮВ
Понаблюдал несколько часов в режиме работы с Blender (моделирование, тесторвые пре-рендеры), Gimp - обработка изображений, и Chrome - активный сёрфинг по фотостокам, форумы, переписка. Ощутимо тише стал ноутбук. Едва слышимый шелест кулера теперь преобладает. Даже короткие прыжки процессорной занятости до 100% не раскручивают кулеры. Проверял при этом температуру (в трее сидит psensor) - скромные 50 с чем-то, даже 60-ти нет. А раньше всё время ноут гудел. Только если уж совсем ничего не делать то через пару минут успокаивался. Рендерил в Blener рендером Luxcore (использует CPU+GPU) - тут конечно куллеры раскрутило. Температура всё так же, 60-ти нет. Огромное спасибо за статью. За пройденный опыт. Плюсиков тебе в карму ;)
Круто, рад что помогло! :)
ЮВ
Для Gnome есть extension "CPU Power manager". Позволяет регулировать частотой процессора. Можно создавать свои пресеты. У меня ноут молотит круглосуточно в загрузке 100% и CPU i5 (7th) и GPU GTX1050. Сделал Conky с выводом температур и прифигел - а ноут то плавится! Вот это расширение позволило быть по-спокойнее и снизить температуру с 92 до 78. Имхо не нужно позволять 80 и выше температуру.
Не так давно начал использовать Gnome в повседневной работе. Дополнение действительно классное. В Ubuntu 20.04 работает хорошо. Спасибо!