1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
# 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
First, do a [standard build of Firefox](/setup/index.rst).
### Mac
On Mac, `rapl` can be run as follows.
``` {.brush: .bash}
$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`.
``` {.brush: .bash}
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:
``` {.brush: .bash}
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`
On Mac, you can use the [mach power](powermetrics.html#mach-power) command
to run `rapl` in combination with `powermetrics` in a way that gives the
most useful summary measurements for each of Firefox, Chrome and Safari.
|