summaryrefslogtreecommitdiff
path: root/bin/eval-accounting-overhead.py
blob: 9f1e98c6152b758a21c879650e627ffd5b9d8a54 (plain)
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
#!/usr/bin/env python3
"""
eval-accounting-overhead -- evaluate overhead of various accounting methods and energy/power/timestamp integer sizes

Usage:
PYTHONPATH=lib bin/eval-accounting-overhead.py <files ...>

Data Generation:
for accounting in static_state_immediate 'static_state' 'static_statetransition_immediate' 'static_statetransition'; do for intsize in uint16_t uint32_t uint64_t; do PYTHONPATH=~/var/ess/aemr/dfatool/lib ~/var/ess/aemr/dfatool/bin/generate-dfa-benchmark.py --timer-pin=GPIO::p1_0 --sleep=30 --repeat=10 --depth=10 --arch=msp430fr5994lp --app=test_benchmark --trace-filter='setup,setAutoAck,write,getEnergy,$' --timing --dummy= --accounting=${accounting},ts_type=${intsize},power_type=${intsize},energy_type=${intsize} model/driver/nrf24l01.dfa ~/var/projects/multipass/src/app/test_benchmark/main.cc; done; done

Feed the resulting files into this script, output is one line per file
providing overhead per transition and getEnergy overhead

"""

from dfatool import AnalyticModel, TimingData, pta_trace_to_aggregate
import json
import sys

for filename in sys.argv[1:]:
    with open(filename, 'r') as f:
        measurement = json.load(f)
    raw_data = TimingData([filename])
    preprocessed_data = raw_data.get_preprocessed_data()
    by_name, parameters, arg_count = pta_trace_to_aggregate(preprocessed_data)
    model = AnalyticModel(by_name, parameters, arg_count)
    static_model = model.get_static()
    if 'setup' in model.names:
        transition_duration = static_model('setup', 'duration')
    elif 'init' in model.names:
        transition_duration = static_model('init', 'duration')
    get_energy_duration = static_model('getEnergy', 'duration')

    print('{:60s}: {:.0f} / {:.0f} µs'.format(measurement['opt']['accounting'], transition_duration, get_energy_duration))