mirror of
https://github.com/ARM-software/workload-automation.git
synced 2025-02-21 20:38:57 +00:00
Instruments/EnergyMeas: Adds support for DerivedMeasurement from devlib
Delvib now is capable of performing postprocessing of MeasurementCSV files, instead of calculating additional metrics in WA this will be performed externally. Currently support has been added for calculating average power and cumulative energy.
This commit is contained in:
parent
5f919445d9
commit
bd126a430d
@ -17,13 +17,13 @@
|
|||||||
# pylint: disable=W0613,E1101
|
# pylint: disable=W0613,E1101
|
||||||
from __future__ import division
|
from __future__ import division
|
||||||
import os
|
import os
|
||||||
from collections import defaultdict
|
|
||||||
|
|
||||||
from devlib.instrument import CONTINUOUS
|
from devlib.instrument import CONTINUOUS
|
||||||
from devlib.instrument.energy_probe import EnergyProbeInstrument
|
from devlib.instrument.energy_probe import EnergyProbeInstrument
|
||||||
from devlib.instrument.daq import DaqInstrument
|
from devlib.instrument.daq import DaqInstrument
|
||||||
from devlib.instrument.acmecape import AcmeCapeInstrument
|
from devlib.instrument.acmecape import AcmeCapeInstrument
|
||||||
from devlib.utils.misc import which
|
from devlib.utils.misc import which
|
||||||
|
from devlib.derived.derived_measurements import DerivedEnergyMeasurements
|
||||||
|
|
||||||
from wa import Instrument, Parameter
|
from wa import Instrument, Parameter
|
||||||
from wa.framework import pluginloader
|
from wa.framework import pluginloader
|
||||||
@ -253,24 +253,7 @@ class EnergyMeasurement(Instrument):
|
|||||||
self.extract_metrics(context)
|
self.extract_metrics(context)
|
||||||
|
|
||||||
def extract_metrics(self, context):
|
def extract_metrics(self, context):
|
||||||
measurements = self.measurement_csv.itermeasurements()
|
derived_measurements = DerivedEnergyMeasurements.process(self.measurement_csv)
|
||||||
energy_results = defaultdict(dict)
|
for meas in derived_measurements:
|
||||||
power_results = defaultdict(int)
|
name = '{}_{}'.format(meas.channel.site, meas.channel.name)
|
||||||
|
context.add_metric(name, meas.value, meas.units)
|
||||||
for count, row in enumerate(measurements):
|
|
||||||
for entry in row:
|
|
||||||
channel = entry.channel
|
|
||||||
if channel.kind == 'energy':
|
|
||||||
if count == 0:
|
|
||||||
energy_results[channel.site]['start'] = entry.value
|
|
||||||
else:
|
|
||||||
energy_results[channel.site]['end'] = entry.value
|
|
||||||
elif channel.kind == 'power':
|
|
||||||
power_results[channel.site] += entry.value
|
|
||||||
|
|
||||||
for site in energy_results:
|
|
||||||
total_energy = energy_results[site]['end'] - energy_results[site]['start']
|
|
||||||
context.add_metric('{}_energy'.format(site), total_energy, 'joules')
|
|
||||||
for site in power_results:
|
|
||||||
power = power_results[site] / count + 1 #pylint: disable=undefined-loop-variable
|
|
||||||
context.add_metric('{}_power'.format(site), power, 'watts')
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user