APP下载

基于云平台的任务性能采集和分类方法

2018-08-28柳春懿覃源淞芦尚奇

计算机应用 2018年6期
关键词:密集型磁盘内存

柳春懿,张 晓,覃源淞,芦尚奇

(西北工业大学计算机学院,西安710029)(*通信作者电子邮箱18729580703@163.com)

0 引言

随着云计算技术的发展,云计算依靠自身优秀的性能、灵活的扩展性、低廉的价格吸引着国内外企业将自身的业务迁移到云上。在各方共同努力下,云生态圈越来越完善,企业转型到云上也成为了不可逆转的潮流。然而根据Reiss等[1]于2012年提出的研究成果可知,谷歌数据中心的资源利用率竟然低于50%。作为全球优秀的云计算提供商,不缺乏优秀的调度算法,依然没有很好地解决利用率低下的问题。主要原因是随着云上企业数量上的增长,企业的任务种类也在不断增加。复杂的任务种类和性能特征导致用户资源的申请选择困难,如果申请的虚拟机硬件性能太高会造成资源的浪费;反之性能太低会造成不能满足企业的基本需求,降低任务的服务质量。若资源利用率较低的情况下,会导致运营成本增加,浪费现有资源。但是现阶段大部分企业在没有很好的指导情况下,为了保证服务质量,都会过多地申请资源[2]。

现有的指导手段主要是通过用户手动填入应用相应信息。例如阿里云服务,会让填写需求类型、心理价位、需求描述、行业领域等,这对一般的用户,尤其是非专业用户而言,无疑是个困难的操作。另外,有些企业会找专业人士来分析任务需求,一般专业人士的专家费是一笔不小的开销。这样简单的描述并不能准确地描述任务类型和任务需求,分配的资源也达不到按需分配目的,所以亟需一种获取应用性能信息的分析方法:一方面为用户提供一套准确的按需分配解决方案,另一方面将信息给云提供商以更准确地分配硬件资源,达到节省资源的目标。

与传统的任务迁移相比,企业任务迁移存在以下问题:

1)大部分的企业的任务运行在物理机上,如何准确全面采集任务在物理机上的有用信息。

2)不同机器配置所表现出来的性能特征会有所差异,例如Intel i7和Intel i3处理器的CPU在同等利用率情况下,处理能力差距巨大。除此之外,统一物理机上的虚拟机之间会互相影响,如何用最少的性能特征完整地描述任务。多维度的资源需求将会增加描述任务的难度。

3)根据所获取的任务性能特征信息,如何细分该任务类型,以此为基础分配相应的资源,一方面提供给用户进行选择,另一方面提供给云提供商进行全局资源调度。

已经有很多文献提出了应用性能分类的方法:其中文献[3]中对用户的源码进行分类,利用浮点运算关系分析程序的复杂度,鉴于云平台下用户安全性,源码通常不可获得;文献[4]中根据网络服务响应时间,通过基于分析模型的排队理论分析;在此基础之上,文献[5]中提出了多类排序预测在线虚拟机工作负载响应时间和吞吐量。针对云环境下资源需求预测许多研究学者分别利用回归模型[6]、时间序列分析[7]、基于状态分析[8]、机器学习模型[9]、模式匹配[10]等方法研究上。这些方法都是基于预测机制,因为运行时间短,预测准确度难以保障。除此之外,文献[11]中采用决策树的软件分类方法,但是只是针对CPU和内存进行粗粒度分类;文献[12]中比较全面地提出许多任务类型,但是划分方法过于简单;文献[13]中基于利用率特征分析,并没有全面地进行描述任务特征。

针对以上问题,本文提出了任务性能的最小参数集合,从计算、网络、硬盘三个大方面,全方位更细粒度地描述任务。并利用开发的低负载的性能采集工具采集该任务性能,将采集的性能映射到云上性能。根据采集的性能参数,利用奥姆剃须刀原理,即实际应用中,模型越简单越高效[14]。使用权重可配的多KD(K-Dimension)树 KNN(K-Nearest Neighbors)算法,详细划分任务类型。使用KD树减少存储量和计算量[15],使用交叉验证方法提高准确度[16]。最后结合云上性能属性和任务类型,给用户提供虚拟机配置的详细信息,给云提供商提供任务性能相关的详细信息。

1 任务模型逻辑框架

