/** * Gets the time delay in seconds, from the current simulation time, * that the next failure will be injected. * Since the values returned by the {@link #faultArrivalHoursGenerator} * are considered to be in <b>hours</b>, such values are converted to seconds. * * @return the next failure injection delay in seconds */ private double getTimeDelayForNextFault() { return faultArrivalHoursGenerator.sample() * 3600; }
/** * Gets a Pseudo Random Number used to give a * recovery time (in seconds) for each VM that was failed. * @return */ public double getRandomRecoveryTimeForVmInSecs() { return random.sample()*MAX_VM_RECOVERY_TIME_SECS + 1; }
/** * Get the seek time for a file with the defined size. Given a file size in MB, this method * returns a seek time for the file in seconds. * * @param fileSize the size of a file in MB * @return the seek time in seconds */ private double getSeekTime(int fileSize) { double result = 0; if (gen != null) { result += gen.sample(); } if (fileSize > 0 && capacity != 0) { result += (fileSize / capacity); } return result; }
@Override public Vm getVmToMigrate(Host host) { final List<Vm> migratableVms = host.getMigratableVms(); if (migratableVms.isEmpty()) { return Vm.NULL; } final int index = (int)rand.sample()*migratableVms.size(); return migratableVms.get(index); }
@Override public int getRandomValue(final int maxValue){ final double uniform = getRandom().sample(); /*always get an index between [0 and size[, regardless if the random number generator returns values between [0 and 1[ or >= 1*/ return (int)(uniform >= 1 ? uniform % maxValue : uniform * maxValue); }
/** * Randomly generates a number of PEs which will fail for the datacenter. * The minimum number of PEs to fail is 1. * * @param host the Host to generate a number of PEs to fail * @return the generated number of failed PEs for the datacenter, * between [1 and Number of PEs]. */ private int randomNumberOfFailedPes(final Host host) { /*the random generator return values from [0 to 1] and multiplying by the number of PEs we get a number between 0 and number of PEs*/ return (int) (random.sample() * host.getNumberOfWorkingPes()) + 1; }
/** * Randomly gets a Host that will have some PEs set to failed. * * @return the randomly selected Host; or {@link Host#NULL} if the Datacenter * doesn't have Hosts or the selected one doesn't have more PEs. */ private Host getRandomHost() { if (datacenter.getHostList().isEmpty()) { return Host.NULL; } final int idx = (int) (random.sample() * datacenter.getHostList().size()); return datacenter.getHost(idx); }
@Override public double getUtilization(double time) { if (getHistory().containsKey(time)) { return getHistory().get(time); } final double utilization = getRandomGenerator().sample(); getHistory().put(time, utilization); return utilization; }
/** * Simulates the dynamic arrival of Cloudlets, randomly during simulation runtime. * At any time the simulation clock updates, a new Cloudlet will be * created with a probability of 30%. * * @param evt */ private void createRandomCloudlets(final EventInfo evt) { if(random.sample() <= 0.3){ System.out.printf("\n# Randomly creating 1 Cloudlet at time %.2f\n", evt.getTime()); Cloudlet cloudlet = createCloudlet(); cloudletList.add(cloudlet); broker0.submitCloudlet(cloudlet); } } }
/** * Get the seek time for a file with the defined size. Given a file size in MByte, this method * returns a seek time for the file in seconds. * * @param fileSize the size of a file in MByte * @return the seek time in seconds */ private double getSeekTime(final int fileSize) { double result = 0; if (gen != null) { result += gen.sample(); } if (fileSize > 0 && storage.getCapacity() != 0) { result += fileSize / (double)storage.getCapacity(); } return result; }
@Override protected Vm createVm() { final int id = createsVms++; final int pesId = (int) (randVm.sample() * VM_PES.length); final int mipdsId = (int) (randMipsVm.sample() * MIPS_VM.length); final int pes = VM_PES[pesId]; final int mips = MIPS_VM[mipdsId]; final Vm vm = new VmSimple(id, mips, pes) .setRam(512).setBw(1000).setSize(10000) .setCloudletScheduler(new CloudletSchedulerCompletelyFair()); return vm; }
@Override protected Vm createVm() { final int id = createsVms++; final int pesId = (int) (randVm.sample() * VM_PES.length); final int mipsId = (int) (randMip.sample() * VM_MIPS.length); final int pes = VM_PES[pesId]; final int mips = VM_MIPS[mipsId]; final Vm vm = new VmSimple(id, mips, pes) .setRam(512).setBw(1000).setSize(10000) .setCloudletScheduler(new CloudletSchedulerTimeShared()); return vm; }
private Cloudlet createCloudlet() { final UtilizationModel model = new UtilizationModelDynamic(0.1); final int id = createdCloudlets++; final int i = (int) (randCloudlet.sample() * CLOUDLET_LENGTHS.length); final int p = (int) (randCloudletPes.sample() * CLOUDLET_PES.length); final long length = CLOUDLET_LENGTHS[i]; final long pes = CLOUDLET_PES[p]; return new CloudletSimple(id, length, pes) .setFileSize(1024) .setOutputSize(1024) .setUtilizationModelBw(model) .setUtilizationModelRam(model) .setUtilizationModelCpu(new UtilizationModelFull()); }
private Cloudlet createCloudlet() { final int id = createdCloudlets++; final int i = (int) (randCloudlet.sample() * CLOUDLET_LENGTHS.length); final long length = CLOUDLET_LENGTHS[i]; return new CloudletSimple(id, length, 2) .setFileSize(1024) .setOutputSize(1024) .setUtilizationModel(new UtilizationModelFull()); }
private Cloudlet createCloudlet() { final int id = createdCloudlets++; //randomly selects a length for the cloudlet final long length = CLOUDLET_LENGTHS[(int) rand.sample()]; UtilizationModel utilization = new UtilizationModelFull(); return new CloudletSimple(id, length, 2) .setFileSize(1024) .setOutputSize(1024) .setUtilizationModel(utilization); } }
@Override protected Vm createVm() { final int id = createsVms++; final int pesId = (int) (randVm.sample() * VM_PES.length); final int pes = VM_PES[pesId]; Vm vm = new VmSimple(id, 1000, pes) .setRam(512).setBw(1000).setSize(10000) .setCloudletScheduler(new CloudletSchedulerTimeShared()); return vm; }
@Override protected Vm createVm() { final int id = createsVms++; final int pesId = (int) (randVm.sample() * VM_PES.length); final int pes = VM_PES[pesId]; Vm vm = new VmSimple(id, 1000, pes) .setRam(512).setBw(1000).setSize(10000) .setCloudletScheduler(new CloudletSchedulerCompletelyFair()); return vm; }
@Override protected CloudletSchedulerTimeSharedExperiment createExperiment(int i) { final ContinuousDistribution cloudletPesPrng = createRandomGen(i, 1, MAX_CLOUDLET_PES); final CloudletSchedulerTimeSharedExperiment exp = new CloudletSchedulerTimeSharedExperiment(i, this); exp .setCloudletPesPrng(cloudletPesPrng) .setNumCloudletsToCreate((int) getCloudletsNumberPrng().sample()) .setAfterExperimentFinish(this::afterExperimentFinish) .setVerbose(false); return exp; } }
@Override protected CompletelyFairSchedulerExperiment createExperiment(int i) { final ContinuousDistribution cloudletPesPrng = createRandomGen(i, 1, MAX_CLOUDLET_PES); final CompletelyFairSchedulerExperiment exp = new CompletelyFairSchedulerExperiment(i, this); exp .setCloudletPesPrng(cloudletPesPrng) .setNumCloudletsToCreate((int) getCloudletsNumberPrng().sample()) .setAfterExperimentFinish(this::afterExperimentFinish) .setVerbose(false); return exp; }
/** * Creates the number of Cloudlets defined in {@code createCloudlets #cloudlets} and submits * them to the given broker. * * @return the List of created Cloudlets */ public Cloudlet createCloudlet(final int id) { final int i = (int) (randCloudlet.sample() * CLOUDLET_LENGTHS.length); final long length = CLOUDLET_LENGTHS[i]; final UtilizationModel um = new UtilizationModelDynamic(UtilizationModel.Unit.ABSOLUTE, 50); final Cloudlet c = new CloudletSimple(id, length, CLOUDLET_PES) .setFileSize(CLOUDLET_FILESIZE) .setOutputSize(CLOUDLET_OUTPUTSIZE) .setUtilizationModelCpu(new UtilizationModelFull()) .setUtilizationModelRam(um) .setUtilizationModelBw(um); return c; }