input: hostList, utilThreshold
hostList.sortDecreasingUtilization()
lastIndex = hostList.indexOfLastNonZeroHostUtilization()
for i := lastIndex downto 1
for j := 1 to i - 1
if hostList[j].currentUtil() + hostList[i].currentUtil() <= utilThreshold
vmList = hostList[i].getAllVms()
host[i].deleteAllVms()
host[j].addVms(vmList)
break
此伪代码来自
一些研究论文。我读了这篇论文,但他们没有这个算法的解释。Rasoul Beik伊斯兰阿萨德大学 - 伊朗伊斯法罕Khomeinishahr分部
这是论文中的 description :
此算法是最小主机利用率选择,最大主机利用率分配(MinMax_HU)
在此算法中,主机会根据其使用情况定期进行排序;如果高效主机的利用率不超过算法中定义的利用率阈值,则效率较低的主机中的VM将移至更高效的主机。
任何人都可以逐行解释这个算法吗?我不明白if条件。
答案 0 :(得分:6)
它所做的就是将虚拟机移动到具有足够容量来容纳两台主机当前虚拟机的主机上,这将释放其中一台主机所需的资源。
忘记主人和虚拟机:想象一下你正在搬家,而且你有太多的纸箱装在车里。每个纸箱都可以容纳一些最大数量的书籍:你可以从一个纸箱中取出所有书籍并将它们放在另一个纸箱中;然后你将需要更少的盒子。
所以,算法基本上是:
for box1 in boxes:
for box2 in (boxes without box1):
if (# books in box1 + # books in box2) < (max # books in a box):
move all books from box1 to box2
throw away box1
那里也有一些排序的东西,只是为了让这个算法很好地利用可用空间:它通过降低利用率来排序(c.f.每个方框中的书数);内循环中的迭代顺序意味着您将尝试组合主机(c.f. boxes)以留下最小的剩余空间。