aboutsummaryrefslogtreecommitdiffstats
path: root/common.py
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2013-03-18 13:15:42 -0400
committerJonathan Herman <hermanjl@cs.unc.edu>2013-03-18 13:15:42 -0400
commit16dfc8df20c6befeed423217a2e0f5ae59b5a04d (patch)
tree722ff18b111f6ab2fc11fffa46e78889bd2d5708 /common.py
parent652a57b5a53e41e585c7e0d10601c807ba08c36f (diff)
Use smarter defaults which can handle data from Bjorns scripts.
Diffstat (limited to 'common.py')
-rw-r--r--common.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/common.py b/common.py
index d080e1a..cba31bf 100644
--- a/common.py
+++ b/common.py
@@ -1,5 +1,6 @@
1import os 1import os
2import re 2import re
3import stat
3import subprocess 4import subprocess
4import sys 5import sys
5 6
@@ -134,3 +135,53 @@ def load_params(fname):
134 raise IOError("Invalid param file: %s\n%s" % (fname, e)) 135 raise IOError("Invalid param file: %s\n%s" % (fname, e))
135 136
136 return params 137 return params
138
139
140def num_cpus():
141 '''Return the number of CPUs in the system.'''
142
143 lnx_re = re.compile(r'^(processor|online)')
144 cpus = 0
145
146 with open('/proc/cpuinfo', 'r') as f:
147 for line in f:
148 if lnx_re.match(line):
149 cpus += 1
150 return cpus
151
152def ft_freq():
153 umachine = subprocess.check_output(["uname", "-m"])
154
155 if re.match("armv7", umachine):
156 # Arm V7s use a millisecond timer
157 freq = 1000.0
158 elif re.match("x86", umachine):
159 # X86 timer is equal to processor clock
160 reg = re.compile(r'^cpu MHz\s*:\s*(?P<FREQ>\d+)', re.M)
161 with open('/proc/cpuinfo', 'r') as f:
162 data = f.read()
163
164 match = re.search(reg, data)
165 if not match:
166 raise Exception("Cannot parse CPU frequency from x86 CPU!")
167 freq = int(match.group('FREQ'))
168 else:
169 # You're on your own
170 freq = 0
171 return freq
172
173
174def uname_matches(reg):
175 data = subprocess.check_output(["uname", "-r"])
176 return bool( re.match(reg, data) )
177
178def is_executable(fname):
179 '''Return whether the file passed in is executable'''
180 mode = os.stat(fname)[stat.ST_MODE]
181 return mode & stat.S_IXUSR and mode & stat.S_IRUSR
182
183def is_device(dev):
184 if not os.path.exists(dev):
185 return False
186 mode = os.stat(dev)[stat.ST_MODE]
187 return not (not mode & stat.S_IFCHR)