发明内容
为了解决上述技术问题,本发明目的在于提供一种基于机器学习的服务器能耗预测方法,其中包括:
步骤1、根据预设的总CPU利用率阈值,将服务器的工作状态划分为零负载状态、低负载状态和高负载状态,分别采集该服务器在该零负载状态、该低负载状态和该高负载状态下的系统资源利用率和实时能耗,作为零负载训练集、低负载训练集和高负载训练集;
步骤2、分别将该零负载训练集、该低负载训练集和该高负载训练集输入机器学习模型进行训练,生成零负载能耗模型、低负载能耗模型和高负载能耗模型;
步骤3、根据该服务器的待预测系统资源利用率,选择该零负载能耗模型,或该低负载能耗模型,或该高负载能耗模型,以预测该服务器的能耗值。
其中步骤1中该系统资源利用率包括:该服务器的内存利用率、网络带宽利用率、磁盘利用率和该服务器中每个CPU的CPU利用率。
该基于机器学习的服务器能耗预测方法,其中将该服务器的总CPU利用率小于3%时的工作状态作为该零负载状态;
将该服务器的总CPU利用大于等于3%且小于50%的工作状态作为该低负载状态;
将该服务器的总CPU利用大于等于50%且小于等于100%的工作状态作为该高负载状态。
该基于机器学习的服务器能耗预测方法,其中步骤2中该机器学习模型具体为支持向量机回归模型。
该基于机器学习的服务器能耗预测方法,其中该步骤1还包括:利用服务器集群性能监测工具,采集该系统资源利用率。
该基于机器学习的服务器能耗预测方法,其中该步骤1还包括:通过功率测量仪获得该实时能耗。
本发明还提供了一种基于机器学习的服务器能耗预测方系统,其中包括:
训练集采集模块,用于根据预设的总CPU利用率阈值,将服务器的工作状态划分为零负载状态、低负载状态和高负载状态,分别采集该服务器在该零负载状态、该低负载状态和该高负载状态下的系统资源利用率和实时能耗,作为零负载训练集、低负载训练集和高负载训练集;
学习训练模块,用于分别将该零负载训练集、该低负载训练集和该高负载训练集输入机器学习模型进行训练,生成零负载能耗模型、低负载能耗模型和高负载能耗模型;
预测模块,用于根据该服务器的待预测系统资源利用率,选择该零负载能耗模型,或该低负载能耗模型,或该高负载能耗模型,以预测该服务器的能耗值。
其中训练集采集模块中该系统资源利用率包括:该服务器的内存利用率、网络带宽利用率、磁盘利用率和该服务器中每个CPU的CPU利用率。
该基于机器学习的服务器能耗预测系统,其中将该服务器的总CPU利用率小于3%时的工作状态作为该零负载状态;
将该服务器的总CPU利用大于等于3%且小于50%的工作状态作为该低负载状态;
将该服务器的总CPU利用大于等于50%且小于等于100%的工作状态作为该高负载状态。
该基于机器学习的服务器能耗预测系统,其中学习训练模块中该机器学习模型具体为支持向量机回归模型。
该基于机器学习的服务器能耗预测系统,其中该训练集采集模块还包括:利用服务器集群性能监测工具,采集该系统资源利用率。
该基于机器学习的服务器能耗预测系统,其中该训练集采集模块还包括:通过功率测量仪获得该实时能耗。
由此本发明通过以下三点提高了服务器能耗预测精度:
1、以系统资源利用率为输入参数,并且扩充采集的系统资源利用率参数的个数;
2、使用机器学习算法的方法进行建模;
3、提出分段训练及预测的模型构建方法,以提高预测精度并提高实用性。
具体实施方式
对于目前的主流能耗预测建模方法存在一些导致模型误差的潜在因素,本发明基于这些因素进行了针对性的改进和优化,主要从以下几个方面展开。
首先考虑选取的系统参数指标,无论是程序计数器或者是CPU利用率和内存利用率的组合,它们的变化都能够导致服务器功率发生改变,但是这些参数并不是唯一可以导致服务器功率发生改变的因素,现在的研究结果只能表明这些参数与服务器实际功率的相关性是很高的,但是无论是内部系统资源模块或者是外部的物理硬件环境都有可能对实时的功率造成影响。所以本发明以系统资源利用率为输入参数,并且扩充采集的系统资源利用率参数的个数,包括但不限于CPU利用率、内存利用率、网络带宽利用率、磁盘利用率等。
其次,本发明构建预测模型使用的输入数据种类数较多,属于多维数据,并且对精度要求较高,所以使用了机器学习算法的方法进行建模,机器学习算法例如支持向量机模型svm中的支持向量机回归模型svr为例但不限于此。其中多维数据的多维体现在其涉及多个种类,通过将数据转化成为向量进而进行模型的训练和预测,而对向量的一个重要的描述就是它的维度数,每一维代表着不同的信息,多以多种数据就称为多维数据。本发明是4类数据:1、CPU利用率、2内存利用率、3网络带宽利用率、4磁盘利用率。实测功率是在进行模型训练时使用的。
最后,针对能耗预测模型的应用场景以及很多机器学习算法存在的有效区间或时效性的问题,本发明提出了分段训练及预测的模型构建方法,以提高预测精度并提高实用性。
在数据采集方面,传统能耗预测方法一般是通过仪器或者是服务器的系统文件进行数据采集,这些采集方法操作复杂,效率不高,会影响数据的实时性。所以本发明使用了服务器集群性能监测工具,在对服务器集群进行性能监控的同时,可以通过该工具向外提供的数据接口将实时的监控数据提取出来作为能耗模型的训练集数据。
本发明是在现有的服务器功耗预测方法的基础上,提出增加用于建模的参数个数,考虑到实际应用时的具体场景分析可能对服务器功率产生明显影响的系统资源的使用。算法方面使用机器学习算法,本文以svm(支持向量机)模型中的svr(支持向量机回归)模型为例但不限于此。
为了实现上述目的,本发明采用的步骤以及具体技术方案如下:
步骤1.根据预设的总CPU利用率阈值,将服务器的工作状态划分为零负载状态、低负载状态和高负载状态,分别采集该服务器在该零负载状态、该低负载状态和该高负载状态下的系统资源利用率和实时能耗,作为零负载训练集、低负载训练集和高负载训练集。步骤1中该系统资源利用率包括:训练时的该服务器的内存利用率、网络带宽利用率、磁盘利用率和该服务器中每个CPU的CPU利用率。
获取服务器的系统资源利用率。系统资源利用率包括CPU利用率、内存利用率、网络带宽利用率、磁盘利用率等系统资源参数(包含但不限于这四个参数)。传统的能耗预测一般会选择CPU利用率和内存利用率作为参数进行使用,但是在一个云操作系统或者大型数据中心当中,一般会存在着数量巨大的服务器集群,并且会有着数据量庞大的分布式应用运行在这些服务器上,在这种生产环境下,不仅仅是CPU和内存的消耗很大,分布式应用节点间的通信和数据传输,单台服务器对大量数据的收发和存储,都会给服务器的网络带宽以及磁盘增加很大的负载,这些资源的消耗也有可能会相应的导致服务器功率的上升。所以对于预测模型参数的选取需要更加的丰富,更能够完整的反映出服务器实际功率的改变。同时,一般服务器一般有多个CPU,以往的参数采集方式基本是通过系统文件获取系统总的CPU使用率,但是这种方式忽略了每个CPU对服务器能耗产生的独立的影响。综上所述,本发明进一步增加了参数的数量,采集了服务器的内存利用率、网络带宽利用率、磁盘利用率和每个CPU的CPU利用率等系统资源利用率参数。
步骤11.获取CPU利用率。
以下给出了linux系统中CPU相关的参数。
参数解释:
user:从系统启动开始累计到当前时刻,用户态的CPU时间,不包含nice值为负进程,用户态的CPU时间具体为linux系统执行用户指令所用的时间。
nice:从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间,Linux的进程调度并未使用直接均分时间片的方式,而是对优先级进行了改进。nice值,范围是-20到+19,越大的nice值意味着更低的优先级,低nice值的进程会获得更多的处理器时间。
system:从系统启动开始累计到当前时刻,核心时间。
idle:从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间。
iowait:从系统启动开始累计到当前时刻,硬盘IO等待时间irq:从系统启动开始累计到当前时刻,硬中断时间。
softirq:从系统启动开始累计到当前时刻,软中断时间。
根据前文所述,此步骤采集服务器中每个CPU的利用率参数。
CPU利用率的计算方法:通过计算系统CPU的等待时间以及包括等待时间内的总时间即可得到CPU的闲置率,进一步可得到CPU利用率。
步骤12.获取内存利用率。内存相关的指数有MemTotal、MemFree、Buffers、Caches等等,先获取总的内存,再获取空闲内存数,即可计算出内存的利用率。
步骤13.获取网络带宽利用率。统计每个时刻网络数据传输接收Receive和发送Tramsmit的bytes数的变化,即可获得网口传输速率,再除以网口的带宽就得到网络带宽利用率。
步骤14.获取磁盘读写I/O利用率。统计每个单位时间磁盘进行读和写操作的数据总量,再获取单位时间磁盘的最大吞吐量,通过这两个参数即可得到磁盘的利用率,在本实施例中单位时间可例如是1秒。
获取服务器的实时功率作为该服务器的实时能耗。
步骤15.通过功率测量仪连接要进行测试的物理服务器,对其包括功率在内的各种电参数进行实时的测量,这一过程是与步骤1中获取服务器资源利用率同步进行的。
步骤16.读取上一步骤15中测量的服务器功率值并且保存到本地,与之前步骤1获取的系统资源利用率通过时间戳一一对应,合并成一个完整的用于模型构建的数据集。
步骤17.服务器模拟负载。人为的给服务器增加负载,模拟实际业务环境下服务器集群在运行项目时对各种系统资源的使用情况。调整给服务器的负载,多次采集每个负载情况下的系统资源利用率和实时能耗,作为训练集,保证训练集数据的完备性。
步骤2.分别将该零负载训练集、该低负载训练集和该高负载训练集输入机器学习模型进行训练,生成零负载能耗模型、低负载能耗模型和高负载能耗模型。
训练svm模型。构建预测模型需要先对模型进行训练,本算法模型的训练集由实时采集的系统资源利用率和实时能耗组成,将构建好的训练集数据作为机器学习模型(svm算法训练模块)的输入进行训练,能够得到一个能耗预测模型。在整个构建能耗预测模型的实验阶段,通过每次对数据的分析,发现了如下现象:在零负载阶段,实际功率值会在系统资源利用率稳定的情,况下出现跳变,导致部分零负载阶段的功率值与增加负载后的功率值近似,误导模型的训练,进一步影响预测精确度;随着负载的增加,系统资源利用率以及功率的增长幅度越来越小,而且高负载情况下的功率值还有经过缓慢增长而后稳定下来的预热现象,这些因素使得不同负载阶段之间的界限变得模糊;由于服务器的负载是与其运行的作业密切相关的,而在实际应用中的业务的多样性会导致出现各种不同的负载组合,这样的多样性会导致能耗模型预测的难度大大增加。并且即使是使用了机器学习算法,这些算法都存在着有效区间或者时效性的问题。所以本发明提出了分段训练的方法以解决上述问题,由于4种系统资源利用率参数中总CPU利用率与服务器实际功率的相关性最高,所以以总CPU利用率为模型分段依据,将整体的服务器负载分为零负载、低负载、高负载三个阶段,分别在这三种负载情况下采集训练集的数据,不同负载阶段的数据分开进行训练,最后得到分段式能耗模型,包括3个能耗模型,分别为零负载能耗模型、低负载能耗模型和高负载能耗模型。其中本设计的负载的等级是以总CPU利用率进行划分的。零负载是指除了系统进程外,没有别的进程和应用在服务器上运行,此时CPU利用率不一定为0,但是会很低接近于0,在本实施例中将服务器CPU利用率小于3%时的工作状态定义为零负载。低负载就是指此时服务器上运行的业务较少,负载较低的状态,在本实施例中将服务器CPU利用率大于等于3%且小于50%的工作状态定义为低负载。高负载是指服务器上运行的业务较多,负载较高的状态,在本实施例中将服务器CPU利用率大于等于50%且小于等于100%的工作状态定义为高负载。这个划分方式是经过多次的实验验证得到的相对准确的划分方式。
步骤21.对训练出的分段式能耗模型进行测试。以前四个步骤相同的方式采集数据,作为测试集,将构建好的测试集数据作为机器学习算法预测模块的输入进行测试,对比输出的实际功率值和预测功率值,评估模型的准确性和可用性。
步骤22.分析测试结果,评估模型性能。若能耗预测模型的测试结果与实际功率值的变化趋势一致,并且误差在允许范围内,即可将其用于实际的服务器功率预测的工作中,执行步骤3。若模型性能不如预期,则在原来训练集数据基础上追加数据,扩大数据的负载范围,保证训练集数据的多样性和完备性,对模型进行进一步的训练。
步骤3.根据该服务器的待预测系统资源利用率,选择该零负载能耗模型,或该低负载能耗模型,或该高负载能耗模型,以预测该服务器的能耗值。步骤3中该待预测系统资源利用率包括:待预测时的该服务器的内存利用率、网络带宽利用率、磁盘利用率和该服务器中每个CPU的CPU利用率。
为让本发明的上述特征和效果能阐述的更明确易懂,下文特举实施例,并配合说明书附图作详细说明如下。
下面更加具体的描述本发明具体实施方式,本发明的目标是构建一个基于机器学习算法(本文以svm(支持向量机)算法中的svr(支持向量机回归)算法为例但不限于此)的服务器能耗预测模型,该模型的预测准确度更为优秀,并且模型适应性强,可以满足不同系统负载下的使用需求。具体的实施步骤包括:获取服务器系统资源利用率;获取服务器实时能耗;服务器模拟负载;训练能耗预测模型;对训练出的能耗预测模型进行测试;分析测试结果,评估模型性能。
获取服务器的系统资源利用率,使用linux服务器集群性能监测工具ganglia实时的监控并通过数据接口采集服务器实时的CPU利用率、内存利用率、网络带宽利用率、磁盘利用率等系统资源利用率参数(包含但不限于这四个参数)。
获取服务器所有CPU的利用率,利用上述服务器集群性能监测工具获取每个CPU参数Idle:从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间iowait从系统启动开始累计到当前时刻,IO等待时间。利用以下公式计算CPU使用率。
CPU利用率=1-idle/(user+nice+system+idle)
获取内存利用率。
获取内存利用率,通过上述服务器集群性能监测工具获取内存参数used、buff、cache和free,利用以下公式计算内存使用率。
内存使用率=1-free/(used+buff+cache)
获取网络带宽利用率。
获取网络带宽利用率,利用上述工服务器集群性能监测具获取网络参数recv和send,这两个参数分别统计一段时间内网络数据传输接受和传输的bytes数的变化,即可获得网口传输速率,再除以网口的带宽就得到带宽的使用率。
获取磁盘利用率。
获取磁盘利用率,利用上述服务器集群性能监测工具获取磁盘参数read和write,分别代表每秒钟磁盘读写数据的总量,再通过磁盘型号获取磁盘的最大吞吐量MBPS,通过以下公式计算磁盘使用率:
磁盘利用率=(read+write)/MBPS
获取服务器的实时能耗。
获取服务器的实时能耗需要一台功率测量仪,一台数据接收服务器还有要进行测量的服务器,采集方式图1所示。
使用与B1中功率测量仪配套的串口读取软件读取上一步骤中测量的服务器功率值并且保存到本地,与之前获取的系统资源利用率通过时间戳一一对应,合并成一个完整的用于模型构建的数据集。
服务器模拟负载,模拟实际业务环境下服务器集群在运行项目时对各种系统资源的使用情况。本发明使用了linux服务器负载压力测试工具stress,同时结合编写的自动测试脚本,自动生成各种系统资源利用率随机组合的负载情况。系统资源利用率和实时能耗就在不同的负载情况下进行长时间采集,通过时间跨度和不同的数据组合来保证训练集数据的完备性。
构建一个预测模型需要先对模型进行训练,本算法模型的训练集由实时采集的系统资源利用率和实时能耗组成,每一条训练集数据的结构均为前四个参数分别是:CPU利用率、内存利用率、网络带宽利用率和磁盘利用率,后面根据时间戳增加实时的功率。根据前面对分段模型的论述,以CPU利用率为模型分段依据,将整体的服务器负载分为零负载、低负载、高负载三个阶段,分别在这三种负载情况下采集训练集数据,不同负载阶段的数据分开进行训练,最后得到3个能耗模型,分别为零负载能耗模型、低负载能耗模型和高负载能耗模型。
测试集数据的采集不需要进行分段,利用自动测试脚本随机模拟服务器负载,进行系统利用率参数和实时能耗的采集。使用代码编写测试模块时,需要增加判断语句,根据即将进行预测的数据的总CPU利用率来选择步骤4中构建出的对应阶段的能耗模型进行预测。
收集测试结果数据,绘制实际功率与预测功率的功率对比曲线以及误差曲线,计算平均误差、平均平方差、平方根误差、最大误差、最小误差。若功率对比曲线中能耗预测模型的测试结果与实际功率值的变化趋势一致,并且计算出的各个误差评估值在制定的标准内,即可将其用于实际的服务器功率预测的工作中。
以上训练模型,测试模型,模型评估均体现在图2中。投入使用时,训练模型的评估对象可以是进行训练时所用的服务器,同时可适用于与该训练用服务同配置的服务器的能耗预测。
以下为与上述方法实施例对应的系统实施例,本实施系统可与上述实施方式互相配合实施。上述施方式中提到的相关技术细节在本实施系统中依然有效,为了减少重复,这里不再赘述。相应地,本实施系统中提到的相关技术细节也可应用在上述实施方式中。
本发明还提供了一种基于机器学习的服务器能耗预测方系统,其中包括:
训练集采集模块,用于根据预设的总CPU利用率阈值,将服务器的工作状态划分为零负载状态、低负载状态和高负载状态,分别采集该服务器在该零负载状态、该低负载状态和该高负载状态下的系统资源利用率和实时能耗,作为零负载训练集、低负载训练集和高负载训练集;
学习训练模块,用于分别将该零负载训练集、该低负载训练集和该高负载训练集输入机器学习模型进行训练,生成零负载能耗模型、低负载能耗模型和高负载能耗模型;
预测模块,用于根据该服务器的待预测系统资源利用率,选择该零负载能耗模型,或该低负载能耗模型,或该高负载能耗模型,以预测该服务器的能耗值。
其中训练集采集模块中该系统资源利用率包括:该服务器的内存利用率、网络带宽利用率、磁盘利用率和该服务器中每个CPU的CPU利用率。
该基于机器学习的服务器能耗预测系统,其中将该服务器的总CPU利用率小于3%时的工作状态作为该零负载状态;
将该服务器的总CPU利用大于等于3%且小于50%的工作状态作为该低负载状态;
将该服务器的总CPU利用大于等于50%且小于等于100%的工作状态作为该高负载状态。
该基于机器学习的服务器能耗预测系统,其中学习训练模块中该机器学习模型具体为支持向量机回归模型。
该基于机器学习的服务器能耗预测系统,其中该训练集采集模块还包括:利用服务器集群性能监测工具,采集该系统资源利用率。
该基于机器学习的服务器能耗预测系统,其中该训练集采集模块还包括:通过功率测量仪获得该实时能耗。
虽然本发明以上述实施例公开,但具体实施例仅用以解释本发明,并不用于限定本发明,任何本技术领域技术人员,在不脱离本发明的构思和范围内,可作一些的变更和完善,故本发明的权利保护范围以权利要求书为准。