本文主要介紹一下我在使用CloudSim時翻譯、整理和理解的一些信息,以及我的使用經驗,希望能對有需要的朋友們有所幫助~
1、我翻譯和理解的一些信息:
2009年4月8日,澳大利亞墨爾本大學的網格實驗室和Gridbus項目宣布推出雲計算仿真軟件,稱為CloudSim。它是在離散事件模擬包SimJava上開發的函數庫,可在Windows和Linux系統上跨平台運行,CloudSim繼承了GridSim的編程模型,支持雲計算的研究和開發,並提供了以下新的特點: (1)支持大型雲計算的基礎設施的建模與仿真;(2)一個自足的支持數據中心、服務代理人、調度和分配策略的平台。其中CloudSim 獨特功能有:一是提供虛擬化引擎,旨在數據中心節點上幫助建立和管理多重的、獨立的、協同的的虛擬化服務;二是在對虛擬化服務分配處理核心時能夠在時間共享和空間共享之間靈活切換。CloudSim平台有助於加快雲計算的算法、方法和規范的發展。CloudSim的組件工具均為開源的。CloudSim的軟件結構框架和體系結構組件包括SimJava、GridSim、CloudSim、UserCode四個層次。
CloudSim是在GridSim模型基礎上發展而來,提供了雲計算的特性,支持雲計算的資源管理和調度模擬。雲計算與網格計算的一個顯著區別是雲計算采用了成熟的虛擬化技術,將數據中心的資源虛擬化為資源池,打包對外向用戶提供服務,CloudSim體現了此特點,擴展部分實現了一系列接口,提供基於數據中心的虛擬化技術、虛擬化雲的建模和仿真功能。通常,數據中心的一台主機的資源可以根據用戶的需求映射到多台虛擬機上,因此,虛擬機之間存在對主機資源的競爭關系。CloudSim提供了資源的監測、主機到虛擬機的映射功能。CloudSim的CIS(Cloud Information Service)和DataCenterBroker實現資源發現和信息交互,是模擬調度的核心。用戶自行開發的調度算法可在DataCenterBroker的方法中實現,從而實現調度算法的模擬。
依據CloudSim源代碼介紹幾個核心類:
(1)Cloudlet類:構建雲環境下的任務。
(2)DataCenter類:數據中心,提供虛擬化的網格資源,處理虛擬機信息的查詢,包含虛擬機對資源的分配策略,雲計算采用VMProvisioner處理虛擬機。
(3)DataCenterBroker類:隱藏了虛擬機的管理,如創建、任務提交、虛擬機的銷毀等。
(4)Host類:擴展了機器對虛擬機除處理單元(PE)之外的參數分配策略,如帶寬、存儲空間、內存等,一台Host可對應多台虛擬機。
(5)VirtualMachine類:虛擬機類,運行在Host上,與其它虛擬機共享資源,每台虛擬機由一個擁有者所有,可提交任務,並由VMScheduler類定制該虛擬機的調度策略。
(6)VMScheduler類:虛擬機的調度策略,用來管理執行任務,實現了任務接口。
(7)VMCharacteristics類:提供虛擬機描述。
(8)VMMAllocationPolicy類:虛擬機監視器策略類,描述同一Host上的多台虛擬機共享資源的策略。
(9)VMProvisioner類:實現數據中心的主機到虛擬機的映射。
2、CloudSim環境配置
(1)JDK安裝和配置
從http://java.sun.com/ 下載JDK最新版本jdk1.6.0_13,CloudSim需要運行在JDK1.6版本以上。安裝下載的JDK,設置環境變量。在Path中加入路徑:C:/Program Files/Java/jdk1.6.0_13/bin; ClassPath中加入路徑:C:/Program Files/Java/jdk1.6.0_13/lib/dt.jar; C:/Program Files/Java/jdk1.6.0_13/lib/tools.jar; 。
(2)CloudSim配置
從http://www.gridbus.org/cloudsim/ 下載CloudSim 1.0 beta版,下載的是一個Zip包,解壓壓縮包即可。設置環境變量,在ClassPath中加入路徑:C:/CLOUDSIM/jars/cloudsim.jar; C:/CLOUDSIM/jars/gridsim.jar; C:/CLOUDSIM/jars/simjava2.jar; 。
3、CloudSim的擴展
CloudSim是開源的,可以在windows Xp和linux上運行,用戶可以根據自己的研究內容自行擴展CloudSim,加入自己的代碼后,需要重新編譯並發布平台。下面給出編譯和生成平台的方法:
從http://ant.apache.org/ 下載Ant工具,解壓到目錄D:/apache-ant-1.7.1,設置環境變量,在PATH中加入:D:/apache-ant-1.7.1/bin;。將命令行切換到擴展的CloudSim路徑(build.xml所在目錄),在命令行下鍵入命令D:/CloudSim>ant,批量編譯CloudSim源文件,生成的文件按照build.xml的設置存儲到指定位置,編譯成功后在命令行下鍵入D:/CloudSim>ant makejar命令打包生成new_cloudsim.jar。擴展的CloudSim平台生成成功。重設環境變量,在ClassPath中增加路徑:D:/CloudSim/jars/new_cloudsim.jar;D:/CloudSim/jars/cloudsim.jar;D:/CloudSim/jars/g-ridsim.jar; D:/CloudSim/jars/simjava2.jar;,下一步在新的平台下編寫自己的仿真驗證程序。
4、使用CloudSim仿真的一般步驟
(1) 初始化GridSim 庫
GridSim.init(num_user, calendar, trace_flag, exclude_from_file,exclude_from_processing, report_name);
(2) 創建數據中心,在CloudSim仿真平台中,一個數據中心由一個或多個Machine組成,一個Machine是由一個或多個PEs或CPUs組成。
DataCenter datacenter0 = createDatacenter("Datacenter_0");
(3) 創建代理Broker
DatacenterBroker broker = createBroker();
int brokerId = broker.get_id();
(4) 創建虛擬機
vmlist = new VirtualMachineList();
//創建時為虛擬機指定Broker
VirtualMachine vm1 = new VirtualMachine(
new VMCharacteristics(vmid,brokerId,size,memory,bw,vcpus,priority,vmm,
new TimeSharedVMScheduler()));
//將虛擬機加入虛擬機列表
vmlist.add(vm1);
//向相應代理Broker提交虛擬機列表
broker.submitVMList(vmlist);
(5) 創建雲任務
cloudletList = new CloudletList();
//創建時指定任務的用戶ID,BrokerID
Cloudlet cloudlet1 = new Cloudlet(id, length, file_size, output_size);
cloudlet1.setUserID(brokerId);
……
//將任務加入任務列表
cloudletList.add(cloudlet1);
……
//向代理Broker提交任務列表
broker.submitCloudletList(cloudletList);
(6) 啟動仿真
GridSim.startGridSimulation();
(7) 在仿真結束后統計結果
CloudletList newList = broker.getCloudletList();
GridSim.stopGridSimulation();
printCloudletList(newList);
datacenter0.printDebts();
若是根據自己研究對平台進行了擴展,平台重生成后,就可以在仿真程序中調用自己編寫的類、方法、成員變量等。
轉載請注明,謝謝合作!
Rolin
2009-7-21