使用Cloudsim實(shí)現(xiàn)基于多維QoS的資源調(diào)度算法
Cloudsim是一款開(kāi)源的云計(jì)算仿真軟件,它繼承了網(wǎng)格計(jì)算仿真軟件Gridsim的編程模型,支持云計(jì)算的研究和開(kāi)發(fā)。它是一個(gè)自足的支持?jǐn)?shù)據(jù)中心、服務(wù)代理人、調(diào)度和分配策略的平臺(tái),支持大型云計(jì)算的基礎(chǔ)設(shè)施的建模與仿真,并且可以在Windows和Linux上跨平臺(tái)運(yùn)行。
本文介紹的是利用Cloudsim云仿真平臺(tái)對(duì)資源調(diào)度算法進(jìn)行仿真。其中包括Cloudsim環(huán)境的配置,資源調(diào)度算法的嵌入和仿真結(jié)果的分析。
一、配置Cloudsim環(huán)境
1、首先介紹Cloudsim環(huán)境的配置
1.1、Cloudsim的運(yùn)行需要Java環(huán)境,所以需要下載JDK和Cloudsim
JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
Cloudsim:http://code.google.com/p/cloudsim/downloads/
1.2、JDK的安裝和配置
http://jingyan.baidu.com/article/f96699bb8b38e0894e3c1bef.html
注意安裝路徑不要出現(xiàn)漢字,否則運(yùn)行程序時(shí)可能會(huì)出現(xiàn)未知錯(cuò)誤。
1.3、Cloudsim的安裝和配置
將下載的Cloudsim解壓縮,解壓路徑中也不要出現(xiàn)漢字。比如:D:\program files\。在環(huán)境變量ClassPath中加入D:\program files\cloudsim-3.0.3\jars\cloudsim-3.0.3.jar;
D:\program files\cloudsim-3.0.3\jars\cloudsim-examples-3.0.3.jar;
D:\program files\cloudsim-3.0.3\jars\cloudsim-3.0.3-sources.jar;
D:\program files\cloudsim-3.0.3\jars\cloudsim-examples-3.0.3-sources.jar;
至此已經(jīng)完成Cloudsim的配置
1.4、安裝eclipse,并將Cloudsim平臺(tái)導(dǎo)入eclipse
解壓縮得到的是一個(gè)Java工程,即Cloudsim仿真平臺(tái)。因?yàn)閏loudsim是開(kāi)源的,所以給我們提供了它的所有源碼。我們可以根據(jù)自己的需要,修改Cloudsim,重新編譯,獲得符合自己需求自己的仿真平臺(tái)。而使用eclipse工具能更便利的開(kāi)發(fā)。eclipse的安裝過(guò)程不再贅述。本文只簡(jiǎn)單說(shuō)明導(dǎo)入Cloudsim過(guò)程。
打開(kāi)eclipse,新建Java Project。取消Use default location選項(xiàng)。將cloudsim的路徑加入。單擊Finish即可。如下圖:
此時(shí)cloudsim的正個(gè)項(xiàng)目代碼都已經(jīng)導(dǎo)入到新建工程中,Cloudsim自帶了一些示例程序,選擇任意一個(gè)運(yùn)行,將會(huì)在Console窗口打印程序運(yùn)行狀態(tài)。若果配置沒(méi)有出錯(cuò),會(huì)出現(xiàn)類(lèi)似下圖情況。
此時(shí)Cloudsim的環(huán)境搭建已經(jīng)完成。下一步就是在Cloudsim平臺(tái)上實(shí)現(xiàn)自己的資源調(diào)度算法了。
#p#
二、實(shí)現(xiàn)基于多維QoS的資源調(diào)度算法
1.Cloudsim體系結(jié)構(gòu)及核心類(lèi)
CloudSim是一款云計(jì)算仿真軟件,其由澳大利亞墨爾本大學(xué)網(wǎng)格實(shí)驗(yàn)室和Gridbus項(xiàng)目于2009年推出,它是一個(gè)函數(shù)庫(kù),可在Windows和Linux系統(tǒng)上跨平臺(tái)運(yùn)行,CloudSim的體系結(jié)構(gòu)主要分為四個(gè)層次,如圖1所示:
圖1 Cloudsim 體系結(jié)構(gòu)
Cloudsim仿真層為云計(jì)算的虛擬數(shù)據(jù)中心環(huán)境的配置和仿真提供支持,包括虛擬機(jī)、內(nèi)存、容量及帶寬的接口,該層用于主機(jī)分配到虛擬機(jī)的策略研究,并通過(guò)擴(kuò)展核心的虛擬機(jī)調(diào)度函數(shù)實(shí)現(xiàn)。
Cloudsim最上層是用戶(hù)代碼層,該層提供一些基本的實(shí)體,如主機(jī)、應(yīng)用、虛擬機(jī),用戶(hù)數(shù)和應(yīng)用類(lèi)型,以及代理調(diào)度策略等。通過(guò)擴(kuò)展這些實(shí)體,云應(yīng)用開(kāi)發(fā)人員可以在該層開(kāi)發(fā)各種用戶(hù)需求分布、應(yīng)用配置、云可用性場(chǎng)景等應(yīng)用調(diào)度技術(shù),并執(zhí)行Cloudsim支持的云配置的Robust測(cè)試。
通過(guò)擴(kuò)展Cloudsim提供的基本功能,研究者能基于特定環(huán)境和配置進(jìn)行測(cè)試,完成云計(jì)算關(guān)鍵技術(shù)的開(kāi)發(fā)研究。
CloudSim繼承了GridSim并支持云計(jì)算的研究和開(kāi)發(fā),CloudSim的組件工具均為開(kāi)源的。其中CloudSim具有兩個(gè)獨(dú)特功能:
***,提供虛擬化的引擎,使用戶(hù)可在數(shù)據(jù)中心的節(jié)點(diǎn)上建立和管理獨(dú)立的、協(xié)同的虛擬化服務(wù);
第二,在對(duì)虛擬化服務(wù)分配處理核心時(shí),可在時(shí)間共享和空間共享之間靈活切換。
在CloudSim函數(shù)庫(kù)中有幾個(gè)主要核心類(lèi),如表1所示:
表1 Cloudsim主要核心類(lèi)
2.Cloudsim工作模型
在云數(shù)據(jù)中心,將特定應(yīng)用的虛擬機(jī)分配給主機(jī)由虛擬機(jī)分配控制器(VmAllocationPolicy)完成,Cloudsim在主機(jī)層和虛擬機(jī)層都實(shí)現(xiàn)了基于時(shí)間共享和空間共享的調(diào)度策略。
通常情況下,來(lái)自不同用戶(hù)的任務(wù)相對(duì)獨(dú)立,假設(shè)有m個(gè)用戶(hù)User={User1, User2,…, Userm},n個(gè)任務(wù)Task={t1,t2,…,tn},n個(gè)虛擬化資源VM={VM1,VM2,…VMn},以及p個(gè)數(shù)據(jù)中心 Datacenter={Datacenter1, Datacenter2,…Datacenterp},Cloudsim的工作模型如圖2所示:
圖2 Cloudsim的工作模型
其中,CIS(Cloud Information Service)將用戶(hù)請(qǐng)求映射到合適的云服務(wù)提供商,DatacenterBroker模擬SaaS提供商代理,根據(jù)QoS的需求協(xié)商資源和服務(wù)的分配策略。VmScheduler是實(shí)現(xiàn)主機(jī)組件的抽象類(lèi),模擬虛擬機(jī)的分配調(diào)度策略,擴(kuò)展此抽象類(lèi)能調(diào)整處理器的共享策略。 VmAllocationPolicy代表虛擬機(jī)監(jiān)視器調(diào)度策略,該策略用于將虛擬機(jī)分配給主機(jī)。
3.實(shí)現(xiàn)基于多維QoS的資源調(diào)度算法
開(kāi)始仿真模擬時(shí),首先需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)中心,然后再數(shù)據(jù)中心中創(chuàng)建CPU、內(nèi)存等資源,此時(shí)只需要向代理中心注冊(cè)資源信息,用戶(hù)就可以使用數(shù)據(jù)中心的資源進(jìn)行仿真模擬。
在仿真資源分配試驗(yàn)中,其步驟及其各個(gè)步驟中的代碼如下:
(1) 初始化Cloudsim包,代碼如下:
- Int num_user= 1 ; //定義用戶(hù)數(shù)量
- Calendar calendar=Calendar.getInstance();
- boolean trace_flag=false;
- CloudSim.init(num_user, calendar, trace_flag); //初始化CloudSim包
(2)創(chuàng)建數(shù)據(jù)中心(Datacenter),代碼如下所示:
- DataCenter datacenter()=createDatacenter("Datacenter_0");
(3) 創(chuàng)建數(shù)據(jù)中心代理(Broker),代碼如下所示:
- DatacenterBroker broker=createBroker();
- Int brokerId=broker.get_id();
(4) 創(chuàng)建虛擬機(jī),代碼如下所示:
- vmlist=new VirtualMachineList(); //創(chuàng)建虛擬機(jī)列表
- Vmvm=new Vm(vmid, brokerld, mips, PesNumber, ram, bw, size,
- vmm,new CloudletSchedulerTimeShared()); //創(chuàng)建虛擬機(jī)
- vmlist.add(vm); //加入虛擬機(jī)列表
- broker.submitVMList(vmlist);//提交虛擬機(jī)列表
(5) 創(chuàng)建云任務(wù),代碼如下所示:
- cloudletList = new CloudletList();//創(chuàng)建云任務(wù)列表
- Cloudlet cloudlet=new Cloudlet(id, length, file_size, output_size);
- cloudlet.setUserlD(brokerld);
- ……
- cloudletList.add(cloudlet); //將任務(wù)加入任務(wù)列表
- ……
- broker.submitCloudletList(cloudletList);//向代理提交任務(wù)列表
(6) 執(zhí)行資源調(diào)度算法,完成任務(wù)到虛擬機(jī)的映射,代碼如下所示:
- broker. bindCloudletsToVms();
(7) 啟動(dòng)仿真程序,代碼如下所示:
- CloudSim.startSimulation();
(8) 打印仿真結(jié)果,代碼如下所示:
- List<Cloudlet> newList = broker.getCloudletReceivedList();
- CloudSim.stopSimulation();
- printCloudletList(newList);
注:任務(wù)到虛擬機(jī)的映射是由DatacenterBroker類(lèi)中的bindCloudletsToVms()函數(shù)實(shí)現(xiàn)。該函數(shù)根據(jù)不同的策略來(lái)實(shí)現(xiàn)任務(wù)的映射。在《云計(jì)算》劉鵬著的示例中,提供了兩種映射算法,一種是作業(yè)順序分配的算法、另一種是以總完成時(shí)間最短為導(dǎo)向的貪心算法。本人的目標(biāo)是基于多維QoS的資源調(diào)度算法,所以重載了云任務(wù)Cloudlet類(lèi),在類(lèi)中增加了與QoS相關(guān)的屬性,比如資源需求、QoS 需求、作業(yè)優(yōu)先級(jí)等。然后在資源分配函數(shù)中根據(jù)這些屬性的值,選定分配策略,來(lái)完成任務(wù)到虛擬機(jī)的映射。另外個(gè)人認(rèn)為,在資源調(diào)度層面,并不需要指定每維 QoS的具體來(lái)源、具體意義,映射算法中只需要將其作為一個(gè)參數(shù)做相應(yīng)的運(yùn)算即可。
博文出處:http://blog.csdn.net/hanchaoqi/article/details/36043879