مثال1کلادسیم

از OCCC Wiki
پرش به: ناوبری، جستجو

کلادسیم یک ابزار شبیه ساز برای اجرای برخی سناریوهای مرتبط با رایانش ابری می باشد. موارد کاربرد رایج آن در شبیه سازی الگوریتم های زمان بندی ماشین های مجازی، سیاست های تخصیص منابع، مدیریت مصرف انرژی و مواردی از این قبیل می باشد.

شرح مثال 1 کلادسیم

در مثال 1 کلادسیم، سناریویی با یک مرکز داده و یک سرور طراحی شده است که در آن یک کاربر، تقاضای ایجاد یک ماشین مجازی را می دهد و یک کلادلت بر روی ماشین مجازی خود اجرا میکند. این سناریو در ادامه به همراه توضیحات مربوط به هر بخش ارائه شده است.

شرح تصویری مثال یک کلادسیم

در این قطعه کد بعضی از بخش های اضافی حذف شده است تا خوانایی کد بیشتر شود.

//  A simple example showing how to create a datacenter with one host and run one  cloudlet on it. 

public class CloudSimExample1 {

	private static List<Cloudlet> cloudletList;
	private static List<Vm> vmlist;

	public static void main(String[] args) {

		// مقدار دهی اولیه کلادسیم
		// First step: Initialize the CloudSim package. It should be called before creating any entities.

		int num_user = 1;						 // number of cloud users
		Calendar calendar = Calendar.getInstance();
		boolean trace_flag = false; 					// mean trace events

		CloudSim.init(num_user, calendar, trace_flag);			// Initialize the CloudSim library

		// ایجاد مرکز داده
		// Second step: Create Datacenters
		// Datacenters are the resource providers in CloudSim. We need at list one of them to run a CloudSim simulation
		Datacenter datacenter0 = createDatacenter("Datacenter_0");

		// ایجاد بروکر که در اینجا معادل کاربر است
		// Third step: Create Broker
		DatacenterBroker broker = createBroker();	
		int brokerId = broker.getId();

		// ایجاد ماشین مجازی و قرار دادن آن در لیست ماشین ها
		// Fourth step: Create one virtual machine
		vmlist = new ArrayList<Vm>();		

		// VM description
		int vmid = 0;
		int mips = 1000;
		long size = 10000; 						// image size (MB)
		int ram = 512; 						// vm memory (MB)
		long bw = 1000;
		int pesNumber = 1; 					// number of cpus
		String vmm = "Xen"; 					// VMM name
		
		Vm vm = new Vm(vmid, brokerId, mips, pesNumber, ram, bw, size, vmm, new CloudletSchedulerTimeShared()); // create VM

		vmlist.add(vm);						  // add the VM to the vmList
	
		broker.submitVmList(vmlist);					// submit vm list to the broker

		// ایجاد کلادلت و قرار دادن آن در لیست درخواست ها
		cloudletList = new ArrayList<Cloudlet>();			// Fifth step: Create one Cloudlet

		// Cloudlet properties
		int id = 0;
		long length = 400000;
		long fileSize = 300;
		long outputSize = 300;
		UtilizationModel utilizationModel = new UtilizationModelFull();

		Cloudlet cloudlet = new Cloudlet(id, length, pesNumber, fileSize, outputSize, utilizationModel, utilizationModel, utilizationModel);
		cloudlet.setUserId(brokerId);
		cloudlet.setVmId(vmid);

		cloudletList.add(cloudlet);					// add the cloudlet to the list

		broker.submitCloudletList(cloudletList);			// submit cloudlet list to the broker
		
		// شروع شبیه سازی
		CloudSim.startSimulation();					// Sixth step: Starts the simulation
		CloudSim.stopSimulation();

		// دریافت نتایج و چاپ آنها
		List<Cloudlet> newList = broker.getCloudletReceivedList();		//Final step: Print results when simulation is over
		printCloudletList(newList);

		datacenter0.printDebts();					// Print the debt of each user to each datacenter
	}
 

	// تابع ایجاد مرکز داده
	// Creates the datacenter.
	private static Datacenter createDatacenter(String name) {
		List<Host> hostList = new ArrayList<Host>();			// 1. We need to create a list to store our machine

		// 2. A Machine contains one or more PEs or CPUs/Cores. In this example, it will have only one core.
		List<Pe> peList = new ArrayList<Pe>();

		int mips = 1000;

		// 3. Create PEs and add these into a list.
		peList.add(new Pe(0, new PeProvisionerSimple(mips))); 	// need to store Pe id and MIPS Rating

		// 4. Create Host with its id and list of PEs and add them to the list of machines
		int hostId = 0;
		int ram = 2048; 					// host memory (MB)
		long storage = 1000000; 				// host storage
		int bw = 10000;

		hostList.add( 
new Host(hostId,new RamProvisionerSimple(ram),new BwProvisionerSimple(bw),storage,peList
,new VmSchedulerTimeShared(peList))
			); 					// This is our machine

		// 5. Create a DatacenterCharacteristics object that stores the properties of a data center: architecture, OS, list of
		// Machines, allocation policy: time- or space-shared, time zone and its price (G$/Pe time unit).
		String arch = "x86"; 					// system architecture
		String os = "Linux"; 					// operating system
		String vmm = "Xen";
		double time_zone = 10.0; 				// time zone this resource located
		double cost = 3.0; 					// the cost of using processing in this resource
		double costPerMem = 0.05; 				// the cost of using memory in this resource
		double costPerStorage = 0.001; 				// the cost of using storage in this resource
		double costPerBw = 0.0; 				// the cost of using bw in this resource
		LinkedList<Storage> storageList = new LinkedList<Storage>(); 	// we are not adding SAN devices by now

		DatacenterCharacteristics characteristics = new DatacenterCharacteristics(
				arch, os, vmm, hostList, time_zone, cost, costPerMem,	costPerStorage, costPerBw);

		Datacenter datacenter = null;				// 6. Finally, we need to create a PowerDatacenter object.
		datacenter = new Datacenter(name, characteristics, new VmAllocationPolicySimple(hostList), storageList, 0);
		
		return datacenter;
	}
	// Creates the broker.
	private static DatacenterBroker createBroker() {
		DatacenterBroker broker = null;
		broker = new DatacenterBroker("Broker");
		return broker;
	}


	// تابع چاپ نتایج
	// Prints the Cloudlet objects.
	private static void printCloudletList(List<Cloudlet> list) {
		int size = list.size();
		Cloudlet cloudlet;
		String indent = "    ";
		Log.printLine();
		Log.printLine("========== OUTPUT ==========");
		Log.printLine("Cloudlet ID" + indent + "STATUS" + indent
				+ "Data center ID" + indent + "VM ID" + indent + "Time" + indent+ "Start Time" + indent + "Finish Time");
		DecimalFormat dft = new DecimalFormat("###.##");
		for (int i = 0; i < size; i++) {
			cloudlet = list.get(i);
			Log.print(indent + cloudlet.getCloudletId() + indent + indent);
			if (cloudlet.getCloudletStatus() == Cloudlet.SUCCESS) {
				Log.print("SUCCESS");
				Log.printLine(indent + indent + cloudlet.getResourceId()
						+ indent + indent + indent + cloudlet.getVmId()
						+ indent + indent
						+ dft.format(cloudlet.getActualCPUTime()) + indent
						+ indent + dft.format(cloudlet.getExecStartTime())
						+ indent + indent
						+ dft.format(cloudlet.getFinishTime()));
			}
		}
	}
}