X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Fdmclock%2Fbenchmark%2Fdata_parser.py;fp=src%2Fceph%2Fsrc%2Fdmclock%2Fbenchmark%2Fdata_parser.py;h=0000000000000000000000000000000000000000;hb=7da45d65be36d36b880cc55c5036e96c24b53f00;hp=c90d85fd9ab6f32ebe0aad558675e2fa222081f8;hpb=691462d09d0987b47e112d6ee8740375df3c51b2;p=stor4nfv.git diff --git a/src/ceph/src/dmclock/benchmark/data_parser.py b/src/ceph/src/dmclock/benchmark/data_parser.py deleted file mode 100755 index c90d85f..0000000 --- a/src/ceph/src/dmclock/benchmark/data_parser.py +++ /dev/null @@ -1,191 +0,0 @@ -#!/usr/bin/env python - -class DataPoint: - def __init__(self): - self.nserver = 0; - self.nclient = 0; - self.heap_type = 0; - self.total_time_to_add_req = 0; - self.total_time_to_complete_req = 0; - self.config = '' - - def set_name(self, config, heap_type): - self.config = config; - self.heap_type = heap_type - - def get_conig(self): - import re - return re.split(r"/|\.", self.config)[1] - - def __str__(self): - return "s:%d, c:%d,h:%d,config:%s"%(self.nserver, self.nclient, self.heap_type, self.config); -# end DataPoint - - -def isFloat(elem): - try: - float(elem) - return True - except ValueError: - return False -#end isFloat - - -def parse_config_params(fname): - nclient = 0; - nserver = 0; - # read config file property - with open(fname, 'r') as f: - for line in f: - line = line.strip('\n \t') - if not line: continue; - if line.startswith("client_count"): - nclient += int(line.split('=')[-1]); - if line.startswith("server_count"): - nserver += int(line.split('=')[-1]); - # end of file - return [nserver, nclient]; -# parse_config_params - -def make_aggregate_data_point(dps, config, heap_type): - # create new aggregate point - dp = DataPoint(); - # set set and k_way_heap property - dp.set_name(config, heap_type); - - num_run = 0 - for _dp in dps: - if _dp.config == config and _dp.heap_type == heap_type: - # print _dp, config, heap_type - dp.nserver =_dp.nserver - dp.nclient = _dp.nclient - num_run += 1 - dp.total_time_to_add_req += _dp.total_time_to_add_req - dp.total_time_to_complete_req += _dp.total_time_to_complete_req - - # average - dp.total_time_to_add_req /= num_run; - dp.total_time_to_complete_req /= num_run - #print dp - return dp; - -def parse_data_points(filename): - dps = []; #data-points - dp = None; - state = 0; - configs = {} - k_ways = {} - - with open(filename, 'r') as f: - for line in f: - line = line.strip('\n \t') - if not line: continue; - - # file_name:1:configs/dmc_sim_8_6.conf - if line.startswith("file_name"): - if dp: - dps.append(dp); - state = 0; - - # new data-point - dp = DataPoint(); - parts = line.split(':') - fname = parts[-1]; - dp.heap_type = int(parts[1]); - if dp.heap_type not in k_ways: - k_ways[dp.heap_type] = 1; - - # add to the dictionary - configs[fname] = 1; - - dp.config = fname; - params = parse_config_params(fname) - dp.nserver = params[0]; - dp.nclient = params[-1]; - - elif line.startswith("average"): # take last 2 averages - r = [float(s) for s in line.split(' ') if isFloat(s)] - state +=1; - #print r, dp #if isFloat(s) - if state == 3: - dp.total_time_to_add_req = r[0] - elif state == 4: - dp.total_time_to_complete_req = r[0] - else: pass - - else: - pass; - # final entry - dps.append(dp) - - # compute average of multiple runs - dps_avg = [] - for config in configs: - data_per_config = [] - for k in k_ways: - aggr_dp = make_aggregate_data_point(dps, config , k); - data_per_config.append(aggr_dp); - dps_avg.append(data_per_config); - # end for - return dps_avg; -# end parse_data_points - - -def create_header(num_cols): - fields = ['nserver_nclient(config_file)','add_req', 'complete_req']; - header = fields[0] - #write add_req_{1, ...} - for i in range(num_cols): - header = '%s %s_%i'%(header, fields[1], i+2) - #write complete_req_{1, ...} - for i in range(num_cols): - header = '%s %s_%i'%(header, fields[2], i+2) - # new-line - header = '%s\n'%(header) - return header -# end create_header - - -def create_data_line(aggr_dp): - # get common info - dp = aggr_dp[0] - data_line = "s:%d_c:%d "%(dp.nserver, dp.nclient); - # get the point-count - num_cols = len(aggr_dp); - # write add_req_{1, ...} - for i in range(num_cols): - data_line = '%s %f'%(data_line, aggr_dp[i].total_time_to_add_req) - # write complete_req_{1, ...} - for i in range(num_cols): - data_line = '%s %f'%(data_line, aggr_dp[i].total_time_to_complete_req) - # new-line - data_line = '%s\n'%(data_line) - return data_line -# end create_data_line - - -def make_data(filename): - # write the aggregated point in space separated file - dps = parse_data_points(filename); - if not len(dps) : return - print "total points: ", len(dps) - # open file - with open('%s.dat'%(filename), 'w+') as f: - # write header - f.write(create_header(len(dps[0]))); - # write data-line - for aggr_dp in dps: - f.write(create_data_line(aggr_dp)); - - -def main(output_file): - print output_file - make_data(output_file); - -import sys -if __name__ == "__main__": - file_name="result" - if len(sys.argv) > 1: - file_name=sys.argv[1].strip() - main(file_name) -