def __init__( self, code_desc, num_components, mission_time, is_type, is_parms, sector_fail_model, component_fail_dists, component_repair_dists, fail_check_type=None, critical_region_check=True, ): # Importance sampling type self.is_type = is_type if self.is_type == Simulation.IS_UNIF_BFB_NO_FORCING_OPT: self.sim = UniformizationBFBOpt( code_desc, num_components, mission_time, is_parms, sector_fail_model, component_fail_dists, component_repair_dists, fail_check_type, critical_region_check, ) self.sim.init() elif self.is_type == Simulation.IS_BFB_NO_FORCING_OPT: self.sim = BFBOpt( code_desc, num_components, mission_time, is_parms, sector_fail_model, component_fail_dists, component_repair_dists, fail_check_type, critical_region_check, ) self.sim.init() elif self.is_type == Simulation.REGULAR: self.sim = RegularSimulation( code_desc, num_components, mission_time, None, sector_fail_model, component_fail_dists, component_repair_dists, fail_check_type, critical_region_check, ) self.sim.init()
class Simulate: def __init__(self, code_desc, num_components, mission_time, is_type, is_parms, sector_fail_model, component_fail_dists, component_repair_dists, fail_check_type=None, critical_region_check=False): # Importance sampling type self.is_type = is_type if self.is_type == Simulation.IS_UNIF_BFB_NO_FORCING_OPT: self.sim = UniformizationBFBOpt(code_desc, num_components, mission_time, is_parms, sector_fail_model, component_fail_dists, component_repair_dists, fail_check_type,critical_region_check) self.sim.init() elif self.is_type == Simulation.IS_BFB_NO_FORCING_OPT: self.sim = BFBOpt(code_desc, num_components, mission_time, is_parms, sector_fail_model, component_fail_dists, component_repair_dists, fail_check_type,critical_region_check) self.sim.init() elif self.is_type == Simulation.REGULAR: self.sim = RegularSimulation(code_desc, num_components, mission_time, None, sector_fail_model, component_fail_dists, component_repair_dists, fail_check_type,critical_region_check) self.sim.init() def run_simulation(self, num_iterations=10): run_samples = [] run_patterns = [] if self.sim.sector_failure_model is not None: num_sectors_per_disk = self.sim.sector_failure_model.total_num_sectors else: num_sectors_per_disk = 585937500 bytes_per_sector = 512 avg_bytes_lost = 0 distinct_patterns = {} pattern_probs = {} for i in range(num_iterations): #print "Iteration: ", i (sample, pattern, critical_region) = self.sim.run_iteration() if not distinct_patterns.has_key(pattern): distinct_patterns[pattern] = 0 pattern_probs[pattern] = 0 distinct_patterns[pattern] += 1 pattern_probs[pattern] += sample if sample != 0: (num_disks, num_sectors) = eval(pattern) if num_sectors == 0: avg_bytes_lost += (critical_region*sample) else: avg_bytes_lost += 1 run_samples.append(sample) run_patterns.append(pattern) for pattern in pattern_probs.keys(): pattern_probs[pattern] /= num_iterations avg_bytes_lost = ((avg_bytes_lost * bytes_per_sector)/ num_iterations) return (run_samples, avg_bytes_lost, distinct_patterns, pattern_probs)