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一样,我想将Ant Colony优化应用为负载均衡策略。但目前尚不清楚Round Robin是如何实现的,在cloud_analyst cloudsim项目中没有看到Round Robin的代码,那么我如何应用A C O,请分享应用于cloudsim的A C O代码片段
答案 0 :(得分:1)
由于我在CloudSim方面的经验不足,我认为你应该尝试创建一个新的VmAllocationPolicy
而不是VmLoadBalancer
。因此,如果您尝试使用Ant Colony优化,那么您的类应该看起来像这样。
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模拟示例,这将对您有所帮助。
P.S。我知道你问了一个多月,但为了以防它可以帮到你,我会很高兴的!
答案 1 :(得分:0)
如果您对Vm / Cloudlet使用TimeShareScheduling,它将像roundrobin算法一样。 VM / cloudlet调度程序的不同组合可以制定不同的调度策略。 Figure 4 of this可能会对您有所帮助。