服务性能 QoS(Quality of Service)指标通常使用 SLA(Service Level Agreement)协议来描述,为了满足SLA协议相关内容,单独考虑某一个硬件的性能达标是不准确的。通过预测的方法得到的性能属性只适应在同一云环境下进行[17],并且数据准确性不高。本文使用历史数据判断迁移所需配置和任务类型,既能准确根据实际使用情况给用户提供虚拟机选择方案,又能根据任务种类和表现出来的性能特征为云提供商分配方案作参考。具体如图1所示。

本文根据云计算提供的服务将资源分为计算、存储、网络资源,并且有该三大资源引申出具体可测量的硬件特征,即计算表现硬件特征为CPU和内存;存储表现为硬盘和读写I/O;网络表现为网络拓扑和网络带宽。这些硬件特征不能很好得到控制和测量,所以根据实际需求本文提出了任务数据特征,并且建立性能向量。根据所选的数据特征通过模型映射到云平台上,提供虚拟机的配置信息。除此之外,将这些数据特征输入到用基准测试数据的训练集中,细粒度划分任务类型。最终,给用户提供资源申请建议同时给云提供商提供虚拟机分配调度建议。

图1 逻辑框架Fig.1 Logical framework

2 轻量级的任务性能采集系统

想要全面准确地描述任务信息,最为直观和重要的就是任务的性能数据特征,硬件的性能数据特征包含了描述任务的各种信息。

2.1 参数确定

有很多性能特征可以来描述这个任务,如果参数选择不准确,那么将不能准确描述任务;如果参数选择过少,那么不能全面地描述任务;如果参数选择过多,那么将增大采集工具的负载,使得数据不准确。所以在性能特征选择上,本文认为应该注意以下几点:1)所选的数据特征应该可以全方面地描述负载情况,并且必须是容易观察和控制;2)所选的硬件参数必须可以通过云平台动态配置;3)应该需要确立能够捕捉任务性能的最小参数集合;4)考虑任务的服务质量是由CPU、内存等多维因素共同决定的,并不和某一个单维度的资源成特定的关系。

根据阿里云服务,资源分为基础资源和额外附加资源。基础资源分为实例信息、磁盘信息、网络资源选择。实例信息选择包括CPU核数、内存大小、I/O是否优化。磁盘信息选择包括系统盘和数据盘选择、磁盘大小、磁盘类型(普通云盘、高效云盘、SSD云盘和本地SSD磁盘)。网络资源选择包括包月或按量类型、宽带规格等。额外附加资源包括对象存储、云数据库、安全网络等。本文仅针对基础资源中的计算、磁盘、网络分别进行数据特征提取和描述:

1)计算资源。CPU的运算能力不但CPU利用率有关,而且和CPU的类型、主频、外频、高速缓存等相关。本文直接利用CPU的服务质量表示所需要的速度,如FLOPS(Floating-Point Operations Per Second),或对潜在的CPU性能的利用。阿里云采用的是 Intel Xeon E5-2420 CPU,主频1.9 GHz,启用了超线程。本文在阿里云的虚拟机进行了测试,使用LINX工具针对操作系统为WindowsServer 2012版本不同核数CPU进行测试。计算规模为10 000,重复次数为5,得到了该平台所给的 1核、2核、4核平均 GFLOPS分别为 21.503 6、41.5510、85.5912,并且方差分别为 0.426、0.201、0.107,由此可以验证虚拟机的FLOPS随着核数的增加稳定线性地增加。

2)存储资源。根据中国信息化周报统计,阿里SSD云盘可以提供15 000的IOPS(Input/Output Operations Per Second),高效云盘IOPS为3000,而普通云磁盘读的IOPS大约为800,写的大约为400。

3)网络资源。阿里云提供总网络带宽大小选择。

2.2 参数采集

本模型使用 (F,M,U,D,S,N)六维向量来描述任务的整体运行情况。其中:F表示CPU的浮点运行能力作为虚拟机和物理机的统一标准,M表示内存总量,U表示内存使用率,D表示磁盘大小,S表示磁盘的读写速度,N表示网络带宽。针对以上六维性能向量进行数据采集,若使用成熟工具Ganglia等,会存在如磁盘读写信息不能获取等问题。大部分工具都是只对一方面数据参数进行采集,不满足全面描述的需求,所以本文实现了Lbenchmark采集工具,将对所需计算、存储、网络资源统一采集。

对比分布式信息采集Ganglia,Lbenchmark减少了机群之间的通信,针对特定的应用程序,可以减少信息采集项的个数[18],降低信息采集频率[19],进而降低整体监控的负载。

