cloudsim仿真_虚拟机cpu怎么分配

cloudsim仿真_虚拟机cpu怎么分配CloudSim源码分析之虚拟机分配分类: 云计算 CloudSim2011-05-1514:32 1629人阅读 评论(10) 收藏 举报虚拟机integerlistnulltableobject 原文出处:虚拟机分配指的是,选择满足特定条件(内存、软件环境配置等)的主机创建虚拟机的过程,这个过程由Datacenter对象负责。VmAllocationPolicy这

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

分类: 
云计算 
CloudSim2011-05-15 14:32 
1629人阅读 
评论(10) 
收藏 
举报

 原文出处:http://blog.csdn.net/chhaj5236/article/details/6422425

虚拟机分配指的是,选择满足特定条件(内存、软件环境配置等)的主机创建虚拟机的过程,这个过程由Datacenter对象负责。VmAllocationPolicy这个抽象类代表的就是这个过程。用户可以通过继承该类实现自己的分配策略,CloudSim中,作者实现了一种简单的分配策略——VmAllocationPolicySimple。方法allocateHostForVm(Vm vm)是该类的核心,它实现了从主机列表中选择一台主机,并在其上创建虚拟机vm。主要实现过程的描述如下:
       (1) 记录下所有主机可用的处理器核心数。
       (2) 从中选出可用处理器核心数最多的第一台主机,并尝试在其上创建虚拟机。
       (3) 如果(2)失败了且还有主机没有尝试过,就排除当前选择的这台主机,重做(2)。
       (4) 根据虚拟机是否创建成功,返回true或false。
    源代码(版本2.1.1)分析如下:

