Optimizing FreeBSD Power Consumption on Modern Intel Laptops
My current FreeBSD laptop is a 2020 14" HP Spectre x360, which uses Intel’s 11th Gen CPU and “Evo” platform, although I previously also had the 13" 2020 version with a similar setup (but lacked working audio on non-Windows). This article isn’t specific to HP: your shiny-new Lenovo ThinkPad, Dell XPS, or Framework Laptop can also apply.
One thing with FreeBSD is that unlike Windows or desktop Linux, the default configuration is poorly optimized for laptops that are newer than your ancient ThinkPad T420, or maybe a T460s.
Having run FreeBSD on TigerLake on-and-off since December 2020 on two laptops, there are a few things to keep in mind. These are:
On TigerLake, go CURRENT for graphics (As of March 2022)
UPDATE: This section is obsolete, as of April 2022
13.1-RC2 works with
drm-kmod from GitHub if you use the 5.9 branch.
If you want accelerated graphics, as of March 2022, you need to run
14-CURRENT branch, or maybe
13-STABLE (which I haven’t tested).
For graphics, while
drm-kmod from Ports “works”, at the time of writing the
best performance and stability comes with the
master branch of
which as of writing is at Linux 5.8.
14.0-RELEASE comes out, it should work fine for TigerLake, maybe even
13.1 (although I personally reserve
RELEASE versions for non-desktops). For
Intel CannonLake (10th Gen) or older,
13.0-RELEASE or newer should be fine.
For AlderLake (12th Gen) and newer, I don’t know if
14.0-RELEASE will be
supported or not by
A big problem with newer Intel CPUs is that the fan is constantly running by default, and these laptops gets real hot. It’s not just Intel TigerLake, but also Intel WhiskeyLake (8th Gen Refresh) on an older 2018 13" HP Spectre x360 (which presently is my secondary laptop).
Some of the issues is FreeBSD’s default Intel Speed Shift (ISS) configuration which makes more sense for desktops and servers (or anything lacking a battery) than laptops.
By default, ISS optimizes the clock for the whole CPU (all cores) than each
core individually. To fix that, you can include this in
Which will make the ISS control core-based, so if one core is busy your fan won’t be as loud.
You can also optimize ISS for maximum power savings, as opposed to “balanced”,
which helps improve battery life even more. If you do this, you need this in
dev.hwpstate_intel.0.epp=100 dev.hwpstate_intel.1.epp=100 dev.hwpstate_intel.2.epp=100 ... dev.hwpstate_intel.N.epp=100
N is the number of cores.
The values of this is that:
0is “maximum performance”
50is a “balance” (default)
100is “maximum power savings”
100 which I recommend for a laptop, but it’s
If you run
STABLE feel free to skip this section.
However, If you run
CURRENT as a desktop like me, power consumption can be
improved by running the
GENERIC-NODEBUG kernel and disabling debugging
symbols in userland. This is a good idea provided you aren’t planning to do
kernel hacking on your laptop (or do it in a VM).
To disable debugging symbols for the kernel and userland, include this in
KERNCONF="GENERIC-NODEBUG" WITH_MALLOC_PRODUCTION="YES" WITHOUT_LLVM_ASSERTIONS="YES"
Source: an old Twitter thread originated by yours truly.
While not specific to new Intel CPUs, enabling “metadata” mode on
can quicken updates. You can find the information on
Even though I can’t always stop the fan from running, I can stop it from running loud most of the time. On a stock FreeBSD, doing about anything meant a loud fan. With FreeBSD tuned according to this document, it’s quiet as a mouse. Well, almost: the fan still runs, and that’s normal, but when it does, it’s much quieter.