云计算仿真软件Cloudsim的使用(2)

样例描述

cloudsim-2.1.1\examples目录下提供了一些CloudSim样例程序,每个样例模拟的环境如下:

(1)CloudSimExample1.java:创建一个一台主机、一个任务的数据中心

(2)CloudSimExample2.java:创建一个一台主机、两个任务的数据中心。两个任务具有一样的处理能力和执行时间

(3)CloudSimExample3.java:创建一个两台主机、两个任务的数据中心。两个任务对处理能力的需求不同,同时根据申请虚拟机的性能不同,所需执行时间也不相同

(4)CloudSimExample4.java:创建两个数据中心,每个数据中心一台主机,并在其上运行两个云任务

(5)CloudSimExample5.java:创建两个数据中心,每个数据中心一台主机,并在其上运行两个用户的云任务

(6)CloudSimExample6.java:创建可扩展的仿真环境

(7)CloudSimExample7.java:演示如何停止仿真

(8)CloudSimExample8.java:演示如何在运行时添加实体

(9)network:包含网络仿真的例子

(10)power:包含演示CloudSim power-aware特点的例子

为了模拟不同负载情况下的虚拟机调度算法,并记录相关指标,你可以使用CloudSim框架来实现。以下是一个示例代码,展示了如何模拟低、中、高三种负载情况下的虚拟机调度,并记录相关指标: ```java import org.cloudbus.cloudsim.*; import org.cloudbus.cloudsim.core.CloudSim; import java.util.ArrayList; import java.util.List; public class CloudSimExample { public static void main(String[] args) { int numHosts = 10; int numVMsLowLoad = 3; int numVMsMediumLoad = 6; int numVMsHighLoad = 9; List<Host> hostList = new ArrayList<>(); List<Vm> vmList = new ArrayList<>(); // 创建主机 for (int i = 0; i < numHosts; i++) { List<Pe> peList = new ArrayList<>(); for (int j = 0; j < 4; j++) { peList.add(new Pe(j, new PeProvisionerSimple(1000))); // 4个CPU,每个CPU 1000 MIPS } int ram = 8192; // 8GB内存 long storage = 100000; // 100GB存储空间 int bw = 10000; // 带宽 hostList.add(new Host(i, new RamProvisionerSimple(ram), new BwProvisionerSimple(bw), storage, peList, new CloudletSchedulerTimeShared())); } // 创建低负载下的虚拟机 for (int i = 0; i < numVMsLowLoad; i++) { int mips = 1000; // 1个CPU,每个CPU 1000 MIPS int ram = 2048; // 2GB内存 long storage = 20000; // 20GB存储空间 int bw = 1000; // 带宽 Vm vm = new Vm(i, 0, mips, 1, ram, bw, storage, "Xen", new CloudletSchedulerTimeShared()); vmList.add(vm); } // 创建中等负载下的虚拟机 for (int i = numVMsLowLoad; i < numVMsLowLoad + numVMsMediumLoad; i++) { int mips = 1000; // 1个CPU,每个CPU 1000 MIPS int ram = 2048; // 2GB内存 long storage = 20000; // 20GB存储空间 int bw = 1000; // 带宽 Vm vm = new Vm(i, 0, mips, 1, ram, bw, storage, "Xen", new CloudletSchedulerTimeShared()); vmList.add(vm); } // 创建高负载下的虚拟机 for (int i = numVMsLowLoad + numVMsMediumLoad; i < numVMsLowLoad + numVMsMediumLoad + numVMsHighLoad; i++) { int mips = 1000; // 1个CPU,每个CPU 1000 MIPS int ram = 2048; // 2GB内存 long storage = 20000; // 20GB存储空间 int bw = 1000; // 带宽 Vm vm = new Vm(i, 0, mips, 1, ram, bw, storage, "Xen", new CloudletSchedulerTimeShared()); vmList.add(vm); } // 创建CloudSim仿真对象 CloudSim simulation = new CloudSim(); // 创建数据中心对象 Datacenter datacenter = createDatacenter(simulation, hostList); // 创建虚拟机管理器对象 VmAllocationPolicy vmAllocationPolicy = new VmAllocationPolicyQoS(hostList); DatacenterBroker broker = createBroker(simulation, vmList, vmAllocationPolicy); // 启动仿真 simulation.startSimulation(); // 获取实验结果 List<Vm> vmsInDatacenter = broker.getVmList(); for (int i = 0; i < vmsInDatacenter.size(); i++) { Vm vm = vmsInDatacenter.get(i); System.out.println("VM #" + vm.getId() + ":"); System.out.println(" Startup Time: " + vm.getVmStartTime()); System.out.println(" Migration Time: " + vm.getMigrationTime()); System.out.println(" Network Bandwidth: " + vm.getCloudletScheduler().getNetServiceLevel()); System.out.println(" Resource Utilization: " + vm.getTotalUtilizationOfCpu(simulation.clock())); System.out.println(" Response Time: " + vm.getResponseTime()); } // 停止仿真 simulation.stopSimulation(); } private static Datacenter createDatacenter(CloudSim simulation, List<Host> hostList) { // 创建数据中心特性对象 String arch = "x86"; String os = "Linux"; String vmm = "Xen"; double timeZone = 10.0; double costPerSec = 3.0; double costPerMem = 0.05; double costPerStorage = 0.1; double costPerBw = 0.1; DatacenterCharacteristics characteristics = new DatacenterCharacteristics(arch, os, vmm, hostList, timeZone, costPerSec, costPerMem, costPerStorage, costPerBw); // 创建数据中心对象 Datacenter datacenter = null; try { datacenter = new Datacenter("Datacenter", characteristics, new VmAllocationPolicySimple(hostList), new ArrayList<Storage>(), 0); } catch (Exception e) { e.printStackTrace(); } // 将数据中心添加仿真对象 simulation.add(datacenter); return datacenter; } private static DatacenterBroker createBroker(CloudSim simulation, List<Vm> vmList, VmAllocationPolicy vmAllocationPolicy) { // 创建虚拟机管理器对象 DatacenterBroker broker = null; try { broker = new DatacenterBroker("Broker", vmAllocationPolicy); } catch (Exception e) { e.printStackTrace(); } // 将虚拟机列表添加到虚拟机管理器 broker.submitVmList(vmList); // 将虚拟机管理器添加仿真对象 simulation.add(broker); return broker; } } ``` 上述代码中,我们首先通过`createDatacenter`方法创建了一个数据中心对象,并使用`createBroker`方法创建了一个虚拟机管理器对象。然后,我们将主机列表和虚拟机列表分别传递给数据中心和虚拟机管理器。在仿真过程中,CloudSim会自动分配和调度虚拟机到主机上,并记录相关指标。最后,我们通过遍历虚拟机列表,打印了每个虚拟机的指标信息。 请注意,在代码中我使用了`VmAllocationPolicyQoS`作为虚拟机分配策略,你可以根据你的需求自定义或使用其他虚拟机分配策略。 此外,请确保你已经正确导入所需的CloudSim类和包。你可以根据CloudSim的文档或示例代码进行进一步的学习和修改,以满足你的实验需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值