Introduction
Introduction Statistics Contact Development Disclaimer Help
Title: Measuring power efficiency of a CPU frequency scheduler on
OpenBSD
Author: Solène
Date: 26 September 2021
Tags: openbsd power efficiency
Description:
# Introduction
I started to work on the OpenBSD code dealing with the CPU frequency
scaling. The current automatic logic is a trade-off between okay
performance and okay battery. I'd like the auto policy to be different
when on battery and when on current (for laptops) to improve battery
life for nomad users and performance for people connected to the grid.
I've been able to make raw changes to produce this effect but before
going further, I wanted to see if I got any improvement in regards to
battery life and to which extent if it was positive.
In the incoming sections of the article I will refer to Wh unit,
meaning Watt-hour. It's a measurement unit for a quantity of energy
used, because energy used is absolutely not linear, we can make an
average of the usage and scale it to one hour so it's easy to compare.
An oven drawing 1 kW when on and being on for an hour will use 1 kWh
(one kilowatt-hour), while an electric heater drawing 2 kW when on and
turned on for 30 minutes will use 1 kWh too.
Kilowatt Hour explanation from Wikipedia
# How to understand power usage for nomad users
While one may think that the faster we do a task, the less time the
system stay up and the less battery we use, it's not entirely true for
laptops or computers.
There are two kinds of load on a system: interactive and
non-interactive. In non-interactive mode, let's imagine the user powers
on the computer, run a job and expect it to be finished as soon as
possible and then shutdown the computer. This is (I think) highly
unusual for people using a laptop on battery. Most of the time, users
with a laptop will want their computer to be able to stay up as long as
possible without having to charge.
In this scenario I will call interactive, the computer may be up with
lot of idle time where the human operator is slowly typing, thinking or
reading. Usually one doesn't power off a computer and power it on
again while the person is sitting in front of the laptop. So, for a
given task among the main task "staying up" may not be more efficient
(in regards to battery) if it takes less time, because whatever the
time it will take to do X() the system will stay up after.
# Testing protocol
Here is the protocol I did for the testing "powersaving" frequency
policy and then the regular auto policy.
1. Clean package of games/gzdoom
2. Unplug charger
3. Dump hw.sensors.acpibat1.watthour3 value in a file (it's the
remaining battery in Wh)
4. Run compilation of the port games/gzdoom with dpb set to use all
cores
5. Dump watthour3 value again
6. Wait until 18 minutes and 43 seconds
7. Dump watthour3 value again
Why games/gzdoom? It's a port I know can be compiled with parallel
build allowing to use all CPU and I know it takes some times but isn't
too short too.
Why 18 minutes and 43 seconds? It's the time it takes for the
powersaving policy to compile games/gzdoom. I needed to compare the
amount of energy used by both policies for the exact same time with the
exact same job done (remember the laptop must be up as long as
possible, so we don't shutdown it after compiling gzdoom).
I could have extended the duration of the test so the powersaving would
have had some idle time but given the idle time is drawing the exact
same power with both policies, that would have been meaningless.
# Results
I'm planning to add results for the lowest and highest modes (apm -L
and apm -H) to see the extremes.
## Compilation time
As expected, powersaving was slower than the auto mode, 18 minutes and
43 seconds versus 14 minutes and 31 seconds for the auto policy.
```result numbers with compilation time
Policy Compile time Idle time
------ ------------ ---------
powersaving 1123 0
auto 871 252
```
Chart showing the difference in time spent for the two policies
## Energy used
We see that the powersaving used more energy for the duration of the
compilation of gzdoom, 5.9 Wh vs 5.6 Wh, but as we don't turn off the
computer after the compilation is done, the auto mode also spent a few
minutes idling and used 0.74 Wh in that time.
```result numbers with energy usage
Policy Compile power Idle power Total (Wh)
------ ------------ --------- ----------
powersaving 5,90 0,00 5,90
auto 5,60 0,74 6,34
```
Chart showing the difference in energy used for the two policies
# Conclusion
For the same job done: compiling games/gzdoom and stay on for 18
minutes and 43 seconds, the powersaving policy used 5.90 Wh while the
auto mode used 6.34 Wh. This is a saving of 6.90% of power.
This is a testing policy I made for testing purposes, it may be too
conservative for most people, I don't know. I'm currently playing with
this and with a reproducible benchmark like this one I'm able to
compare results between changes in the scheduler.
You are viewing proxied material from dataswamp.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.