Nils Steinger, 2017-06-16
This digital distribution contains the following materials related to the thesis:
The following software has been developed to complement the work described in the thesis, as listed below and in appendix A of the thesis.
Details on the required hardware setup can be found in the chapter "Measurement Technologies".
power_gadget_snmp
is based on Power Gadget
, Intel's
reference implementation of an interface to the RAPL energy measurement
functionality of modern Intel "Core" and "Xeon" CPUs.
It implements the pass_persist
interface used by the
Net-SNMP
SNMP agent to expose the RAPL measurement values
(converted to Joules) via an SNMP subtree rooted at the OID
.1.3.6.1.4.1.47670.5
.
Its OIDs follow the format
.1.3.6.1.4.1.47670.5.<cpu_number>.<rapl_domain>
, where
cpu_number
is the one-based CPU number returned by the RAPL
interface, and rapl_domain
is either 1
,
2
, 3
, or 4
, signifying the
package
, core
, uncore
, and
dram
RAPL domains, respectively.
Written in C, it can be compiled using the supplied Makefile.
Note that the RAPL interface requires the msr
and
cpuid
kernel modules to be loaded.
Available at: https://svn.sosy-lab.org/software/measurement+control/power_gadget_snmp/
collectd-plugin-intel_cpu_energy
is a native plugin for the
collectd
"system statistics collection daemon".
It uses the same reference implementation as power_gadget_snmp
to
access the RAPL measurement values, converts them to Joules, then passes them on
to collectd
for further processing.
Its output follows the recommended collectd
plugin structure, with
the following mapping:
hostname = <hostname provided by collectd>
plugin = intel_cpu_energy
plugin_instance = cpu<N>
(N >= 0)type = energy
type_instance = [ package | core | uncore | dram ]
Therefore, the resulting query path will look similar to
zeus01.intel_cpu_energy-cpu0.energy-package
.
Written in C, it can be compiled using the supplied Makefile.
Note that the RAPL interface requires the msr
and
cpuid
kernel modules to be loaded.
Available at: https://github.com/n-st/collectd-plugin-intel_cpu_energy
The data acquisition and processing for the single-face energy meters is split into multiple programs for increased flexibility.
All emeter
-related programs are available at https://svn.sosy-lab.org/software/measurement+control/emeter/.
A central daemon --- emeterd
--- collects and counts pulses from
the energy meters and stores the results in realtime.
Two storage formats are used: first, all events (both pulses and starting or
stopping the daemon) are recorded to raw.log
as plain-text lines.
Pulses are logged in the format
<date>,<time>,event,[ start | stop ]
,
while pulses are logged as
<date>,<time>,<input pin number>,0
.
Additionally, the daemon maintains separate text files --- one for each
configured input pin --- that contain a monotonically increasing value
signifying the number of pulses received on that pin so far. The values of these
counters are preserved across restarts of the daemon, or indeed the system it
runs on.
Refer to pins.txt
for the mapping between GPIO pin numbers, meter
numbers, and node names in our setup.
The emeterd.py
executable file includes a standardized
configuration block to be parsed by SysV-style init systems, so it can be
directly installed as a system service.
A logrotate
configuration file to regularly raw.log
is
also included in the distribution.
emeter-live
is an ncurses
-based command-line utility
that reads lines from raw.log
(as written by emeterd
),
converts the timestamps and recorded pulses within into the most recently
observed power consumption of each connected node, and displays that information
both numerically and as a set of bar graphs.
emeter-live.py
expects continous input on its standard input
stream, so emeter-live.sh
is provided as a wrapper to automatically
supply the required data.
emeter-ws
operates in a manner similar to emeter-live
in that it parses lines from raw.log
to calculate current power
consumption.
In this instance, however, the process is split into two parts:
a daemon serves a web page via HTTP on port 9000 and simultaneously detects and
broadcasts any changes to raw.log
to all clients currently connected via the
Websocket protocol.
These broadcasts are received by a JavaScript function integrated into the web
page, which then calculates the current power consumption and displays it to
the user (again both numerically and as bar graphs).
Additionally, the JavaScript function regularly checks whether the time passed
since the last pulse on a certain pin is still consistent with the power
consumption reported for that pin. When the time period exceeds the one
previously observed (equating to a lower power consumption than before), it
begins extrapolating the current consumption value based on the time period
since the last pulse. As soon as the next pulse is received on that pin, the
estimate is replaced with a newly calculated exact value and normal operation
resumes.
A SysV-compatible service file is provided in emeter-ws
.
Finally, the distribution contains two Python scripts that implement the
Net-SNMP
SNMP agent's pass
and
pass_persist
interfaces, respectively.
As explained in more detail by the snmpd.conf
manual page, the
pass_persist
interface has the advantage of being more
resource-efficient, since it re-uses the same interface process repeatedly,
instead of launching a process for each individual SNMP query.
Both scripts use an SNMP subtree under the OID .1.3.6.1.4.1.47670.2
to provide the current contents of the counter files written by
emeterd
. The OIDs follow the format
.1.3.6.1.4.1.47670.2.<meter_number>
, using the meter
numbering described in pins.txt
.
Both implementations of the SML electricity meter interface are based on the jSML
Java library
developed by the department "Intersectoral Energy Systems and Grid
Integration" at the Fraunhofer Institute for Solar Energy Systems in
Freiburg.
jSML
supports a number of features, including both encoding and
decoding SML message files.
The following two programs use its decoding functionality and format the
results according to their intended use case.
To facilitate debugging the optical interface on SML-capable electricity meters,
a jSML
example program was modified to receive SML messages via the
serial interface of a Raspberry Pi single-board computer and format it in a
human-readable way.
Available at: https://github.com/sosy-lab/sml-serial-receiver
Expanding upon the jSML
-based program modified for human-readable
output, collectd-plugin-sml-electricity-meter
integrates with
collectd
's Java plugin interface and submits all relevant SML
message contents to collectd
for further processing.
The fields in collectd
's data packets are set as follows:
hostname = <set at compile-time>
plugin = smlreceiver
plugin_instance = <SML server ID>
type = [ watts | watt_hours ]
type_instance = <OBIS code>
Refer to section "Electronic Electricity Meter EMH ED300L" and the glossary for details on the use of OBIS codes.
Available at: https://github.com/n-st/collectd-plugin-sml_electricity_meter
The VerifierCloud
is a sophisticated system for queueing and
distributing tasks --- primarily verification runs --- to nodes of a computer
cluster.
The automatic power-off and power-on functionality described in this thesis was implemented in a separate feature branch "automatic-shutdown" so it could be tested without impacting productive use on the main cluster.
All information required for powering worker nodes off and on is collected
automatically.
However, initiating a power-off sequence requires the worker process to have
elevated privileges on the node it is running on. For this, the node's
sudoers
configuration needs to be amended to allow the worker
process to execute the command sudo poweroff
non-interactively
(i.e. without entering a password).
After privilege escalation has been configured on the node, the user can then
use the VerifierCloud
command-line client to manually initiate a
power-off of that node, as well as a subsequent power-on.
To enable the automatic power-off functionality, the worker needs to be started
with a non-empty "shutdown-delay" value, either via the command-line
client or from the master's WorkerInformation
file.
The configuration syntax is unchanged and described in more detail in the
official VerifierCloud
documentation.
Available at: https://svn.sosy-lab.org/software/verifiercloud/branches/automatic-shutdown/
This document uses a style sheet derived from the Style sheet for the W3C specifications, Copyright © 2017 W3C® (MIT, ERCIM, Keio, Beihang).
This use complies with the terms of the W3C Software and Document Notice and License.