该工具通过UI(User Interface)和用户交互,内部控制模块提供对外接口。在不同的节点上部署采集工具,采集数据并分析处理。该分布式采集工具逻辑框架如图2所示。

图2 采集工具模块Fig.2 Collection tool module

2.3 轻量级采集验证

为了对比Ganglia监控系统和Lbenchmark系统产生负载对机器的影响,使用CPU占用时间作为测试的指标,利用top工具可以查看到进程所占用的CPU时间长度,分别在机器上做无监控系统、有Lbenchmark监控和有Ganglia监控的负载情况测试,得出的测试结果如图3所示。

从图3可以看出,Lbenchmark采集工具占用的CPU时间相对较短,可以低负载地运行采集工具,进而减少采集工具对任务的影响。

图3 CPU占用时间比较Fig.3 Comparison of CPU occupancy time

3 基于权重调节的多KD树任务分类

3.1 负载任务特征

传统提高利用率的方法为调度,但是现在的云资源调度基本上都是对临时的状态信息作出调度策略。为了得到最优的有效调度策略,已知任务的类型和资源需求是必不可少的,本文针对已知任务使用特定的负载生成工具进行负载任务特征收集,在任务迁移之前,提供任务特征。

根据任务的性能不同,本文细分任务类型,将传统的粗粒度划分机制,即计算、存储、网络更详细地划分。首先根据负载的时间变化,分为密集型和随机型。密集型指即在一定长时间内硬件都处在高负载状态下;随机型是指硬件的负载在一定长时间情况随机,例如Web应用任务。针对硬件不同可将任务细分为以下类型:1)CPU密集型;2)硬盘密集型;3)内存密集型;4)计算密集型(CPU+内存);5)I/O密集型;6)全负载密集型。

本文将标准负载生成工具和Linux基础命令作为训练任务,在测试服务器上运行得到性能数据特征,利用KNN算法建立历史数据的训练集。所选用负载生成工具如表1所示。

表1 Benchmark用例Tab.1 Benchmark templates

3.2 算法描述

本文针对数量巨大且分类清晰的训练数据,采用基于属性权重的KD 树 KNN优化算法。K近邻模型的特征空间一般是n维实数向量空间,使用的距离一般使用欧氏距离来表示:

KNN简单算法存在问题有:1)计算量和存储量巨大。2)K值选择问题,K值的减小就意味着整体模型变得复杂,容易发生过拟合;K值的增大就意味着整体的模型变得简单;K=N,则完全不足取,因为此时无论输入实例是什么,都只是简单的预测,它属于在训练实例中最多的类,模型过于简单,忽略了训练实例中大量有用信息。针对K的取值,数据挖掘领域通常使用交叉验证方法来选择最优的K值。3)专用性不强,对特定的分类任务没有很好地优化。

在KNN简单算法中,对于每一个待测样本点,都要逐一地计算其与对整个样本集中的每一个点的距离,计算并存储好以后,再查找K近邻。KD树是一种分割K维数据空间的数据结构,有助于减少存储空间和计算量。即对样本集进行组织与整理,分群分层,尽可能将计算压缩到在接近测试样本邻域的小范围内,避免盲目地与训练样本集中每个样本进行距离计算。

本文提出了一种基于属性权重的KD树 KNN,将属性对距离的影响根据任务的类型分配权重,比如测试数据在和类型不同的训练数据进行比较,距离公式则成为加权欧拉公式。1/sk为每一个属性的权重。

因为云平台的任务类型固定,所以本文采用按任务类型建立不同权重KNN分类器,并且采用交叉验证寻找每个分类器权重大小,避免了KNN简单算法中的K值选择问题,选择出最优K值,并根据分类器的数量N决定分类器K值大小。然后将每个分类器选出的数据输入到距离排序器中,因为每个分类器所使用的距离公式统一,所以将排序器从小到大顺序排列,选取前K个数据进行选举,最终获得未知任务的类型。伪代码如下:

预处理数据,将类型不同的数据分开

调整每个类型中每个属性参数r[N][M]

FOR 0→N:

建立KD树

根据属性参数调整值

归一化处理

将训练数据加入KD树中

建成N个KD树的分类器

For 0→L组测试数据:

For 0→N组分类器:

根据属性参数调整测试数据

归一化处理测试数据

找出前B个最近距离列表D[B]

合并N个D[B]列表

筛选出前K个距离最小的值

根据前K个值进行选举,得到该测试数据的类型根据L组数据类型进行选举,得到该任务类型

