As there are a number of people who are working on getting the best power consumption they can out of their Framework 13 laptops, I wanted to share this feature that amdgpu has that is very little known called Adaptive Backlight Management.
What it does is runs an algorithm internal to the display hardware that will allow reducing the backlight “brightness” dynamically depending upon the content. On content that is predominantly dark it can have a power savings of almost ~1W at runtime depending upon how aggressive it’s been configured.
Right now, it’s disabled upstream by default but can be turned on at runtime. Unfortunately, no compositors offer any knobs or sliders to enable it at runtime though.
If you’d like to experiment with it and see the effects you can set amdgpu.abmlevel=NUM on the kernel command line where NUM is between 1 and 4.
For the best balance on the experience and power savings I’d suggest using 3.
From the kernel perspective it’s an interface - the policy is decided by userspace.
So in this case it will apply to both battery and to AC. It’s a DRM property though and userspace can change it dynamically (it’s a property called “abm level”). You can see it show up in drm_info snippet below.
Well level 3 and 4 look horrible on my setup (especially on the desktop, video playback looked somewhat better but still noticeable). Level 4 did reduce power consumption at 20% brightness both on my pretty dark desktop and when playing back a pretty bright 4k 60 file in kodi by pretty much exactly 0.5W.
Testing level 2 now (it still looks worse than 0 but you at least have to look) but I am not having huge hopes.
I do think this is the kind of thing that could really benefit from a daemon (like PPD) to only enact on a specific criteria.
Like think how you have “power saver” on a cell phone which kicks in at 10% battery when you’re not plugged in.
Maybe a daemon could have a policy to turn it on when you set acpi platform profile to power saver and are on battery below 30% or something like that.
Idk the way level 3 and 4 looked you are better off just turning down brightness.
Maybe it need some special tuning for the specific panel or something cause it looked like it just turned down the backlight and turned the brightness of the image way up which caused it to look washed out af but this might be able to be tuned to look less bad.
Setting ‘3’ seems to have pushed me squarely into the 4 watt zone for my average idle draw.
The effect on the display is quite noticeable in some situations, it seems subtle most of the time but maybe the kind of thing that could cause some extra eye strain. I’ll run with it for a while and see how it is to live with.
Hi, I created a post on reddit (https://www.reddit.com/r/framework/comments/18auiuj/display_brightness_of_the_amd_13/) because the lowest level of brightness it is still very high. @Matt_Hartley pointed me to this topic, I don’t think is really the same thing, I tried using 4 but it hasn’t solved the issue, it was still too bright, and in fact I didn’t like that was adaptive. Any suggestion? I don’t understand if it is an hardware limit and if there is a viable software solution (on Linux)
Does amdgpu’s adaptive backlight management offer any significant advantage over something like wluma, that just sets the screen brightness through an algorithm using the backlight sensor and screen content?
wluma uses the export-dmabuf wayland protocol and Vulkan on the GPU to run the algorithm, which is extremely resource-efficient.
I’m not aware of any analysis of it, but they are of course different algorithms that run differently.
The abm method is hardware based and will work with X, Wayland or a console.
It sounds like what you shared attempts to be resource light, but I think someone would need to run some benchmarking with each and the same workloads to confirm power consumption impact for each of them.
Does anyone know what API the kernel exposes for userspace to switch the ABM level? It’s mentioned in the docs, but there’s no link or followup. I’m considering coding a quick CLI tool for it.