blob: 1aed71091c412adc6c69d696f13c78becc78e03a [file] [log] [blame]
Patrick Bellasi0f8ac682015-10-12 11:29:40 +01001#!/usr/bin/python
Patrick Bellasid95e98d2015-12-04 13:00:46 +00002#
3# SPDX-License-Identifier: Apache-2.0
4#
5# Copyright (C) 2015, ARM Limited and contributors.
6#
7# Licensed under the Apache License, Version 2.0 (the "License"); you may
8# not use this file except in compliance with the License.
9# You may obtain a copy of the License at
10#
11# http://www.apache.org/licenses/LICENSE-2.0
12#
13# Unless required by applicable law or agreed to in writing, software
14# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16# See the License for the specific language governing permissions and
17# limitations under the License.
18#
Patrick Bellasi0f8ac682015-10-12 11:29:40 +010019
20import logging
21import getopt
22import sys
23
24# Sampler configuration
25config = {
26 'period' : 0,
27 'samples' : 0,
28}
29
30class OdroidSampler(object):
31
32 sysfs_base = '/sys/devices/12c60000.i2c/i2c-4/i2c-dev/i2c-4/device'
33 sysfs = {
34 'arm' : sysfs_base + '/4-0040',
35 'kfc' : sysfs_base + '/4-0045',
36 }
37 power = {
38 'arm' : sysfs['arm'] + '/sensor_W',
39 'kfc' : sysfs['kfc'] + '/sensor_W',
40 }
41
42 def __init__(self, samples, period):
43 self.energy_proxy = {
44 'arm' : 0,
45 'kfc' : 0,
46 }
47 self.samples = samples
48 self.period = period
49
50 def sample(self, device):
51 f = open(self.power[device], 'r')
52 power = f.readline()
53 self.energy_proxy[device] += power
54 f.close()
55
56 def averagePower(self, device):
57 self.energy_proxy[device] = 0
58 for i in range(0, self.samples):
59 sample(self, device)
60 sleep(self.period / 1e6)
61 return self.energy_proxy[device] / self.samples
62
63
64def parseOptions():
65 global config
66
67 logging.debug('Parsing options')
68
69 try:
70 opts, args = getopt.getopt(sys.argv[1:], "p:s:", ["period=", "samples="])
71 except getopt.GetoptError as err:
72 # print help information and exit:
73 print str(err)
74 usage()
75 sys.exit(2)
76 output = None
77 verbose = False
78 for o, a in opts:
79 if o == "-v":
80 verbose = True
81 elif o in ("-p", "--period"):
82 config['period'] = int(a)
83 elif o in ("-s", "--samples"):
84 config['samples'] = int(a)
85 else:
86 assert False, "unhandled option"
87
88 logging.info('Sampler configured for {0:d} samples, evenry {1:.3f}ms'\
89 .format(config['samples'], config['period']/1000))
90
91def main():
92
93 parseOptions()
94
95 sampler = OdroidSampler(config['samples'], config['period'])
96
97 avg_power = amples.averagePower(config['device'])
98 logging.info('Average power: {0:f}'.format(avg_power))
99
100logging.basicConfig(
101 format='%(asctime)-9s %(levelname)-8s: %(message)s',
102 level=logging.DEBUG,
103 datefmt='%I:%M:%S')
104
105if __name__ == "__main__":
106 main()