孫 斌,呂依蓉,王 晶,喻之斌,張偉功
1(首都師范大學 信息工程學院, 北京 100048)2(中科院深圳先進技術研究院 云計算中心, 深圳 518055)
隨著云計算技術的發(fā)展,越來越多的應用服務運行在云平臺上.因此,數(shù)據(jù)中心的規(guī)模和數(shù)量正以前所未有的速度增長.例如,倉庫級計算機(Warehouse Scale Computer)越來越普遍.然而,大規(guī)模的云計算基礎設施對運維造成了嚴峻挑戰(zhàn),需要新的監(jiān)控與運維技術[1].當前數(shù)據(jù)中心所呈現(xiàn)出應用多樣化和硬件平臺異構[2]兩個特點加大了性能監(jiān)控和優(yōu)化的難度,使得云環(huán)境下的性能監(jiān)控變得尤為重要.和系統(tǒng)層的性能監(jiān)控相比[3,4],如利用CPU利用率、內(nèi)存利用率、以及磁盤利用率等,PMU(Performance Monitoring Unit)下硬件性能事件的計數(shù)結果能夠更細粒度、更直接地反映機器的實際運行狀況[2,5].
現(xiàn)代處理器中一般有2~8個性能計數(shù)器(寄存器),用來記錄處理器在運行時發(fā)生的硬件事件,如內(nèi)存訪問次數(shù)、高速緩存的缺失次數(shù)等[6,7].為了節(jié)約芯片面積乃至成本,處理器中不能設計更多的性能計數(shù)器.為了深入理解程序的運行行為和優(yōu)化性能,需要監(jiān)測的事件數(shù)目卻遠遠大于性能計數(shù)器的數(shù)目,而且仍在呈增長趨勢[6,7].
由于數(shù)據(jù)中心中微量的性能提升都可以轉(zhuǎn)化成巨大的成本節(jié)約,許多研究人員在研究如何利用PMU的監(jiān)測結果來優(yōu)化性能[2,5,8,9].從需要監(jiān)測的性能事件到性能計數(shù)器之間的映射有兩種方式:
1) 監(jiān)測的性能事件數(shù)目小于或等于計數(shù)器個數(shù);
2) 監(jiān)測的性能事件數(shù)目多于計數(shù)器個數(shù).
第一種方式可獲得準確的監(jiān)測結果[10],但受限于性能技術器的個數(shù)以及實際需求,需要進行多次重復實驗才能得到所需全部事件的結果,因此,這種方式效率很低.此外,如圖1所示,在云環(huán)境下同一程序多次運行的執(zhí)行時間會有較大波動,得到不等長的時間序列結果,大大提高了后續(xù)分析難度.第二
圖1 相同程序多次采集結果時間序列比較Fig.1 Compare the multi-result of sampling
種方式可以極大地提升監(jiān)測效率,在一般需求下[2,5]可避免重復監(jiān)測工作.然而,此方法會降低監(jiān)測數(shù)據(jù)的測數(shù)據(jù)質(zhì)量,如數(shù)據(jù)缺失,表現(xiàn)為未能有效監(jiān)測到已發(fā)生事件而產(chǎn)生的零值,再如數(shù)據(jù)異常,表現(xiàn)為時序中存在突然數(shù)據(jù)增大的時刻,與同組中其他數(shù)據(jù)的偏差超過多倍標準差.而且監(jiān)測事件數(shù)目越多數(shù)據(jù)質(zhì)量越低[10,11-13].為了既能提高監(jiān)測效率,又能提高監(jiān)測數(shù)據(jù)的質(zhì)量,對第二種方式中所存在的問題進行改進刻不容緩.考慮到服務器中處理器架構的不同,軟件計算框架的差異以及應用本身的不同,本文提出基于知識庫的數(shù)據(jù)預處理方法,來應對不同情況下的缺失值和異常值.
圖2 Perf_events 子系統(tǒng)架構圖Fig.2 Perf_events architecture
對于缺失值,根據(jù)知識庫內(nèi)相似監(jiān)測任務下的數(shù)據(jù),即對相同的運行環(huán)境,相同計算框架下應用的監(jiān)測任務,監(jiān)測事件可以不同但要包含缺失值所對應的事件,并結合當前監(jiān)測數(shù)據(jù)中的未缺失項,構建回歸模型,補全缺失數(shù)據(jù).
對于異常值,根據(jù)知識庫內(nèi)的相似監(jiān)測任務的監(jiān)測數(shù)據(jù),配置局部濾波器參數(shù),使得濾波器可以自適應的檢測不同事件結果中的異常值,并對其處理.
本文所提出的數(shù)據(jù)預處理方法,可以在提升2-5倍監(jiān)測效率的同時極大地提升數(shù)據(jù)質(zhì)量.
現(xiàn)代處理器中一般都配有性能監(jiān)測單元(PMU),它由兩部分組成:硬件性能事件和性能計數(shù)器.性能計數(shù)器用來測量微體系結構中如程序執(zhí)行所消耗的時鐘周期數(shù),指令數(shù)和高速緩存缺失數(shù)等硬件性能事件[6,7],其結果可直接反應程序執(zhí)行過程中硬件的執(zhí)行情況,從而可分析程序?qū)τ布Y源的使用情況.PMU的監(jiān)測結果具有廣泛的應用場景,如科學應用程序的性能建模[14,15]、生產(chǎn)環(huán)境中程序行為的異常檢測以及診斷[9,16,17]、安全漏洞監(jiān)測、編譯過程中的配置優(yōu)化、以及功耗優(yōu)化模型.此外,它對未來的硬件設計工作也有極大的幫助,比如在監(jiān)測Google數(shù)據(jù)中心應用過程中發(fā)現(xiàn)指令地址轉(zhuǎn)換檢測緩沖缺失(iTLB MISS)比較大[2],則未來可以考慮為云環(huán)境下的硬件設計增加iTLB的大小.
2.1.1 PMU的硬件結構
現(xiàn)代處理器中一般有2~8個性能計數(shù)器(寄存器).如Intel Xeon E5 v3系列處理器是基于Haswell-E的微體系結構生產(chǎn)的,它配備2個專用的性能計數(shù)器和4個通用的性能計數(shù)器,可監(jiān)測事件超過200個[6].其中專用的性能計數(shù)器只能分別監(jiān)測未被停頓的時鐘周期數(shù)(Unhalted Cycles)和成功被執(zhí)行的指令數(shù)(Instruction Retired)這兩個事件,通用計數(shù)器可配置監(jiān)測其余所有事件.性能計 數(shù)器本質(zhì)上是一個特殊寄存器(MSR),用來記錄某事件的發(fā)生次數(shù).不同系列的處理器所擁有的性能計數(shù)器個數(shù)是不同的,而且所能支持監(jiān)測的硬件事件種類也不盡相同,但共同點在于所有的處理器結構中性能計數(shù)器個數(shù)要遠小于可監(jiān)測的事件數(shù).
圖3 結果中缺失值(a)和異常值(b)的示意圖
Fig.3 Pattern of missing values(a) and outliers (b)
圖4 監(jiān)測ICACHE.MISSES缺失部分與參考值的比較
Fig.4 Compare the missing part and reference data of the sampling data of the ICACHE.MISSES
2.1.2 應用PMU
在Linux操作系統(tǒng)中,Perf_events1內(nèi)核接口作為一個通用、高層級的接口來驅(qū)使性能計數(shù)器完成監(jiān)測任務,而且在Linux 2.6.31之后便被添加到了官方的內(nèi)核之中.監(jiān)測系統(tǒng)架構如圖2所示,Perf_event_open( )是一個系統(tǒng)調(diào)用,sysfs是一個文件系統(tǒng),用來簡化事件命名以及工具配置,中間層則包括通用的核心計算邏輯設計以及應對不同處理器架構的通用接口層設計.
目前,Perf1和Oprofile2是較為流行的性能監(jiān)測工具,都調(diào)用了Perf_events (接口).在應用中只需提前傳遞待測事件即可.事件的調(diào)度貫穿整個監(jiān)測過程,包括綁定計數(shù)器和通過觸發(fā)機制輸出記錄結果,當待測事件數(shù)量多于實際計數(shù)器數(shù)量時,內(nèi)核通過時分復用計數(shù)器來保證每一個待測事件都有機會被監(jiān)測到.在復用過程中會采取輪詢的方式并假設事件的發(fā)生速率是相同的.事件結果的計算方式如公式(1),按照事件被分配到的比例以及計數(shù)值推測整個時間段內(nèi)的計數(shù)結果.
(1)
事件調(diào)度能保證最大限度地利用計數(shù)器,盡量減少復用帶來的開銷,但不能保證監(jiān)測結果的準確性.而且部分事件有特定的計數(shù)器限制,容易造成事件調(diào)度過程中的事件沖突[6],加劇了監(jiān)測結果種的不準確性.
表1 參考記錄和復用PMU時記錄的數(shù)據(jù)比較Table 1 comparing reference data and the data sampling with multiplex PMU
如在2.1中所提到的,性能監(jiān)測單元為程序特征描述所帶來的作用無可替代.許多性能優(yōu)化工作以此為根據(jù),在云環(huán)境下的程序特征描述和性能優(yōu)化工作中都取得了明顯的效果[2,5,8,17].然而這些工作在應用基于PMU的監(jiān)測工具時,受到性能計數(shù)器個數(shù)的限制,為保證監(jiān)測結果的準確率都采用了相對保守的監(jiān)測手段,即每一次監(jiān)測事件時保證所監(jiān)測的事件數(shù)不大于性能計數(shù)器個數(shù).這種方式雖然能保證監(jiān)測結果的準確性[10],但需要通過重復運行的方式來獲得更多的監(jiān)測結果,大大降低了監(jiān)測效率.
硬件性能事件結果與性能之間的語義鴻溝一直是研究的難點,尤其要在繁多的事件中有針對地選擇出一部分參與監(jiān)測更是極具挑戰(zhàn)[16],極端情況下需要所有事件的監(jiān)測結果,這只能通過重復運行的方式遍歷監(jiān)測所有事件.如果實驗環(huán)境中的處理器是上述的Intel Xeon E5 v3系列,需要以4個性能計數(shù)器、2個專用計數(shù)器來應對超過200個事件,則重復運行次數(shù)超過50次.而且在重復運行監(jiān)測的結果中還會遇到相同程序不同次運行執(zhí)行時間不等長的問題.例如,在云環(huán)境下同時分發(fā)多個任務,執(zhí)行時間取決于最后一個執(zhí)行完的任務.圖1是對相同程序重復監(jiān)測下多個不等長的時間序列的示意圖,而且本文實驗的基準測試程序HiBench[18]中的同一應用程序的執(zhí)行時間表現(xiàn)出了3.3%-16.4%的波動.
一些學者的工作聚焦于提升復用性能計數(shù)器復用(multiplexing)情況下的監(jiān)測準確率.比如通過量化錯誤來改進公式1,以獲得較高的準確率[12].也有學者通過事件的變化率來改進公式1[13]以及通過改進調(diào)度方式來提高準確率[11]等.這些研究確實緩解了PMU在應用中的問題,然而在實際應用中仍有監(jiān)測結果過調(diào)節(jié)(異常值)以及缺失監(jiān)測結果的現(xiàn)象存在,圖3(a)和圖3(b)分別是時間序列中異常值和缺失值得示意圖.實驗結果表明,雖然異常值與缺失值的數(shù)量在全部數(shù)據(jù)中不超過1%,但它們對時間序列的特征描述造成了很大影響.例如,對時間序列正則化和方差計算帶來巨大的偏差,而且由于硬件事件的計數(shù)結果一般沒有嚴格的值域范圍,難以界定缺失異常的閾值.通過反復監(jiān)測Wordcount運行時ICACHE.MISSES事件的表現(xiàn),在復用和不要復用硬件計數(shù)器的情況下,監(jiān)測結果得出了不同的數(shù)據(jù)描述,如表1中Reference(1-4)是在不復用性能計數(shù)器時的數(shù)據(jù)描述,Test則是在復用性能計數(shù)器是而得到的數(shù)據(jù)描述,圖4是對ICACHE.MISSES這個事件在復用性能計數(shù)器和不復用性能計數(shù)器下的時間序列(這里只比較了缺失部分的數(shù)據(jù))比較.而且根據(jù)表1可知,借助參考記錄可判別0值數(shù)據(jù)即為缺失記錄.
為了提高PMU的監(jiān)測效率,并保證監(jiān)測數(shù)據(jù)的質(zhì)量,提出一種基于知識庫的預處理方法,如圖5所示.每一次的監(jiān)測結果都會結合歷史監(jiān)測數(shù)據(jù)來完成異常值和缺失值檢測,并以他們?yōu)閰⒖紒硖鎿Q異常值以及補充缺失值.這里所提到的歷史監(jiān)測數(shù)據(jù)主要指利用相同事件監(jiān)測同一應用所產(chǎn)生的監(jiān)測數(shù)據(jù).對于異常值:本文設計了一個自適應的局部濾波器,自動判斷異常值并對其進行處理.對于缺失值:將結合歷史數(shù)據(jù)以及當前數(shù)據(jù)中未缺失部分構建回歸模型,并利用該模型補充缺失值.
圖5 預處理方法示意圖Fig.5 Schematic of preprocessing method
如上文所述,由于硬件事件的監(jiān)測結果一般沒有確定的值域,使得對異常值和缺失值的判斷極其困難.而且監(jiān)測數(shù)據(jù)表明異常值和缺失的出現(xiàn)并沒有確定的模式,相同事件在不同應用下的監(jiān)測結果也有區(qū)別,這與程序表現(xiàn)密切相關.本文通過比較不等長序列間的相似性,計算經(jīng)過動態(tài)時間歸準(DTW)之后的曲線間的距離來判斷事件監(jiān)測結果的相似性.DTW是一種通過彎曲時間軸來更好地對時間序列形態(tài)進行匹配的相似性度量方法,被Bernd和Clliford用于度量時間序列的相似性[19].本文以歷史數(shù)據(jù)的結果作為參考來判斷異常和缺失現(xiàn)象.對比相同程序在不同輸入數(shù)據(jù)下的監(jiān)測結果,得到監(jiān)測結果具有較高的相似性.
如圖6所示,HiBench中的大數(shù)據(jù)應用程序在不同的輸入數(shù)據(jù)集下,執(zhí)行時間和平均水平相比有50%到350%的變化.然而在遍歷所有服務器所支持的硬件事件之后,相同事件在不同輸入數(shù)據(jù)集下,多次監(jiān)測結果與參考結果之間的平均DTW距離不超過0.07,說明事件監(jiān)測結果的趨勢、幅度沒有受輸入數(shù)據(jù)集的變化而產(chǎn)生巨大變化,應用歷史數(shù)據(jù)是可以信賴的.
下面分別介紹知識庫的構建方法,局部濾波器設計以及回歸模型的建立方法.
圖6 不同應用在不同輸入下監(jiān)測事件結果的相似性變化Fig.6 Similarity of results in different input data size among different applications
據(jù)記錄表的描述,包含事件名,應用名,記錄時長,記錄最大值,最小值以及平均值,同時記錄其他事件以及記錄所有二級數(shù)據(jù)記錄表的名字.
圖7 兩級表設計Fig.7 2 level sheet in the design of knowledge base
知識庫將隨著監(jiān)測任務的進行不斷更新,包括對有完全相同監(jiān)測事件的監(jiān)測結果進行替換,以及對新監(jiān)測事件的監(jiān)測結果進行添加.
對歷史記錄的查詢,以被監(jiān)測程序和問題事件為查詢條件,返回具有相似監(jiān)測任務的記錄.從一級主表中查找事件的描述信息,再根據(jù)具體需要二次查找特定記錄和當前記錄中的歷史數(shù)據(jù),用于下一步的模型訓練.
局部濾波器設計包括針對兩種情形的設計:
1) 歷史記錄事件:指相同監(jiān)測應用下事件已被記錄.此時利用一級主表中的數(shù)據(jù)描述信息,以其記錄最大值的2倍,作為本地閾值作為判斷異常值的依據(jù),其數(shù)值源自于實驗過程中的經(jīng)驗數(shù)值.
2) 初始記錄事件:從觀察監(jiān)測數(shù)據(jù)的分布可知,數(shù)據(jù)分布曲線類似高斯分布,但不是嚴格的高斯分布.借用高 斯分布的特性,根據(jù)對數(shù)據(jù)的觀察以公式2作為閾值的計算方法,
以均值和n倍標準差的和作為閾值.
List.threshold=List.mean+n*List.std
(2)
表2統(tǒng)計了n取不同值時的所有數(shù)據(jù),n取5時可保證99%以上的數(shù)據(jù)都在閾值范圍內(nèi).將檢測到的異常值利用局部中位值替換的方式進行替換.
2.2 危險因素分析 單因素分析顯示:3~6周歲幼兒近視與平均1天看電視時間有關聯(lián);遠視與母親視力、父親視力、幼兒營養(yǎng)狀況有關聯(lián);散光與父親視力、幼兒營養(yǎng)狀況有關聯(lián);多因素Logistic逐步回歸分析:父親視力是3~6周歲幼兒近視與散光的獨立影響因素,是3~6周歲幼兒遠視的危險因素。父親視力異常則3~6周歲幼兒近視、散光的概率小。幼兒營養(yǎng)狀態(tài)、母親視力是3~6周歲幼兒遠視的保護因素。3~6周歲幼兒營養(yǎng)狀態(tài)越好則遠視的概率越小,父親遠視、散光,增加3~6周歲幼兒遠視的危險。見表2。
表2 n的不同取值所能涵蓋的數(shù)據(jù)范圍Table 2 Compare the scale of threshold with different n
對于缺失值的判斷極具挑戰(zhàn),如圖6所示,監(jiān)測結果的差異度并沒有隨著輸入數(shù)據(jù)集的變化而發(fā)生巨大變化,同時結合圖4和表1的結果表明歷史數(shù)據(jù)可作為缺失值補充的依據(jù).然而歷史記錄中的序列長度與當前缺失項的記錄時長未必相同,難以通過位置信息來補全缺失值,如圖4中的參考數(shù)據(jù)所示.然而利用事件之間的關聯(lián)可快速構造出回歸模型,利用回歸模型對數(shù)據(jù)進行補充則不存在錯位的問題.本文利用知識庫內(nèi)相似監(jiān)測事件的數(shù)據(jù),即對相同的運行環(huán)境,相同計算框架下應用程序的監(jiān)測任務,監(jiān)測事件可以不完全相同,但必須包含缺失值的事件.以當前結果中的監(jiān)測數(shù)據(jù)事件集的交集得出公共事件集作為訓練數(shù)據(jù),構建回歸模型,回歸模型采用KNN回歸3的方式實現(xiàn):
假設對含有缺失項的監(jiān)測事件(a,b,c,d)的結果R1,只有事件a有缺失項 ,查找含有事件a,而且監(jiān)測相同程序的記錄結果R2.R2之中含有(a,b,c,e,f)的監(jiān)測記錄.
1.相同監(jiān)測事件:
R1∩R2 = (a,b,c)
選取缺失項a為目標結果,b, c為特征事件.
2.整合數(shù)據(jù):
結合R2之中事件a,b,c的監(jiān)測結果和R1之中未缺失部分為模型訓練集Ts1,缺失部分為Ls1.
3.應用KNN算法,以K個距離最相近數(shù)據(jù)的為一類,建立分類模型.
4.根據(jù)(b,c)預測a的從屬分類,以類內(nèi)所有a的平均值為缺失部分的最終預測值.
實驗集群由4臺Dell服務器組成,其中一臺作為主節(jié)點,其他三臺作為計算子節(jié)點.每臺服務器配備有16核Intel至強E5-2630 v3 @2.4GHz處理器,服務器內(nèi)存大小為64GB,操作系統(tǒng)為Ubuntu 14.04.
集群管理系統(tǒng)為Mesos 1.0并應用Hadoop 2.7為計算框架,同時挑選了4類8個來自于Hibench中的典型云應用程序作為被監(jiān)測程序,分別是:網(wǎng)絡分析算法(Pagerank),分布式數(shù)據(jù)庫應用(Aggregation,Scan),機器學習算法(Bayes,Kmeans)以及微基準程序(Sort,Wordcount).
由實驗觀察可知,即使是在相同的系統(tǒng)環(huán)境中,反復監(jiān)測同一程序只能得到具有極高相似度的實驗結果,而不可能得到完全相同的實驗結果,如表1之中Reference1到Refernce4的數(shù)據(jù)描述,以及圖4之中對應的部分比較也可以證實這一點.所以本文對數(shù)據(jù)質(zhì)量的評價是以數(shù)據(jù)結果與參考值的相似度作為數(shù)據(jù)清理效果的評價標準.并通過計算監(jiān)測數(shù)據(jù)與參考值的DTW,評估結果的相似性,并以此比較數(shù)據(jù)清理前后的差異度Diff(%)來表現(xiàn)處理的效果,如公式(3).
Distancetest=DTW(datatest,dataref1)
Distanceref=DTW(dataref1,dataref2)
(3)
由第一章可知,采用復用時系統(tǒng)會通過時分復用PMU實現(xiàn)多個事件的同時監(jiān)測.以監(jiān)測HiBench中的WordCount程序為例, 觀察同時監(jiān)測事件數(shù)量變化時的精度變化,結果如圖8所示.縱坐標為不同監(jiān)測結果與參考數(shù)據(jù)的差異度,橫坐標為同時監(jiān)測的事件數(shù)目.比較相同事件在不同的PMU配置下處理前后監(jiān)測數(shù)據(jù)與參考數(shù)據(jù)之件的差異度,在同時監(jiān)測的事件數(shù)量增多時差異度逐漸增加.預處理之后差異度明顯減少,預處理之后差異度不超過參考值的42%,較處理前最低都在50%以上的偏差來比較極大地提升了監(jiān)測結果的質(zhì)量,而且在同時監(jiān)測的事件數(shù)量上少于24個時,DTW距離的差異度不超過20%,而這20%中還包括監(jiān)測程序因頻繁的調(diào)度事件對程序所產(chǎn)生的影響.可監(jiān)測的事件數(shù)量最大可提升到方式一的5倍,監(jiān)測效率最大可提升5倍,確保數(shù)據(jù)依舊可保持較高的質(zhì)量.
圖8 同時監(jiān)測多個事件,數(shù)據(jù)質(zhì)量比較Fig.8 Compare of data quality when sampling with more events
注:KBDP,基于知識庫的數(shù)據(jù)與處理方法;GDP,對當前缺失異常情況采取以當前均值直接替換的方法.三條直線(從上到下)分別代表經(jīng)過預處理之前,GDP處理之后,KBDP處理之后的平均情況.
圖9 針對多種應用采取不同預處理方法比較.
Fig.9 Data quality promotion when it applied to different application
同時對Hibench之中的其他應用進行了驗證,并與針對缺失值和異常值直接以當前均值替換的方法[20](在本文中把這種方法定義成一般性的預處理方法方法-General Data Preprocessing approach,GDP)進行了比較,如圖9所示.在監(jiān)測10個硬件事件時,基于數(shù)據(jù)庫的預處理方法(KBDP)與GDP相比極大的提高了與參考結果的相似性,總體的平均差異度由處理前的52.7%減低到8.7%,也就意味著平均91.3%的相似度.
本文提出的基于知識庫的預處理方法有效解決了在云環(huán)境下應用PMU時的問題,即通過配置的事件數(shù)少于性能計數(shù)器個數(shù)來完成數(shù)據(jù)收集的工作才能獲得可靠數(shù)據(jù)的限制.通過對復用PMU后監(jiān)測結果的預處理工作處理了異常值,補全了缺失值,提高數(shù)據(jù)質(zhì)量,使得監(jiān)測數(shù)據(jù)可直接應用到后續(xù)的分析工作中,大大提升了工作效率.