为什么对于同样基于 Intel 的 MacBook,Linux 下的空闲功耗比 MacOS 下高得多?

为什么对于同样基于 Intel 的 MacBook,Linux 下的空闲功耗比 MacOS 下高得多?

最近,我在 2014 年中期的 8GB Retina MacBook Pro 上从 macos 切换到 linux。我注意到,当我在终端中运行 vi 编辑文本文件时,linux 上的电池消耗速度大约是 2 倍。

  • Top 和 powertop 显示最少的 CPU 使用率,没有 GPU 使用率。
  • 无线电设备已关闭
  • 显示屏亮度设置为几乎不可见,自动亮度关闭,屏幕保护程序关闭
  • 未连接任何外围设备
  • 电量使用情况是通过电池运行时测量的,查询内部电池的电压、电流和剩余电量
  • 使用两个版本的 macos:mavericks 和 big sur 以及 3 个 linux 发行版:antix、pop_os、fedora 进行了测试。
  • 风扇发出相同的、几乎听不见的噪音
  • 在 4GB 2015 款 MacBook Air 上也有类似的测量结果。

在 Linux 上,这些并没有降低或略微降低功耗:

  • powertop --auto-tune
  • 除一个核心外,其他所有核心均离线
  • 使用 wayland 代替 X11
  • 未启动 wayland 或 X11
  • 通过 sysfs 删除所有 pci(随后是 usb)设备(vga 和 host:dram 除外)

空闲的 macos 消耗 3.2 瓦,而空闲的 Linux 消耗 8-9 瓦。

到底是怎么回事?

编辑:我知道 mac 软件和硬件紧密相关,这方面的信息有些封闭。另一方面,多年过去了,这种对 macos 的不平衡应该已经消除了。(它确实在很大程度上被消除了,因为我可以使用笔记本电脑中的所有设备,尽管开箱即用的体验很接近,但并没有达到大约 8 年前 macos 提供的体验。我对此很满意,并准备搜索、询问并采取额外措施来实现低空闲功耗)

再次编辑,最新研究结果:这是我当前的省电脚本,可将空闲功耗从 9 瓦降低到 7.0 瓦。在运行显示终端的 sway 的相当简化的 debian 系统上测量。

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 可以让你了解正在发生的事情:GPU 几乎处于空闲状态,不消耗任何能量,CPU 处于 99.7% 空闲状态,消耗 3.0 瓦。

当屏幕变黑时,总功耗降至 4.5 瓦;根据 intel_gpu_top,其中 2.3W 由 CPU 消耗(而 0 瓦由 GPU 消耗)。

重申一下,Linux 在屏幕打开的情况下空闲需要 7.0 瓦的功率,而 Macos 在同一台计算机上仅需 3.2 瓦就能做到这一点。

答案1

在 MacOS 上,powermetrics显示当计算机空闲时,CPU 组件 99% 的时间处于组件 c7 状态。它还报告组件功耗为 0.2 瓦。

在 Linux 上,powertop报告空闲时大约有 55% 的包 c2 状态和 40% 的包 c3 状态。intel_gpu_top报告 3.2 瓦包功耗。

3 瓦的差异几乎填补了 MacOS 与 Linux 之间的空闲功耗之间的差距。

导致所有经过测试的 Linux 变体无法进入更深的包 C 状态的原因尚未得到解答。

答案2

另一个部分答案。acpi_osi=!Darwin在内核命令行上使用可以转到包 C6(感谢 arch linux 论坛)。但是使用 patjak 的 facetimehd 模块会取消此好处。这种残缺的配置(没有火线和网络摄像头)在空闲时可以使用 4.98W,亮度最低为 2%(brightnessctl set 21),C2 为 55%,C6 为 45%,包功耗为 1.44W。这仍然比使用 macos 高至少 1.2W,其中包在空闲时主要是 C7,包消耗 0.2W。尝试在 Virtualbox VM 中运行 linux,以同时实现 linux 和低能耗,但 linux 运行空闲时将包功耗从 0.2W 提高到 5.5W。

相关内容