[java] 
view plain
copy

  1. /// VmAllocationPolicySimple源码分析///  
  2. /* 
  3.  * Title:        CloudSim Toolkit 
  4.  * Description:  CloudSim (Cloud Simulation) Toolkit for Modeling and 
  5. * Simulation of Clouds 
  6.  * Licence:      GPL – http://www.gnu.org/copyleft/gpl.html 
  7.  * 
  8.  * Copyright (c) 2009-2010, The University of Melbourne, Australia 
  9.  */  
  10.   
  11. package org.cloudbus.cloudsim;  
  12.   
  13. import java.util.ArrayList;  
  14. import java.util.HashMap;  
  15. import java.util.List;  
  16. import java.util.Map;  
  17.   
  18. import org.cloudbus.cloudsim.core.CloudSim;  
  19.   
  20. /** 
  21.  * VmAllocationPolicySimple is an VmAllocationPolicy that 
  22.  * chooses, as the host for a VM, the host with 
  23.  * less PEs in use. 
  24.  * 
  25.  * @author      Rodrigo N. Calheiros 
  26.  * @author      Anton Beloglazov 
  27.  * @since       CloudSim Toolkit 1.0 
  28.  */  
  29. public class VmAllocationPolicySimple extends VmAllocationPolicy {  
  30.   
  31.     /** The vm table.记录虚拟机被分配到哪台主机 */  
  32.     private Map<String, Host> vmTable;  
  33.   
  34.     /** The used pes.记录虚拟机占用了几个处理器核心 */  
  35.     private Map<String, Integer> usedPes;  
  36.   
  37.     /** The free pes.记录每台主机可用的处理器核心数 */  
  38.     private List<Integer> freePes;  
  39.   
  40.     /** 
  41.      * Creates the new VmAllocationPolicySimple object. 
  42.      * 
  43.      * @param list the list 
  44.      * 
  45.      * @pre $none 
  46.      * @post $none 
  47.      */  
  48.     public VmAllocationPolicySimple(List<? extends Host> list) {  
  49.         super(list); //初始化主机列表hostList(继承自父类的成员)  
  50.   
  51.         //初始化每台主机可用的处理器核心数freePes  
  52.         setFreePes(new ArrayList<Integer>());  
  53.         for (Host host : getHostList()) {  
  54.             getFreePes().add(host.getPesNumber());  
  55.   
  56.         }  
  57.   
  58.         //初始化vmTable和usedPes  
  59.         setVmTable(new HashMap<String, Host>());  
  60.         setUsedPes(new HashMap<String, Integer>());  
  61.     }  
  62.   
  63.     /** 
  64.      * Allocates a host for a given VM. 
  65.      * 
  66.      * @param vm VM specification 
  67.      * 
  68.      * @return $true if the host could be allocated; $false otherwise 
  69.      * 
  70.      * @pre $none 
  71.      * @post $none 
  72.      */  
  73.     @Override  
  74.     public boolean allocateHostForVm(Vm vm) {  
  75.         int requiredPes = vm.getPesNumber();//创建vm所需的处理器核心数  
  76.         boolean result = false;  
  77.         int tries = 0;  //尝试次数  
  78.         List<Integer> freePesTmp = new ArrayList<Integer>();  
  79.         for (Integer freePes : getFreePes()) {  
  80.             freePesTmp.add(freePes);  
  81.         }  
  82.   
  83.         //如果当前虚拟机还未创建  
  84.         if (!getVmTable().containsKey(vm.getUid())) {   
  85.             do { //尝试创建虚拟机直到创建成功或所有的主机都已经尝试过  
  86.                 int moreFree = Integer.MIN_VALUE; //当前最大可用核心数  
  87.                 int idx = –1;  //当前最大可用核心数对应主机的下标  
  88.   
  89.                 //找到可用处理器核心数最大的第一台主机  
  90.                 for (int i=0; i < freePesTmp.size(); i++) {  
  91.                     if (freePesTmp.get(i) > moreFree) {  
  92.                         moreFree = freePesTmp.get(i);  
  93.                         idx = i;  
  94.                     }  
  95.                 }  
  96.   
  97.                 Host host = getHostList().get(idx);  
  98.                 result = host.vmCreate(vm); //尝试创建虚拟机  
  99.   
  100.                 if (result) { //如果虚拟机创建成功  
  101.                     //更新映射关系及主机可用的处理器核心数  
  102.                     getVmTable().put(vm.getUid(), host);  
  103.                     getUsedPes().put(vm.getUid(), requiredPes);  
  104.                     getFreePes().set(idx,getFreePes().get(idx) – requiredPes);  
  105.                     result = true;  
  106.                     break;  
  107.                 } else { //如果创建失败  
  108.                     //将当前主机的可用处理器核心数暂时设成最小值,从而排除该主机  
  109.                     freePesTmp.set(idx, Integer.MIN_VALUE);  
  110.                 }  
  111.                 tries++;  
  112.             } while (!result && tries < getFreePes().size());  
  113.   
  114.         }  
  115.   
  116.         return result;  
  117.     }  
  118.   
  119.     /** 
  120.      * Releases the host used by a VM. 
  121.      * 
  122.      * @param vm the vm 
  123.      * 
  124.      * @pre $none 
  125.      * @post none 
  126.      */  
  127.     @Override  
  128.     public void deallocateHostForVm(Vm vm) {  
  129.         //删除虚拟机相应的映射关系,通过主机销毁虚拟机并更新可用的处理器核心数   
  130.         Host host = getVmTable().remove(vm.getUid());  
  131.         int idx = getHostList().indexOf(host);  
  132.         int pes = getUsedPes().remove(vm.getUid());  
  133.         if (host != null) {  
  134.             host.vmDestroy(vm);  
  135.             getFreePes().set(idx, getFreePes().get(idx) + pes);  
  136.         }  
  137.     }  
  138.   
  139.     /** 
  140.      * Gets the host that is executing the given VM belonging to the 
  141.      * given user. 
  142.      * 
  143.      * @param vm the vm 
  144.      * 
  145.      * @return the Host with the given vmID and userID; $null if not found 
  146.      * 
  147.      * @pre $none 
  148.      * @post $none 
  149.      */  
  150.     @Override  
  151.     public Host getHost(Vm vm) {  
  152.         return getVmTable().get(vm.getUid());  
  153.     }  
  154.   
  155.     /** 
  156.      * Gets the host that is executing the given VM belonging to the 
  157.      * given user. 
  158.      * 
  159.      * @param vmId the vm id 
  160.      * @param userId the user id 
  161.      * 
  162.      * @return the Host with the given vmID and userID; $null if not found 
  163.      * 
  164.      * @pre $none 
  165.      * @post $none 
  166.      */  
  167.     @Override  
  168.     public Host getHost(int vmId, int userId) {  
  169.         return getVmTable().get(Vm.getUid(userId, vmId));  
  170.     }  
  171.   
  172.     /** 
  173.      * Gets the vm table. 
  174.      * 
  175.      * @return the vm table 
  176.      */  
  177.     public Map<String, Host> getVmTable() {  
  178.         return vmTable;  
  179.     }  
  180.   
  181.     /** 
  182.      * Sets the vm table. 
  183.      * 
  184.      * @param vmTable the vm table 
  185.      */  
  186.     protected void setVmTable(Map<String, Host> vmTable) {  
  187.         this.vmTable = vmTable;  
  188.     }  
  189.   
  190.     /** 
  191.      * Gets the used pes. 
  192.      * 
  193.      * @return the used pes 
  194.      */  
  195.     protected Map<String, Integer> getUsedPes() {  
  196.         return usedPes;  
  197.     }  
  198.   
  199.     /** 
  200.      * Sets the used pes. 
  201.      * 
  202.      * @param usedPes the used pes 
  203.      */  
  204.     protected void setUsedPes(Map<String, Integer> usedPes) {  
  205.         this.usedPes = usedPes;  
  206.     }  
  207.   
  208.     /** 
  209.      * Gets the free pes. 
  210.      * 
  211.      * @return the free pes 
  212.      */  
  213.     protected List<Integer> getFreePes() {  
  214.         return freePes;  
  215.     }  
  216.   
  217.     /** 
  218.      * Sets the free pes. 
  219.      * 
  220.      * @param freePes the new free pes 
  221.      */  
  222.     protected void setFreePes(List<Integer> freePes) {  
  223.         this.freePes = freePes;  
  224.     }  
  225.   
  226.     //该方法暂未找到具体的实现  
  227.     @Override  
  228.     public List<Map<String, Object>> optimizeAllocation(  
  229.              List<? extends Vm> vmList) {  
  230.         // TODO Auto-generated method stub  
  231.         return null;  
  232.     }  
  233.   
  234.     //将虚拟机分配给指定的主机   
  235.     @Override  
  236.     public boolean allocateHostForVm(Vm vm, Host host) {  
  237.         if (host.vmCreate(vm)) { //如果虚拟机创建成功,更新vmTable,并返回true  
  238.             getVmTable().put(vm.getUid(), host);  
  239.             Log.formatLine(“%.2f: VM #” + vm.getId() +   
  240.                                ” has been allocated to the host #” +   
  241.                                host.getId(), CloudSim.clock());  
  242.             return true;  
  243.         }  
  244.   
  245.         return false;  
  246.     }  
  247. }  
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/182265.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 数据库 — char、varchar、varchar2区别

    数据库 — char、varchar、varchar2区别char、varchar、varchar2区别char是定长的,varchar是变长的。varchar2应该是varchar的升级,只有ORACLE才有,这里不作讨论。char定长存储,速度快,但是存在一定的空间浪费,适用于字段不是很大,对速度要求高的场合。速度快是因为其在物理上是按定长存储的,这样,就可以根据偏移址一次取出固定长度的字符。varchar变长存储,效率不如char。…

  • 微信公众号网页分享功能开发

    微信公众号网页分享功能开发现在每天都可以看到很多微信分享的链接上面有网站或者商家的自定义的分享标题,和分享链接的描述及分享出去的图像,例如下面的分享出去的链接:              上面这个是微信的js-SDK页面分享给微信好友在聊天列表中显示的视觉效果。   微信JS-SDKDemo:这个是微信网页分享出去的标题。   微信JS-SDK,帮助第三方为用户提供更优质的移动web服务:这个…

  • cstring头文件是什么意思_cout的头文件

    cstring头文件是什么意思_cout的头文件序号 MFC工程中 文件 (1) 否 atlstr.h (2) 是 afx.h

  • Android之ListView原理学习与优化总结

    Android之ListView原理学习与优化总结

  • java如何打印菱形_JAVA输出菱形

    java如何打印菱形_JAVA输出菱形菱形的打印方式,通过确定中间行,确定奇数然后做的处理,思路:上面部分通过确定打印数量为奇数,然后采用公式计算出奇数来,下面因为空格数量就是总行数减中间行数-1计算的,这样就可以计算出要打印的*的数量publicclassTestFile{ publicstaticvoidmain(String[]args){ //TODOAuto-generatedm…

  • MySQL 拼接字符串_合并字符串的库函数是

    MySQL 拼接字符串_合并字符串的库函数是原文请查看MySQL拼接字符串函数CONCAT这里selectconcat(updatesale_personbodysetoldill_code=/,code,/,oldill_reportname=/,reportname,/,oldill_oldtitle=/,oldtitle,/whereoldill=)fromtj_oldill

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号