Почему потребление энергии в режиме простоя значительно выше в Linux, чем в macOS на одном и том же ноутбуке MacBook с процессором Intel?

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

Совсем недавно я перешел с macos на linux на macbook pro retina 2014 года с 8 ГБ оперативной памяти. Я заметил, что когда я редактирую текстовые файлы в vi, работающем в терминале, батарея разряжается почти в два раза быстрее на linux.

  • Top и powertop показывают минимальную загрузку ЦП и отсутствие загрузки ГП.
  • Радио устройства выключены
  • Яркость дисплея настроена на еле видимое значение, автояркость выключена, заставка выключена
  • Нет подключенных периферийных устройств
  • Потребление энергии измеряется при работе от батареи, запрашивая напряжение, ток и остаточное количество заряда внутренней батареи
  • Тестировался с двумя версиями macos: mavericks и big sur и тремя дистрибутивами linux: antix, pop_os, fedora.
  • Вентилятор издает тот же почти неслышный шум
  • Аналогичные измерения на macbook air 2015 года с 4 ГБ ОЗУ.

На linux эти действия не снизили или лишь незначительно снизили потребление энергии:

  • powertop –auto-tune
  • отключение всех ядер, кроме одного
  • wayland вместо X11
  • не запускать wayland или X11
  • удаление всех pci (впоследствии usb) устройств через sysfs (кроме vga и host:dram)

В состоянии простоя macos потребляет 3.2 Вт, в то время как idle Linux потребляет 8-9 Вт.

Что происходит?

редактировать:
Я понимаю, что программное и аппаратное обеспечение mac очень тесно связаны, и информация об этом довольно ограничена. С другой стороны, прошло много лет, и этот дисбаланс в сторону macos должен был исчезнуть. (Он действительно во многом исчез, так как я могу использовать все устройства в ноутбуке, хотя опыт “из коробки” близок, но не достигает того, что предоставлял macos около 8 лет назад). Меня это устраивает, и я готов искать, спрашивать и предпринимать дополнительные шаги для достижения низкого потребления энергии в режиме простоя)

снова редактировать, результаты последних исследований:
Вот мой текущий скрипт экономии энергии, который снижает потребление энергии в режиме простоя с 9 Вт до 7.0 Вт. Измерялось на довольно упрощенной системе debian с работающим sway и открытым терминалом.

brightnessctl set 21
rfkill block wifi
powertop --auto-tune
echo powersupersave > /sys/module/pcie_aspm/parameters/policy
echo active > /sys/devices/system/cpu/intel_pstate/status 
echo teo > /sys/devices/system/cpu/cpuidle/current_governor
echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo
echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo powersave > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
echo powersave > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
echo powersave > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
echo power > /sys/devices/system/cpu/cpu0/power/energy_perf_bias
echo power > /sys/devices/system/cpu/cpu1/power/energy_perf_bias
echo power > /sys/devices/system/cpu/cpu2/power/energy_perf_bias
echo power > /sys/devices/system/cpu/cpu3/power/energy_perf_bias

Я обнаружил intel_gpu_top, который дает некоторые представления о происходящем: ГП почти в неактивном состоянии, не потребляя энергию, ЦП на 99.7% в неактивном состоянии, потребляя 3.0 Вт.

С выключенным экраном общее потребление энергии снижается до 4.5 Вт; по данным intel_gpu_top, 2.3 Вт из этого потребляется ЦП (и 0 Вт ГП).

Для повторения, для idle Linux требуется 7.0 Вт с включенным экраном, что Macos может сделать при 3.2 Вт на том же компьютере.

На MacOS powermetrics показывает, что пакет ЦП находится в состоянии пакет C7 99% времени, когда компьютер в режиме простоя. Он также сообщает о потреблении мощности пакета 0.2 Вт.

На Linux powertop сообщает около 55% пакет C2 и 40% пакет C3, когда находится в idle. intel_gpu_top сообщает о потреблении пакета 3.2 Вт.

Разница в 3 Вт почти закрывает разрыв между потреблением в режиме простоя на MacOS и Linux.

