使用Cloudsim實現基於多維QoS的資源調度算法之二:實現基於多維QoS的資源調度算法

1.Cloudsim體系結構及核心類
CloudSim是一款雲計算仿真軟件,其由澳大利亞墨爾本大學網格實驗室和Gridbus項目於2009年推出,它是一個函數庫,可在Windows和Linux系統上跨平臺運行,CloudSim的體系結構主要分爲四個層次,如圖1所示:

圖1 Cloudsim 體系結構
Cloudsim仿真層爲雲計算的虛擬數據中心環境的配置和仿真提供支持,包括虛擬機、內存、容量及帶寬的接口,該層用於主機分配到虛擬機的策略研究,並通過擴展核心的虛擬機調度函數實現。
Cloudsim最上層是用戶代碼層,該層提供一些基本的實體,如主機、應用、虛擬機,用戶數和應用類型,以及代理調度策略等。通過擴展這些實體,雲應用開發人員可以在該層開發各種用戶需求分佈、應用配置、雲可用性場景等應用調度技術,並執行Cloudsim支持的雲配置的Robust測試。
通過擴展Cloudsim提供的基本功能,研究者能基於特定環境和配置進行測試,完成雲計算關鍵技術的開發研究。
CloudSim繼承了GridSim並支持雲計算的研究和開發,CloudSim的組件工具均爲開源的。其中CloudSim具有兩個獨特功能:
第一,提供虛擬化的引擎,使用戶可在數據中心的節點上建立和管理獨立的、協同的虛擬化服務;
第二,在對虛擬化服務分配處理核心時,可在時間共享和空間共享之間靈活切換。
在CloudSim函數庫中有幾個主要核心類,如表1所示:
表1 Cloudsim主要核心類
2.Cloudsim工作模型
在雲數據中心,將特定應用的虛擬機分配給主機由虛擬機分配控制器(VmAllocationPolicy)完成,Cloudsim在主機層和虛擬機層都實現了基於時間共享和空間共享的調度策略。
通常情況下,來自不同用戶的任務相對獨立,假設有m個用戶User={User1, User2,…, Userm},n個任務Task={t1,t2,…,tn},n個虛擬化資源VM={VM1,VM2,…VMn},以及p個數據中心Datacenter={Datacenter1, Datacenter2,…Datacenterp},Cloudsim的工作模型如圖2所示:


圖2 Cloudsim的工作模型
其中,CIS(Cloud Information Service)將用戶請求映射到合適的雲服務提供商,DatacenterBroker模擬SaaS提供商代理,根據QoS的需求協商資源和服務的分配策略。VmScheduler是實現主機組件的抽象類,模擬虛擬機的分配調度策略,擴展此抽象類能調整處理器的共享策略。VmAllocationPolicy代表虛擬機監視器調度策略,該策略用於將虛擬機分配給主機。

3.實現基於多維QoS的資源調度算法

開始仿真模擬時,首先需要創建一個數據中心,然後再數據中心中創建CPU、內存等資源,此時只需要向代理中心註冊資源信息,用戶就可以使用數據中心的資源進行仿真模擬。
在仿真資源分配試驗中,其步驟及其各個步驟中的代碼如下:
(1) 初始化Cloudsim包,代碼如下:
Int num_user= 1 ; //定義用戶數量
Calendar calendar=Calendar.getInstance();
boolean trace_flag=false;
CloudSim.init(num_user, calendar, trace_flag); //初始化CloudSim包
(2)創建數據中心(Datacenter),代碼如下所示:
DataCenter datacenter()=createDatacenter("Datacenter_0");
(3) 創建數據中心代理(Broker),代碼如下所示:
DatacenterBroker broker=createBroker();
Int brokerId=broker.get_id();
(4) 創建虛擬機,代碼如下所示:
vmlist=new VirtualMachineList(); //創建虛擬機列表
Vmvm=new Vm(vmid, brokerld, mips, PesNumber, ram, bw, size,
vmm,new CloudletSchedulerTimeShared()); //創建虛擬機
vmlist.add(vm); //加入虛擬機列表
broker.submitVMList(vmlist);//提交虛擬機列表
(5) 創建雲任務,代碼如下所示:
cloudletList = new CloudletList();//創建雲任務列表
Cloudlet cloudlet=new Cloudlet(id, length, file_size, output_size);
cloudlet.setUserlD(brokerld);
……
cloudletList.add(cloudlet); //將任務加入任務列表
……
broker.submitCloudletList(cloudletList);//向代理提交任務列表
(6) 執行資源調度算法,完成任務到虛擬機的映射,代碼如下所示:
broker. bindCloudletsToVms();
(7) 啓動仿真程序,代碼如下所示:
CloudSim.startSimulation();
(8) 打印仿真結果,代碼如下所示:
List<Cloudlet> newList = broker.getCloudletReceivedList();
CloudSim.stopSimulation();
printCloudletList(newList);
注:任務到虛擬機的映射是由DatacenterBroker類中的bindCloudletsToVms()函數實現。該函數根據不同的策略來實現任務的映射。在《雲計算》劉鵬著的示例中,提供了兩種映射算法,一種是作業順序分配的算法、另一種是以總完成時間最短爲導向的貪心算法。本人的目標是基於多維QoS的資源調度算法,所以重載了雲任務Cloudlet類,在類中增加了與QoS相關的屬性,比如資源需求、QoS需求、作業優先級等。然後在資源分配函數中根據這些屬性的值,選定分配策略,來完成任務到虛擬機的映射。另外個人認爲,在資源調度層面,並不需要指定每維QoS的具體來源、具體意義,映射算法中只需要將其作爲一個參數做相應的運算即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章