running-and-using-cloud-analyst
这是如何应用循环调度的代码
public class RoundRobinVmLoadBalancer extends VmLoadBalancer
{
private Map<Integer, VirtualMachineState> vmStatesList;
private int currVm = -1;
public RoundRobinVmLoadBalancer(Map<Integer, VirtualMachineState> vmStatesList)
{
super();
this.vmStatesList = vmStatesList;
}
/* (non-Javadoc)
* @see cloudsim.ext.VMLoadBalancer#getVM()
*/
public int getNextAvailableVm(){
currVm++;
if (currVm >= vmStatesList.size()){
currVm = 0;
}
allocatedVm(currVm);
return currVm;
}
}
VmLoadBalancer
import java.util.Map;
import java.util.HashMap;
/**
* This is the base class defining the behaviour of a Virtual Machine load
balancer
* used by a {@link DatacenterController}. The main method all load balancers
should implement
* is <c
ode>public int getNextAvailableVm()</code>.
*
* This class provides a basic load balancing statistic collection that can be used by
* implementing classes. The implementing classes should call the <code>void allocatedVM(int currVm)</code>
* method to use the statisitics collection feature.
*
*/
abstract public class VmLoadBalancer
{
/** Holds the count of allocations for each VM */
protected Map<Integer, Integer> vmAllocationCounts;
/** No args contructor */
public VmLoadBalancer(){
vmAllocationCounts = new HashMap<Integer, Integer>();
}
/**
* The main contract of {@link VmLoadBalancer}. All load balancers should implement
* this method according to their specific load balancing policy.
*
* @return id of the next available Virtual Machine to which the next task should be
* allocated
*/
abstract public int getNextAvailableVm();
/**
* Used internally to update VM allocation statistics. Should be called by all impelementing
* classes to notify when a new VM is allocated.
*
* @param currVm
*/
protected void allocatedVm(int currVm){
Integer currCount = vmAllocationCounts.get(currVm);
if (currCount == null){
currCount = 0;
}
vmAllocationCounts.put(currVm, currCount + 1);
}
/**
* Returns a {@link Map} indexed by VM id and having the number of allocations for each VM.
* @return
*/
public Map<Integer, Integer> getVmAllocationCounts()
{
return vmAllocationCounts;
}
}
像Round Robin一样,我想将蚁群优化应用为负载平衡策略。但是目前尚不清楚,如何实施Round Robin,在cloud_analystcloudsim项目中看不到Round Robin的代码,那么我该如何应用A C O,请分享在cloudsim中应用的A C O代码段
最佳答案
以我对CloudSim的很少了解,我认为您应该尝试创建一个新的VmAllocationPolicy
而不是VmLoadBalancer
。因此,如果您尝试使用蚁群优化,则您的类应类似于以下内容。
public final class MyPolicyNew extends VmAllocationPolicy {
private Map<String, Host> vmTable;//vm table
private Map<String, Integer> usedPes;//used pes
private List<Integer> freePes;//free pes
public MyPolicyNew(List<? extends Host> list) {
....
}
@Override
public boolean allocateHostForVm(Vm vm) {
**Your code for ACO goes here**
**You do all the processing here and at the end allocate the vm to a host**
**using host.vmCreate(vm) which returns a boolean on success of allocation, which you return from the function**
}
....
}
您必须尝试查看
VmAllocationPolicy.java
类以及cloudsim中包含的Cloudsim模拟示例,这将对您有所帮助。附言我知道您已经问了一个多月,但是万一它可以帮助您,我会很高兴的!
关于java - 在单个数据中心内将蚁群优化添加为跨VM的负载平衡策略,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33360695/