所有基于KNN的算法的分类器,都不需要训练集进行训练,所以训练的时间复杂度是0,假设该训练集数为n。

简单KNN算法 KNN分类的计算复杂度和训练集中的文档数目成正比,也就是说简单KNN的分类时间复杂度为O(n)。

KD树 KNN算法 采用了 KD树的时间复杂度为O(lb n)。

多KD树 KNN算法 因为将n划分为m类,所以该时间负载度应该为O(lb n/m)。

3.3 验证实验

本文实验采用的测试节点机器,硬件环境为4个双核英特尔 CPU,主频为1.8 GHz,16 GB 内存,160 GB 硬盘。

本文分别采用Lbenchmark和Ganglia的数据作为训练数据,并且分别使用该训练数据的80%作为测试数据,对简单KNN算法、KD 树 KNN算法、加权衡的多KD树 KNN算法进行比较,结果如图4~5所示。

从图4可以看出,多KD树的权值可配置的KNN算法准确度明显高于KD 树 KNN算法。从图5可以看出,简单KNN的时间负载极高,单线程下KD 树 KNN算法和多KD树KNN算法的时间复杂度相近。多KD树可以采用多线程机制加速,进一步减少运行时间。

图4 不同算法的准确度比较Fig.4 Accuracy comparison of different algorithms

图5 不同算法的运行时间比较Fig.5 Running time comparison of different algorithms

4 数据特征映射

通过对比大部分云平台上的输入参数,用户主要的选择参数向量如下:

其中:CV表示CPU类型;CNV表示核数;MV表示内存类型;MNV表示内存大小;DV表示磁盘类型;DNV表示磁盘大小;NV表示网络带宽;IOV表示是否进行网络优化。

根据获取的(F,M,U,D,S,N)六维采集向量和任务类型综合考虑,给出用户选择参数向量,所以本文提供了不同服务器到虚拟机的映射方法,如下所示。

#有关CPU的信息

查询或计算该云计算平台不同CPU数组L[n],计算能力升序数组 F[n]

WHLIE TRUE:

查找出云平台上CPU核数np* 计算能力F[i]略小于F的值。退

出循环

Cv=L[i]

CNv=np

#有关内存

MNv=M*U

#有关网络

Nv=N

#有关磁盘

DNv=D

FOR PS in磁盘类型列表:

查找出PS的IOPS略小于S的值。退出循环

Dv=PS

#有关任务

IF类型为CPU密集型负载:

CPU类型升级Cv=L[i+1]

ELIF类型为内存密集型负载:

内存类型升级Mv=K[1]

ELIF类型为计算密集型负载:

内存类型升级Mv=K[1]

CPU类型升级Cv=L[i+1]

ELIF类型为网络密集型负载:

IOv=TRUE

ELIF类型为磁盘密集型负载:

磁盘类型升级Dv=PS+1

ELIF类型为全负载密集型负载:

磁盘类型升级Dv=PS+1

IOv=TRUE

内存类型升级Mv=K[1]

CPU类型升级Cv=L[i+1]

5 结语

本文给出能体现任务的数据特征向量,并根据其硬件特征对任务进行细粒度划分。使用轻量级的采集工具Lbenchmark采集所需要硬件数据特征,采用简单的多KD树KNN算法,对未知任务类型进行准确分类。与现有的KNN算法相比,本文提出可以主动调整参数的方法来提高预测类型的准确性。实验结果表示Lbenchmark可以比较全方面地以较低的负载波动获取到任务的数据特征。使用该特征和属性可调的多KD树KNN算法进行分类,准确度得到了有效提高,计算量和存储量相对减少。之后,利用数据特征映射将资源建议提供给用户和云提供商,进而提高云平台整体的利用率。

在今后的研究中,将在该文的基础之上对云平台内部调度进行更加深入的研究。将任务信息和任务类型与不同的调度算法结合,以达到全局能耗最低。

猜你喜欢

密集型磁盘内存
湖北省专利密集型产业研究
密集型呼吸灯灯串设计与实现
它的好 它的坏 详解动态磁盘
创建虚拟机磁盘方式的选择
解决Windows磁盘签名冲突
笔记本内存已经在涨价了,但幅度不大,升级扩容无须等待
“春夏秋冬”的内存
加快推动知识产权密集型产业发展的思考
Windows系统下动态磁盘卷的分析与研究
散叶堆积烘烤技术对烤烟综合效益的影响