Что мешает всем протестированным вариантам Linux переходить в более глубокие состояния пакета C, еще предстоит выяснить.

Еще один частичный ответ.
Использование acpi_osi=!Darwin в командной строке ядра позволяет перейти в состояние пакета C6 (благодарности форуму arch linux). Однако использование модуля facetimehd от patjak отменяет это преимущество.
Такая ограниченная конфигурация (без firewire и без веб-камеры) может иметь режим простоя с потреблением 4.98 Вт при минимальной яркости 2% (brightnessctl set 21), 55% в C2 и 45% в C6, потребление энергии пакета 1.44 Вт.
Это все еще на 1.2 Вт выше, чем использование macos, где пакет в основном в C7 в состоянии простоя и пакет потребляет 0.2 Вт.
Эксперименты с запуском linux в виртуальной машине Virtualbox показывают, что даже с linux и низким потреблением энергии, idle приводит к увеличению потребления пакета с 0.2 Вт до 5.5 Вт.

У меня есть macbook pro 2015 года, работающий на ubuntu 24.04 с ядром 6.12.1. Мне удалось достичь состояния мощности C7 только после отключения wifi карты. Я смог снизить потребление энергии в состоянии простоя до 4.5 Вт. Однако это не очень полезно, если необходимо отключить wifi.

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

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

Функциональная структура

1. Оптимизация для оборудования

macOS была разработана Apple с учетом специфики своих устройств и полной интеграцией на уровне программного обеспечения и ресурсоемких технологий. Apple имеет полное представление о своем оборудовании и может оптимизировать его работу, чтобы достичь максимальной экономии энергии. В отличие от этого, Linux является более универсальной системой, которая должна работать на множестве различных устройств и конфигураций. Хотя существуют оптимизированные дистрибутивы Linux, такие как Fedora или Pop!_OS, они не могут полностью учитывать все аппаратные особенности, что иногда приводит к менее эффективному использованию ресурсов.

2. Эффективность управления состояниями питания (C-состояния)

Как вы уже заметили, при работе с powermetrics и powertop видно, что macOS использует более глубокие состояния C, такие как C7. Linux, в свою очередь, часто задерживается на менее глубоких состояниях (C2 и C3). Это может быть связано с тем, что ядро Linux и драйвера, отвечающие за управление энергопотреблением, не всегда могут правильно интерпретировать и использовать возможности конкретной архитектуры Intel для снижения энергопотребления.

Стратегии управления процессором

3. Конфигурация ядра и параметры загрузки

Вы заметили, что запуск с параметром acpi_osi=!Darwin позволяет системе на Linux снизить энергопотребление, что открывает возможность перехода в состояние C6. Это подтверждает, что по умолчанию Linux может не использовать оптимальные подходы к энергосбережению. Неправильная настройка конфигурации ядра и параметров управления питанием может приводить к потерям в эффективности.

4. Драйверы и модули

Драйвера, используемые в Linux для работы с аппаратными компонентами, могут также оказывать значительное влияние на потребление энергии. Например, модуль FaceTime HD, который вы упомянули, может генерировать дополнительные нагрузки, что приводит к увеличению энергопотребления. В macOS, драйвера более интегрированы с самой системой, и их оптимизация осуществляется на более глубоком уровне.

Сравнительные характеристики

5. Энергетическая политика и управление производительностью

macOS использует уникальные алгоритмы для управления производительностью и энергопотреблением процессоров, включая реализацию функций Turbo Boost и управление частотой процессоров. Linux, в свою очередь, может не всегда использовать те же стратегии, что приводит к большей нагрузке на процессор даже при низкой активности.

Заключение

Чтобы значительно улучшить показатели энергопотребления на Linux на MacBook, необходимо продолжать оптимизацию конфигурации системы, исследовать возможности ядра и адаптировать параметры, исходя из конкретного оборудования. Это включает в себя детальную настройку управления состояниями CPU, использование специализированных дистрибутивов, а также актуализацию драйверов. Эти шаги позволят вам значительно сократить разрыв в потреблении энергии по сравнению с macOS, даже если полного соответствия по показателям достигнуть не удастся.

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

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

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