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)


相关推荐

  • java链表数据结构是什么_java 链表数据结构

    java链表数据结构是什么_java 链表数据结构首先,单链表相对于队列的优势在于存储地址不是连续的,这样的意义在于,操作其中的某一个位置的元素时不需要对之前的其他元素都进行内存操作,大大的为我们的计算机减压了。下面直接进入正题:先要定义一个结点类,如下:Java代码publicclassNode{Nodenext;//下一个结点的引用Objectobj;//结点元素publicNode(Objectobj){this.obj=obj;…

  • visual studio运行程序的快捷键_visual studio快捷方式在哪

    visual studio运行程序的快捷键_visual studio快捷方式在哪目录一、系统快捷键二、常用系统命令三、QQ快捷键四、IE浏览器快捷键使用大全五、Word 中的快捷键六、Excel 中的快捷键七、PowerPoint 中的快捷键八、Visual Studio九、Eclipse十、Photoshop十一、批处理指令十二、安装操作系统(此快捷操作对我们程序员十分重要,所以放在前面)八、Visual Studio8.1、项目相关的快捷键…

  • 如何卸载tensorflow

    如何卸载tensorflowwindows系统下:1.按windows+r2.输入cmd3.输入pipuninstalltensorflow中间会提示输入Y或者N,输入Y后按回车即可。如果提示找不到pip,或者pip不是内部指令,点击这里解决。https://blog.csdn.net/qq_29371155/article/details/105074987…

  • avc1 vs avc3 in fragment MP4 difference

    avc1 vs avc3 in fragment MP4 differenceAmendment2ofISO/IEC14496-15(AVCfileformat)isdefininganewstructureforfragmentedMP4called”avc3″.TheprincipaldifferencebetweenAVC1andAVC3isthelocationofthecodecinitialisationdata(e.g.SPS,PPS).InAVC1thisdataisplacedin.

    2022年10月17日
  • CRC16 的生成及校验原理「建议收藏」

    CRC16 的生成及校验原理「建议收藏」参考:https://blog.csdn.net/niepangu/article/details/45499383计算CRC的过程,就是用一个特殊的“除法”,来得到余数,这个余数就是CRC。&#1

  • JavaWeb之HttpSession

    JavaWeb之HttpSessionHttpSession一、概述HttpSession是由JavaWeb提供的,用来会话跟踪的类。session是服务器端对象,保存在服务器端!!!HttpSession是Servlet三大域对象之一,所以它也有setAttribute()、getAttribute()、removeAttribute()方法。HttpSession底层依赖Cookie,或是URL重写!二、HttpSe…

发表回复

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

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