柳春懿,張 曉,覃源淞,蘆尚奇
(西北工業(yè)大學計算機學院,西安710029)(*通信作者電子郵箱18729580703@163.com)
隨著云計算技術(shù)的發(fā)展,云計算依靠自身優(yōu)秀的性能、靈活的擴展性、低廉的價格吸引著國內(nèi)外企業(yè)將自身的業(yè)務遷移到云上。在各方共同努力下,云生態(tài)圈越來越完善,企業(yè)轉(zhuǎn)型到云上也成為了不可逆轉(zhuǎn)的潮流。然而根據(jù)Reiss等[1]于2012年提出的研究成果可知,谷歌數(shù)據(jù)中心的資源利用率竟然低于50%。作為全球優(yōu)秀的云計算提供商,不缺乏優(yōu)秀的調(diào)度算法,依然沒有很好地解決利用率低下的問題。主要原因是隨著云上企業(yè)數(shù)量上的增長,企業(yè)的任務種類也在不斷增加。復雜的任務種類和性能特征導致用戶資源的申請選擇困難,如果申請的虛擬機硬件性能太高會造成資源的浪費;反之性能太低會造成不能滿足企業(yè)的基本需求,降低任務的服務質(zhì)量。若資源利用率較低的情況下,會導致運營成本增加,浪費現(xiàn)有資源。但是現(xiàn)階段大部分企業(yè)在沒有很好的指導情況下,為了保證服務質(zhì)量,都會過多地申請資源[2]。
現(xiàn)有的指導手段主要是通過用戶手動填入應用相應信息。例如阿里云服務,會讓填寫需求類型、心理價位、需求描述、行業(yè)領(lǐng)域等,這對一般的用戶,尤其是非專業(yè)用戶而言,無疑是個困難的操作。另外,有些企業(yè)會找專業(yè)人士來分析任務需求,一般專業(yè)人士的專家費是一筆不小的開銷。這樣簡單的描述并不能準確地描述任務類型和任務需求,分配的資源也達不到按需分配目的,所以亟需一種獲取應用性能信息的分析方法:一方面為用戶提供一套準確的按需分配解決方案,另一方面將信息給云提供商以更準確地分配硬件資源,達到節(jié)省資源的目標。
與傳統(tǒng)的任務遷移相比,企業(yè)任務遷移存在以下問題:
1)大部分的企業(yè)的任務運行在物理機上,如何準確全面采集任務在物理機上的有用信息。
2)不同機器配置所表現(xiàn)出來的性能特征會有所差異,例如Intel i7和Intel i3處理器的CPU在同等利用率情況下,處理能力差距巨大。除此之外,統(tǒng)一物理機上的虛擬機之間會互相影響,如何用最少的性能特征完整地描述任務。多維度的資源需求將會增加描述任務的難度。
3)根據(jù)所獲取的任務性能特征信息,如何細分該任務類型,以此為基礎(chǔ)分配相應的資源,一方面提供給用戶進行選擇,另一方面提供給云提供商進行全局資源調(diào)度。
已經(jīng)有很多文獻提出了應用性能分類的方法:其中文獻[3]中對用戶的源碼進行分類,利用浮點運算關(guān)系分析程序的復雜度,鑒于云平臺下用戶安全性,源碼通常不可獲得;文獻[4]中根據(jù)網(wǎng)絡服務響應時間,通過基于分析模型的排隊理論分析;在此基礎(chǔ)之上,文獻[5]中提出了多類排序預測在線虛擬機工作負載響應時間和吞吐量。針對云環(huán)境下資源需求預測許多研究學者分別利用回歸模型[6]、時間序列分析[7]、基于狀態(tài)分析[8]、機器學習模型[9]、模式匹配[10]等方法研究上。這些方法都是基于預測機制,因為運行時間短,預測準確度難以保障。除此之外,文獻[11]中采用決策樹的軟件分類方法,但是只是針對CPU和內(nèi)存進行粗粒度分類;文獻[12]中比較全面地提出許多任務類型,但是劃分方法過于簡單;文獻[13]中基于利用率特征分析,并沒有全面地進行描述任務特征。
針對以上問題,本文提出了任務性能的最小參數(shù)集合,從計算、網(wǎng)絡、硬盤三個大方面,全方位更細粒度地描述任務。并利用開發(fā)的低負載的性能采集工具采集該任務性能,將采集的性能映射到云上性能。根據(jù)采集的性能參數(shù),利用奧姆剃須刀原理,即實際應用中,模型越簡單越高效[14]。使用權(quán)重可配的多KD(K-Dimension)樹 KNN(K-Nearest Neighbors)算法,詳細劃分任務類型。使用KD樹減少存儲量和計算量[15],使用交叉驗證方法提高準確度[16]。最后結(jié)合云上性能屬性和任務類型,給用戶提供虛擬機配置的詳細信息,給云提供商提供任務性能相關(guān)的詳細信息。
服務性能 QoS(Quality of Service)指標通常使用 SLA(Service Level Agreement)協(xié)議來描述,為了滿足SLA協(xié)議相關(guān)內(nèi)容,單獨考慮某一個硬件的性能達標是不準確的。通過預測的方法得到的性能屬性只適應在同一云環(huán)境下進行[17],并且數(shù)據(jù)準確性不高。本文使用歷史數(shù)據(jù)判斷遷移所需配置和任務類型,既能準確根據(jù)實際使用情況給用戶提供虛擬機選擇方案,又能根據(jù)任務種類和表現(xiàn)出來的性能特征為云提供商分配方案作參考。具體如圖1所示。
本文根據(jù)云計算提供的服務將資源分為計算、存儲、網(wǎng)絡資源,并且有該三大資源引申出具體可測量的硬件特征,即計算表現(xiàn)硬件特征為CPU和內(nèi)存;存儲表現(xiàn)為硬盤和讀寫I/O;網(wǎng)絡表現(xiàn)為網(wǎng)絡拓撲和網(wǎng)絡帶寬。這些硬件特征不能很好得到控制和測量,所以根據(jù)實際需求本文提出了任務數(shù)據(jù)特征,并且建立性能向量。根據(jù)所選的數(shù)據(jù)特征通過模型映射到云平臺上,提供虛擬機的配置信息。除此之外,將這些數(shù)據(jù)特征輸入到用基準測試數(shù)據(jù)的訓練集中,細粒度劃分任務類型。最終,給用戶提供資源申請建議同時給云提供商提供虛擬機分配調(diào)度建議。
圖1 邏輯框架Fig.1 Logical framework
想要全面準確地描述任務信息,最為直觀和重要的就是任務的性能數(shù)據(jù)特征,硬件的性能數(shù)據(jù)特征包含了描述任務的各種信息。
有很多性能特征可以來描述這個任務,如果參數(shù)選擇不準確,那么將不能準確描述任務;如果參數(shù)選擇過少,那么不能全面地描述任務;如果參數(shù)選擇過多,那么將增大采集工具的負載,使得數(shù)據(jù)不準確。所以在性能特征選擇上,本文認為應該注意以下幾點:1)所選的數(shù)據(jù)特征應該可以全方面地描述負載情況,并且必須是容易觀察和控制;2)所選的硬件參數(shù)必須可以通過云平臺動態(tài)配置;3)應該需要確立能夠捕捉任務性能的最小參數(shù)集合;4)考慮任務的服務質(zhì)量是由CPU、內(nèi)存等多維因素共同決定的,并不和某一個單維度的資源成特定的關(guān)系。
根據(jù)阿里云服務,資源分為基礎(chǔ)資源和額外附加資源?;A(chǔ)資源分為實例信息、磁盤信息、網(wǎng)絡資源選擇。實例信息選擇包括CPU核數(shù)、內(nèi)存大小、I/O是否優(yōu)化。磁盤信息選擇包括系統(tǒng)盤和數(shù)據(jù)盤選擇、磁盤大小、磁盤類型(普通云盤、高效云盤、SSD云盤和本地SSD磁盤)。網(wǎng)絡資源選擇包括包月或按量類型、寬帶規(guī)格等。額外附加資源包括對象存儲、云數(shù)據(jù)庫、安全網(wǎng)絡等。本文僅針對基礎(chǔ)資源中的計算、磁盤、網(wǎng)絡分別進行數(shù)據(jù)特征提取和描述:
1)計算資源。CPU的運算能力不但CPU利用率有關(guān),而且和CPU的類型、主頻、外頻、高速緩存等相關(guān)。本文直接利用CPU的服務質(zhì)量表示所需要的速度,如FLOPS(Floating-Point Operations Per Second),或?qū)撛诘腃PU性能的利用。阿里云采用的是 Intel Xeon E5-2420 CPU,主頻1.9 GHz,啟用了超線程。本文在阿里云的虛擬機進行了測試,使用LINX工具針對操作系統(tǒng)為WindowsServer 2012版本不同核數(shù)CPU進行測試。計算規(guī)模為10 000,重復次數(shù)為5,得到了該平臺所給的 1核、2核、4核平均 GFLOPS分別為 21.503 6、41.5510、85.5912,并且方差分別為 0.426、0.201、0.107,由此可以驗證虛擬機的FLOPS隨著核數(shù)的增加穩(wěn)定線性地增加。
2)存儲資源。根據(jù)中國信息化周報統(tǒng)計,阿里SSD云盤可以提供15 000的IOPS(Input/Output Operations Per Second),高效云盤IOPS為3000,而普通云磁盤讀的IOPS大約為800,寫的大約為400。
3)網(wǎng)絡資源。阿里云提供總網(wǎng)絡帶寬大小選擇。
本模型使用 (F,M,U,D,S,N)六維向量來描述任務的整體運行情況。其中:F表示CPU的浮點運行能力作為虛擬機和物理機的統(tǒng)一標準,M表示內(nèi)存總量,U表示內(nèi)存使用率,D表示磁盤大小,S表示磁盤的讀寫速度,N表示網(wǎng)絡帶寬。針對以上六維性能向量進行數(shù)據(jù)采集,若使用成熟工具Ganglia等,會存在如磁盤讀寫信息不能獲取等問題。大部分工具都是只對一方面數(shù)據(jù)參數(shù)進行采集,不滿足全面描述的需求,所以本文實現(xiàn)了Lbenchmark采集工具,將對所需計算、存儲、網(wǎng)絡資源統(tǒng)一采集。
對比分布式信息采集Ganglia,Lbenchmark減少了機群之間的通信,針對特定的應用程序,可以減少信息采集項的個數(shù)[18],降低信息采集頻率[19],進而降低整體監(jiān)控的負載。
該工具通過UI(User Interface)和用戶交互,內(nèi)部控制模塊提供對外接口。在不同的節(jié)點上部署采集工具,采集數(shù)據(jù)并分析處理。該分布式采集工具邏輯框架如圖2所示。
圖2 采集工具模塊Fig.2 Collection tool module
為了對比Ganglia監(jiān)控系統(tǒng)和Lbenchmark系統(tǒng)產(chǎn)生負載對機器的影響,使用CPU占用時間作為測試的指標,利用top工具可以查看到進程所占用的CPU時間長度,分別在機器上做無監(jiān)控系統(tǒng)、有Lbenchmark監(jiān)控和有Ganglia監(jiān)控的負載情況測試,得出的測試結(jié)果如圖3所示。
從圖3可以看出,Lbenchmark采集工具占用的CPU時間相對較短,可以低負載地運行采集工具,進而減少采集工具對任務的影響。
圖3 CPU占用時間比較Fig.3 Comparison of CPU occupancy time
傳統(tǒng)提高利用率的方法為調(diào)度,但是現(xiàn)在的云資源調(diào)度基本上都是對臨時的狀態(tài)信息作出調(diào)度策略。為了得到最優(yōu)的有效調(diào)度策略,已知任務的類型和資源需求是必不可少的,本文針對已知任務使用特定的負載生成工具進行負載任務特征收集,在任務遷移之前,提供任務特征。
根據(jù)任務的性能不同,本文細分任務類型,將傳統(tǒng)的粗粒度劃分機制,即計算、存儲、網(wǎng)絡更詳細地劃分。首先根據(jù)負載的時間變化,分為密集型和隨機型。密集型指即在一定長時間內(nèi)硬件都處在高負載狀態(tài)下;隨機型是指硬件的負載在一定長時間情況隨機,例如Web應用任務。針對硬件不同可將任務細分為以下類型:1)CPU密集型;2)硬盤密集型;3)內(nèi)存密集型;4)計算密集型(CPU+內(nèi)存);5)I/O密集型;6)全負載密集型。
本文將標準負載生成工具和Linux基礎(chǔ)命令作為訓練任務,在測試服務器上運行得到性能數(shù)據(jù)特征,利用KNN算法建立歷史數(shù)據(jù)的訓練集。所選用負載生成工具如表1所示。
表1 Benchmark用例Tab.1 Benchmark templates
本文針對數(shù)量巨大且分類清晰的訓練數(shù)據(jù),采用基于屬性權(quán)重的KD 樹 KNN優(yōu)化算法。K近鄰模型的特征空間一般是n維實數(shù)向量空間,使用的距離一般使用歐氏距離來表示:
KNN簡單算法存在問題有:1)計算量和存儲量巨大。2)K值選擇問題,K值的減小就意味著整體模型變得復雜,容易發(fā)生過擬合;K值的增大就意味著整體的模型變得簡單;K=N,則完全不足取,因為此時無論輸入實例是什么,都只是簡單的預測,它屬于在訓練實例中最多的類,模型過于簡單,忽略了訓練實例中大量有用信息。針對K的取值,數(shù)據(jù)挖掘領(lǐng)域通常使用交叉驗證方法來選擇最優(yōu)的K值。3)專用性不強,對特定的分類任務沒有很好地優(yōu)化。
在KNN簡單算法中,對于每一個待測樣本點,都要逐一地計算其與對整個樣本集中的每一個點的距離,計算并存儲好以后,再查找K近鄰。KD樹是一種分割K維數(shù)據(jù)空間的數(shù)據(jù)結(jié)構(gòu),有助于減少存儲空間和計算量。即對樣本集進行組織與整理,分群分層,盡可能將計算壓縮到在接近測試樣本鄰域的小范圍內(nèi),避免盲目地與訓練樣本集中每個樣本進行距離計算。
本文提出了一種基于屬性權(quán)重的KD樹 KNN,將屬性對距離的影響根據(jù)任務的類型分配權(quán)重,比如測試數(shù)據(jù)在和類型不同的訓練數(shù)據(jù)進行比較,距離公式則成為加權(quán)歐拉公式。1/sk為每一個屬性的權(quán)重。
因為云平臺的任務類型固定,所以本文采用按任務類型建立不同權(quán)重KNN分類器,并且采用交叉驗證尋找每個分類器權(quán)重大小,避免了KNN簡單算法中的K值選擇問題,選擇出最優(yōu)K值,并根據(jù)分類器的數(shù)量N決定分類器K值大小。然后將每個分類器選出的數(shù)據(jù)輸入到距離排序器中,因為每個分類器所使用的距離公式統(tǒng)一,所以將排序器從小到大順序排列,選取前K個數(shù)據(jù)進行選舉,最終獲得未知任務的類型。偽代碼如下:
預處理數(shù)據(jù),將類型不同的數(shù)據(jù)分開
調(diào)整每個類型中每個屬性參數(shù)r[N][M]
FOR 0→N:
建立KD樹
根據(jù)屬性參數(shù)調(diào)整值
歸一化處理
將訓練數(shù)據(jù)加入KD樹中
建成N個KD樹的分類器
For 0→L組測試數(shù)據(jù):
For 0→N組分類器:
根據(jù)屬性參數(shù)調(diào)整測試數(shù)據(jù)
歸一化處理測試數(shù)據(jù)
找出前B個最近距離列表D[B]
合并N個D[B]列表
篩選出前K個距離最小的值
根據(jù)前K個值進行選舉,得到該測試數(shù)據(jù)的類型根據(jù)L組數(shù)據(jù)類型進行選舉,得到該任務類型
所有基于KNN的算法的分類器,都不需要訓練集進行訓練,所以訓練的時間復雜度是0,假設該訓練集數(shù)為n。
簡單KNN算法 KNN分類的計算復雜度和訓練集中的文檔數(shù)目成正比,也就是說簡單KNN的分類時間復雜度為O(n)。
KD樹 KNN算法 采用了 KD樹的時間復雜度為O(lb n)。
多KD樹 KNN算法 因為將n劃分為m類,所以該時間負載度應該為O(lb n/m)。
本文實驗采用的測試節(jié)點機器,硬件環(huán)境為4個雙核英特爾 CPU,主頻為1.8 GHz,16 GB 內(nèi)存,160 GB 硬盤。
本文分別采用Lbenchmark和Ganglia的數(shù)據(jù)作為訓練數(shù)據(jù),并且分別使用該訓練數(shù)據(jù)的80%作為測試數(shù)據(jù),對簡單KNN算法、KD 樹 KNN算法、加權(quán)衡的多KD樹 KNN算法進行比較,結(jié)果如圖4~5所示。
從圖4可以看出,多KD樹的權(quán)值可配置的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
通過對比大部分云平臺上的輸入?yún)?shù),用戶主要的選擇參數(shù)向量如下:
其中:CV表示CPU類型;CNV表示核數(shù);MV表示內(nèi)存類型;MNV表示內(nèi)存大小;DV表示磁盤類型;DNV表示磁盤大小;NV表示網(wǎng)絡帶寬;IOV表示是否進行網(wǎng)絡優(yōu)化。
根據(jù)獲取的(F,M,U,D,S,N)六維采集向量和任務類型綜合考慮,給出用戶選擇參數(shù)向量,所以本文提供了不同服務器到虛擬機的映射方法,如下所示。
#有關(guān)CPU的信息
查詢或計算該云計算平臺不同CPU數(shù)組L[n],計算能力升序數(shù)組 F[n]
WHLIE TRUE:
查找出云平臺上CPU核數(shù)np* 計算能力F[i]略小于F的值。退
出循環(huán)
Cv=L[i]
CNv=np
#有關(guān)內(nèi)存
MNv=M*U
#有關(guān)網(wǎng)絡
Nv=N
#有關(guān)磁盤
DNv=D
FOR PS in磁盤類型列表:
查找出PS的IOPS略小于S的值。退出循環(huán)
Dv=PS
#有關(guān)任務
IF類型為CPU密集型負載:
CPU類型升級Cv=L[i+1]
ELIF類型為內(nèi)存密集型負載:
內(nèi)存類型升級Mv=K[1]
ELIF類型為計算密集型負載:
內(nèi)存類型升級Mv=K[1]
CPU類型升級Cv=L[i+1]
ELIF類型為網(wǎng)絡密集型負載:
IOv=TRUE
ELIF類型為磁盤密集型負載:
磁盤類型升級Dv=PS+1
ELIF類型為全負載密集型負載:
磁盤類型升級Dv=PS+1
IOv=TRUE
內(nèi)存類型升級Mv=K[1]
CPU類型升級Cv=L[i+1]
本文給出能體現(xiàn)任務的數(shù)據(jù)特征向量,并根據(jù)其硬件特征對任務進行細粒度劃分。使用輕量級的采集工具Lbenchmark采集所需要硬件數(shù)據(jù)特征,采用簡單的多KD樹KNN算法,對未知任務類型進行準確分類。與現(xiàn)有的KNN算法相比,本文提出可以主動調(diào)整參數(shù)的方法來提高預測類型的準確性。實驗結(jié)果表示Lbenchmark可以比較全方面地以較低的負載波動獲取到任務的數(shù)據(jù)特征。使用該特征和屬性可調(diào)的多KD樹KNN算法進行分類,準確度得到了有效提高,計算量和存儲量相對減少。之后,利用數(shù)據(jù)特征映射將資源建議提供給用戶和云提供商,進而提高云平臺整體的利用率。
在今后的研究中,將在該文的基礎(chǔ)之上對云平臺內(nèi)部調(diào)度進行更加深入的研究。將任務信息和任務類型與不同的調(diào)度算法結(jié)合,以達到全局能耗最低。