2021-05-18 18:41:00 +00:00
|
|
|
# tools/power/rapl
|
|
|
|
|
|
|
|
`tools/power/rapl` (or `rapl` for short) is a command-line utility in
|
|
|
|
the Mozilla tree that periodically reads and prints all available Intel
|
|
|
|
RAPL power estimates. These are machine-wide estimates, so if you want
|
|
|
|
to estimate the power consumption of a single program you should
|
|
|
|
minimize other activity on the machine while measuring.
|
|
|
|
|
|
|
|
**Note**: The [power profiling overview](power_profiling_overview.md) is
|
|
|
|
worth reading at this point if you haven't already. It may make parts
|
|
|
|
of this document easier to understand.
|
|
|
|
|
|
|
|
## Invocation
|
|
|
|
|
2022-01-11 10:48:22 +00:00
|
|
|
First, do a [standard build of Firefox](/setup/index.rst).
|
2021-05-18 18:41:00 +00:00
|
|
|
|
|
|
|
### Mac
|
|
|
|
|
|
|
|
On Mac, `rapl` can be run as follows.
|
|
|
|
|
2023-01-27 13:41:10 +00:00
|
|
|
```bash
|
2021-05-18 18:41:00 +00:00
|
|
|
$OBJDIR/dist/bin/rapl
|
|
|
|
```
|
|
|
|
|
|
|
|
### Linux
|
|
|
|
|
|
|
|
On Linux, `rapl` can be run as root, as follows.
|
|
|
|
|
|
|
|
sudo $OBJDIR/dist/bin/rapl
|
|
|
|
|
|
|
|
Alternatively, it can be run without root privileges by setting the
|
|
|
|
contents of
|
|
|
|
[/proc/sys/kernel/perf_event_paranoid](http://unix.stackexchange.com/questions/14227/do-i-need-root-admin-permissions-to-run-userspace-perf-tool-perf-events-ar)
|
|
|
|
to 0. Note that if you do change this file, its contents may reset when
|
|
|
|
the machine is next rebooted.
|
|
|
|
|
|
|
|
You must be running Linux kernel version 3.14 or later for `rapl` to
|
|
|
|
work. Otherwise, it will fail with an error message explaining this
|
|
|
|
requirement.
|
|
|
|
|
|
|
|
### Windows
|
|
|
|
|
|
|
|
Unfortunately, `rapl` does not work on Windows, and porting it would be
|
|
|
|
difficult because Windows does not have APIs that allow easy access to
|
|
|
|
the relevant model-specific registers.
|
|
|
|
|
|
|
|
## Output
|
|
|
|
|
|
|
|
The following is 10 seconds of output from a default invocation of
|
|
|
|
`rapl`.
|
|
|
|
|
2023-01-27 13:41:10 +00:00
|
|
|
```bash
|
2021-05-18 18:41:00 +00:00
|
|
|
total W = _pkg_ (cores + _gpu_ + other) + _ram_ W
|
|
|
|
#01 5.17 W = 1.78 ( 0.12 + 0.10 + 1.56) + 3.39 W
|
|
|
|
#02 9.43 W = 5.44 ( 1.44 + 1.20 + 2.80) + 3.98 W
|
|
|
|
#03 14.26 W = 10.21 ( 5.47 + 0.19 + 4.55) + 4.04 W
|
|
|
|
#04 10.02 W = 6.15 ( 2.62 + 0.43 + 3.10) + 3.86 W
|
|
|
|
#05 14.63 W = 10.43 ( 4.41 + 0.81 + 5.22) + 4.19 W
|
|
|
|
#06 11.16 W = 6.90 ( 1.91 + 1.68 + 3.31) + 4.26 W
|
|
|
|
#07 5.40 W = 1.97 ( 0.20 + 0.10 + 1.67) + 3.44 W
|
|
|
|
#08 5.17 W = 1.76 ( 0.07 + 0.08 + 1.60) + 3.41 W
|
|
|
|
#09 5.17 W = 1.76 ( 0.09 + 0.08 + 1.58) + 3.42 W
|
|
|
|
#10 8.13 W = 4.40 ( 1.55 + 0.11 + 2.74) + 3.73 W
|
|
|
|
```
|
|
|
|
|
|
|
|
Things to note include the following.
|
|
|
|
|
|
|
|
- All measurements are in Watts.
|
|
|
|
- The first line indicates the meaning of each column.
|
|
|
|
- The underscores in `_pkg_`, `_gpu_` and `_ram_` are present so that
|
|
|
|
each column's name has five characters.
|
|
|
|
- The total power is the sum of the package power and the RAM power.
|
|
|
|
- The package estimate is divided into three parts: cores, GPU, and
|
|
|
|
\"other\". \"Other\" is computed as the package power minus the
|
|
|
|
cores power and GPU power.
|
|
|
|
- If the processor does not support GPU or RAM estimates then
|
|
|
|
\"` n/a `\" will be printed in the relevant column instead of a
|
|
|
|
number, and it will contribute zero to the total.
|
|
|
|
|
|
|
|
Once sampling is finished --- either because the user interrupted it, or
|
|
|
|
because the requested number of samples has been taken --- the following
|
|
|
|
summary data is shown:
|
|
|
|
|
2023-01-27 13:41:10 +00:00
|
|
|
```bash
|
2021-05-18 18:41:00 +00:00
|
|
|
10 samples taken over a period of 10.000 seconds
|
|
|
|
|
|
|
|
Distribution of 'total' values:
|
|
|
|
mean = 8.85 W
|
|
|
|
std dev = 3.50 W
|
|
|
|
0th percentile = 5.17 W (min)
|
|
|
|
5th percentile = 5.17 W
|
|
|
|
25th percentile = 5.17 W
|
|
|
|
50th percentile = 8.13 W
|
|
|
|
75th percentile = 11.16 W
|
|
|
|
95th percentile = 14.63 W
|
|
|
|
100th percentile = 14.63 W (max)
|
|
|
|
```
|
|
|
|
|
|
|
|
The distribution data is omitted if there was zero or one samples taken.
|
|
|
|
|
|
|
|
## Options
|
|
|
|
|
|
|
|
- `-i --sample-interval`. The length of each sample in milliseconds.
|
|
|
|
Defaults to 1000. A warning is given if you set it below 50 because
|
|
|
|
that is likely to lead to inaccurate estimates.
|
|
|
|
- `-n --sample-count`. The number of samples to take. The default is
|
|
|
|
0, which is interpreted as \"unlimited\".
|
|
|
|
|
|
|
|
## Combining with `powermetrics`
|
|
|
|
|
2023-03-30 08:01:22 +00:00
|
|
|
On Mac, you can use the [mach power](powermetrics.md#mach-power) command
|
2021-05-18 18:41:00 +00:00
|
|
|
to run `rapl` in combination with `powermetrics` in a way that gives the
|
|
|
|
most useful summary measurements for each of Firefox, Chrome and Safari.
|