source: branches/reconfiguration/platforms/tsar_generic_iob/scripts/parse.py @ 975

Last change on this file since 975 was 902, checked in by cfuguet, 10 years ago

reconf: improve the random fault generation

  • Improve portability of python scripts by using env
File size: 2.7 KB
Line 
1#!/usr/bin/env python
2# @author Cesar Fuguet <cesar.fuguet-tortolero@lip6.fr>
3# @date   28 August, 2014
4# @desc   generate output file containing a table with the format below:
5#
6#                              fault configurations
7#                   | faultconfig 0 | faultconfig 1 | faultconfig M
8#               ----------------------------------------------------
9#               4   |    cycles     |    cycles     |    cycles
10#  # clusters   16  |    cycles     |    cycles     |    cycles
11#               64  |    cycles     |    cycles     |    cycles
12#               N   |    cycles     |    cycles     |    cycles
13
14import os
15import sys
16
17def parse_ffstend(configs, faultconfigs, confpath, outpath):
18    # write header
19    ffst_end = open(outpath, "w")
20    ffst_end.write("#  ffst end (cycles)\n")
21    ffst_end.write("{0}\n".format(len(faultconfigs)))
22    for config in faultconfigs:
23        ffst_end.write("{0}\n".format(config))
24
25    # repeat while configurations is not empty
26    quit = 0
27    for x,y in configs:
28        ffst_end.write("\n{0:<6}".format(str(x*y)))
29        for f in xrange(len(faultconfigs)):
30            temp = "config_{0}c{1}f/".format(x*y, f)
31            confdir = os.path.join(confpath, temp)
32
33            #  parse term log and get relevant information
34            termname = os.path.join(confdir, "term")
35            try:
36                termlog = open(termname, "r")
37            except IOError as e:
38                print "IOError {0}: {1}".format(termname, e.strerror)
39                quit = 1
40                break
41
42            found = False
43            for line in termlog:
44                partitions = line.partition(':')
45                if partitions[0].strip() == "FFST (END)":
46                    found = True
47                    value = int(partitions[2])
48                    ffst_end.write(" {0:<8}".format(value))
49                    break
50
51            if not found: ffst_end.write(" {0:<8}".format(-1))
52            # end for faultconfig
53
54        if quit: break
55        # end for configs
56
57    ffst_end.close()
58    # end def parse_ffstend
59
60if __name__ == "__main__":
61    configs = []
62    configs.append([2 , 2 ])
63    configs.append([4 , 2 ])
64    configs.append([4 , 4 ])
65    configs.append([8 , 4 ])
66    configs.append([8 , 8 ])
67    configs.append([16, 8 ])
68    configs.append([16, 16])
69
70    faultconfigs = []
71    faultconfigs.append('0 faulty core')
72    faultconfigs.append('1 faulty core')
73    faultconfigs.append('2 faulty cores')
74    faultconfigs.append('1 faulty cluster (3 cores)')
75    faultconfigs.append('2 faulty clusters (6 cores)')
76
77    assert len(sys.argv) > 2, "Introduce config path and output path"
78
79    parse_ffstend(configs, faultconfigs, sys.argv[1], sys.argv[2])
80
81# vim: tabstop=4 : softtabstop=4 : shiftwidth=4 : expandtab
Note: See TracBrowser for help on using the repository browser.