diff options
Diffstat (limited to 'parse')
-rw-r--r-- | parse/dir_map.py | 2 | ||||
-rw-r--r-- | parse/ft.py | 14 | ||||
-rw-r--r-- | parse/sched.py | 8 | ||||
-rw-r--r-- | parse/tuple_table.py | 3 |
4 files changed, 19 insertions, 8 deletions
diff --git a/parse/dir_map.py b/parse/dir_map.py index 1c17f40..601dd3b 100644 --- a/parse/dir_map.py +++ b/parse/dir_map.py | |||
@@ -46,7 +46,7 @@ class DirMap(object): | |||
46 | 46 | ||
47 | def remove_childless(self): | 47 | def remove_childless(self): |
48 | def remove_childless2(node): | 48 | def remove_childless2(node): |
49 | for key, child in node: | 49 | for key, child in node.children.items(): |
50 | remove_childless2(child) | 50 | remove_childless2(child) |
51 | if not (child.children or child.values): | 51 | if not (child.children or child.values): |
52 | node.children.pop(key) | 52 | node.children.pop(key) |
diff --git a/parse/ft.py b/parse/ft.py index 5293b00..19453d1 100644 --- a/parse/ft.py +++ b/parse/ft.py | |||
@@ -3,6 +3,7 @@ import numpy as np | |||
3 | import os | 3 | import os |
4 | import re | 4 | import re |
5 | import shutil as sh | 5 | import shutil as sh |
6 | import sys | ||
6 | import subprocess | 7 | import subprocess |
7 | 8 | ||
8 | from point import Measurement,Type | 9 | from point import Measurement,Type |
@@ -28,7 +29,6 @@ def parse_overhead(result, overhead_bin, overhead, cycles, out_dir, err_file): | |||
28 | raise Exception("Failed (%d) with command: %s" % (ret, " ".join(cmd))) | 29 | raise Exception("Failed (%d) with command: %s" % (ret, " ".join(cmd))) |
29 | if not size: | 30 | if not size: |
30 | os.remove(ovh_fname) | 31 | os.remove(ovh_fname) |
31 | |||
32 | if size and not ret: | 32 | if size and not ret: |
33 | # Map and sort file for stats | 33 | # Map and sort file for stats |
34 | data = np.memmap(ovh_fname, dtype="float32", mode='c') | 34 | data = np.memmap(ovh_fname, dtype="float32", mode='c') |
@@ -47,19 +47,22 @@ def parse_overhead(result, overhead_bin, overhead, cycles, out_dir, err_file): | |||
47 | 47 | ||
48 | def sort_ft(ft_file, err_file, out_dir): | 48 | def sort_ft(ft_file, err_file, out_dir): |
49 | '''Create and return file with sorted overheads from @ft_file.''' | 49 | '''Create and return file with sorted overheads from @ft_file.''' |
50 | out_fname = "{}/{}".format("%s/%s" % (os.getcwd(), out_dir), FT_SORTED_NAME) | 50 | out_fname = "{}/{}".format(out_dir, FT_SORTED_NAME) |
51 | 51 | ||
52 | # Sort happens in-place | 52 | # Sort happens in-place |
53 | sh.copyfile(ft_file, out_fname) | 53 | sh.copyfile(ft_file, out_fname) |
54 | cmd = [conf.BINS['ftsort'], out_fname] | 54 | cmd = [conf.BINS['ftsort'], out_fname] |
55 | ret = subprocess.call(cmd, cwd="%s/%s" % (os.getcwd(), out_dir), stderr=err_file, stdout=err_file) | ||
56 | 55 | ||
56 | ret = subprocess.call(cmd, cwd=out_dir, stderr=err_file, stdout=err_file) | ||
57 | if ret: | 57 | if ret: |
58 | raise Exception("Sort failed with command: %s" % " ".join(cmd)) | 58 | raise Exception("Sort failed (%d) with command: %s" % (ret, " ".join(cmd))) |
59 | 59 | ||
60 | return out_fname | 60 | return out_fname |
61 | 61 | ||
62 | def extract_ft_data(result, data_dir, work_dir, cycles): | 62 | def extract_ft_data(result, data_dir, work_dir, cycles): |
63 | data_dir = os.path.abspath(data_dir) | ||
64 | work_dir = os.path.abspath(work_dir) | ||
65 | |||
63 | freg = conf.FILES['ft_data'] + "$" | 66 | freg = conf.FILES['ft_data'] + "$" |
64 | bins = [f for f in os.listdir(data_dir) if re.match(freg, f)] | 67 | bins = [f for f in os.listdir(data_dir) if re.match(freg, f)] |
65 | 68 | ||
@@ -67,6 +70,9 @@ def extract_ft_data(result, data_dir, work_dir, cycles): | |||
67 | return False | 70 | return False |
68 | 71 | ||
69 | bin_file = "{}/{}".format(data_dir, bins[0]) | 72 | bin_file = "{}/{}".format(data_dir, bins[0]) |
73 | if not os.path.getsize(bin_file): | ||
74 | sys.stderr.write("Empty feather trace file %s!" % bin_file) | ||
75 | return False | ||
70 | 76 | ||
71 | with open("%s/%s" % (work_dir, FT_ERR_NAME), 'w') as err_file: | 77 | with open("%s/%s" % (work_dir, FT_ERR_NAME), 'w') as err_file: |
72 | sorted_bin = sort_ft(bin_file, err_file, work_dir) | 78 | sorted_bin = sort_ft(bin_file, err_file, work_dir) |
diff --git a/parse/sched.py b/parse/sched.py index ba0df5e..2da0149 100644 --- a/parse/sched.py +++ b/parse/sched.py | |||
@@ -2,6 +2,7 @@ import config.config as conf | |||
2 | import os | 2 | import os |
3 | import re | 3 | import re |
4 | import struct | 4 | import struct |
5 | import sys | ||
5 | import subprocess | 6 | import subprocess |
6 | 7 | ||
7 | from collections import defaultdict,namedtuple | 8 | from collections import defaultdict,namedtuple |
@@ -66,6 +67,10 @@ def register_record(name, id, method, fmt, fields): | |||
66 | def make_iterator(fname): | 67 | def make_iterator(fname): |
67 | '''Iterate over (parsed record, processing method) in a | 68 | '''Iterate over (parsed record, processing method) in a |
68 | sched-trace file.''' | 69 | sched-trace file.''' |
70 | if not os.path.getsize(fname): | ||
71 | sys.stderr.write("Empty sched_trace file %s!" % fname) | ||
72 | return | ||
73 | |||
69 | f = open(fname, 'rb') | 74 | f = open(fname, 'rb') |
70 | max_type = len(record_map) | 75 | max_type = len(record_map) |
71 | 76 | ||
@@ -182,4 +187,7 @@ def extract_sched_data(result, data_dir, work_dir): | |||
182 | 187 | ||
183 | # Summarize value groups | 188 | # Summarize value groups |
184 | for name, data in stat_data.iteritems(): | 189 | for name, data in stat_data.iteritems(): |
190 | if not data: | ||
191 | continue | ||
185 | result[name] = Measurement(str(name)).from_array(data) | 192 | result[name] = Measurement(str(name)).from_array(data) |
193 | |||
diff --git a/parse/tuple_table.py b/parse/tuple_table.py index 86baa08..ee94772 100644 --- a/parse/tuple_table.py +++ b/parse/tuple_table.py | |||
@@ -3,8 +3,6 @@ from collections import defaultdict,namedtuple | |||
3 | from point import SummaryPoint,Type | 3 | from point import SummaryPoint,Type |
4 | from dir_map import DirMap | 4 | from dir_map import DirMap |
5 | from col_map import ColMap,ColMapBuilder | 5 | from col_map import ColMap,ColMapBuilder |
6 | |||
7 | |||
8 | from pprint import pprint | 6 | from pprint import pprint |
9 | 7 | ||
10 | class TupleTable(object): | 8 | class TupleTable(object): |
@@ -88,7 +86,6 @@ class ReducedTupleTable(TupleTable): | |||
88 | self.__add_to_dirmap(dir_map, col, kv, point) | 86 | self.__add_to_dirmap(dir_map, col, kv, point) |
89 | 87 | ||
90 | dir_map.remove_childless() | 88 | dir_map.remove_childless() |
91 | print("wrote: %s" % self) | ||
92 | return dir_map | 89 | return dir_map |
93 | 90 | ||
94 | @staticmethod | 91 | @staticmethod |