过载检测
过载检测的工作是为了后面时候准备的,也就是说t时刻完成的检测是便于提前进行迁移,防止在t+1以及后续时刻过载而性能下降。
1、iqr(InterQuartileRange)四份位法【动态阈值方法】
1)初始化一个PowerVmAllocationPolicyMigrationStaticThreshold对象(此对象并非C4中所述的VM选择算法对象,继承自PowerVmAllocationPolicyMigrationAbstract):
a、表示即将进行的是Power-aware的,基于VM迁移的、基于静态固定迁移过载阈值[0.7]的策略的Vms资源分配操作;
b、用于当iqr传入的PowerVmSelectPolicy失效时使用,作为iqr分配算法的的备用分配函数;
c、并定义了自己的主机过载检测isHostOverUtilizated和利用率过载阈值设置函数。
2)产生一个PowerVmAllocationPolicyMigrationInterQuartileRange(继承自VmAllocationPolicyMigrationAbstract)对象,与PowerVmAllocationPolicyMigrationStaticThreshold同族:
a、该对象传入基本的VmSelectionPolicy对象和PowerVmAllocationPolicyMigrationAbstract对象,即PowerVmAllocationPolicyMigrationStaticThreshold作为备用分配策略;
b、过载检测算法核心getHostUtilizationIqr(PowerHostUtilizationHistory)
countNonZeroBeginning(list_data):返回---从后往前看第一个非0数的位置,即从前往后数到最后一个非0位置的元素个数,源码中以大于等于12个为“iqr函数的安全计算元素个数”;
iqr(list_data):返回升序排列后,3/4位置的值与1/4位置的值的差值;
upperThreshold阈值上界设置为:1 - safetyParameter(安全系数,源码里设置该阈值为[1.5])* iqr返回值;
比较PowerHost对象资源利用率与上界的大小,超过即为过载。
3)返回VmAllocationPolicy对象
⚠️ 由于PowerHostUtilizationHistory是动态增加(或者变化的),也就是说得到的iqr值也是变化的,即规定的阈值也是随着历史“负载数据”动态调整的。
⚠️ VmAllocationPolicyMigrationAbstract(默认的阈值为0.9)抽象集成了一个完整的VM分配过程,包括所谓的需迁移的VMs选择和具体分配,每一个继承VmAllocationPolicyMigrationAbstract的类都需要实现自己的isHostOverUtilizated,可以额外实现阈值设置和阈值获取方法,以表示自己的不同。
2、mad(PowerVmAllocationPolicyMigrationMedianAbsoluteDeviation)中位法【动态阈值方法】
1)与iqr同样会有一个PowerVmAllocationPolicyMigrationStaticThreshold作为备用的分配策略;
2)与iqr同理,只是把MathUtil.iqr(list_data)换成MathUtil.mad(list_data),即不是求4份位差值,而是返回"list_data中位数与其他数之间差值的绝对值,所构成的列表的中位数";
3)同样,安全系数mad设置为[2.5]。
3、lr(PowerVmAllocationPolicyMigrationLocalRegression)局部回归法【动态阈值方法】
1)getParameterEstimates(utilizationHistoryReversed):采用简单的局部加权的办法拟合(loess)历史位置和历史负载数据[10个]之间的关系(最小二乘估计参数),其中历史位置根据TriCube办法进行调整,返回估计的回归参数;
2)计算迁移间隔:向上取整 (主机中最大VMs迁移时长【Vm内存占用/带宽】 / 调度周期);
3)预测利用率:estimates[0]+estimates[1]*(10+迁移间隔);
4)过载检测返回:预测的利用 >= 1。
4、lrr(PowerVmAllocationPolicyMigrationLocalRegressionRobust)【动态阈值方法】
5、thr(PowerVmAllocationPolicyMigrationStaticThreshold)【静态阈值方法】
1)纯静态阈值方法;
2)安全系数,源码里面设置的为[0.8],不是默认的0.9。
6、dvfs
1)仅采用:即动态电压频率调整来节点,不采用任何动态Vms资源分配策略