Example #1
0
File: abl.py Project: templexxx/abl
    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()
Example #2
0
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)