余海鹏 2010年04月25日 星期日 23:30 | 2159次浏览 | 7条评论
需求:
输入的数据:使用nmon在AIX上收集的性能数据,分两种周期:一周和一天。
输出的数据:服务器一周内的忙时时段与闲时时段,以及变化趋势。
一周的数据采样间隔是10分钟,也就是说每10分钟收集一次数据,持续收集一周。而一天为周期的数据收集采样间隔是5分钟。
使用这些数据我们可以绘制出机器在数据采集周期内的性能图表。现在我们需要设计一个算法,根据CPU的运行数据,计算出这一周的忙时与闲时基线,通过这条基线就可以判断这一周内,这台机器的哪些时段是处于忙时的。就是CPU使用率超过忙时基线的时候,就判断是忙时,低于闲时基线的时候,就判断是闲时,但是实际的计算方式应该要再复杂一点,因为还会涉及到持续时间的因素。接下来还可以基于这些结果做趋势分析。
使用CPU数据编制的图表例子:
我目前有两种方法用来计算这两条基线的:
第一种,比较简单直接,使用一周的数据计算CPU使用率平均值,之后取各个峰值(分为高低峰两种)节点数据算其平均值分别为Ah和Al,数据的总平均值为A,那么闲时基线为:A-m(A-Al),忙时基线为:A+m(Ah-A),其中m为权值,m可用不同的方法得出,例如((Al/A)+(A/Ah))/2,最后用这两条基线对每天的数据进行处理,确定一个时间范围T,只有时间间隔大于T的才计入忙闲时;
第二种,使用7天的单天数据,对每天相同时刻的数据取平均值,用这些点就可以构建一个周期为一天的数据模型,所得出的图表曲线相比较实际的单天数据会平缓一些,之后检查各个峰值节点,确定一个时间范围T,以一个峰值节点为中心查找两边的点,找到两边拐点,如果两个拐点之间的时间间隔大于T,则确定这是一个忙时或闲时。
因为感觉这两种方法实在太简陋,觉得这样的统计不够科学,所以之前没有贴出来,请大家见谅,呵呵。
请有相关算法设计经验的老大赐教!
Zeuux © 2024
京ICP备05028076号
回复 黄翀 2010年04月26日 星期一 14:05