陳 禹,毛鶯池
(河海大學(xué)計(jì)算機(jī)與信息學(xué)院,南京211100)
Ceph 是一個(gè)集可靠性、可擴(kuò)展性、統(tǒng)一性的分布式存儲(chǔ)系統(tǒng),提供對(duì)象(Object)、塊(Block)及文件系統(tǒng)(File System)三種訪問(wèn)接口,它們都通過(guò)底層的LIBRADOS 庫(kù)與后端的對(duì)象存儲(chǔ)單元(Object Storage Device,OSD)交互,實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)功能[1]。Ceph 內(nèi)部包含眾多模塊,模塊之間通過(guò)隊(duì)列交換消息,相互協(xié)作共同完成IO 的處理,典型模塊有:網(wǎng)絡(luò)模塊(Messenger)、數(shù) 據(jù) 處 理 模 塊(FileStore)、日 志 處 理 模 塊(FileJournal)等[2]。面對(duì)眾多的模塊,Ceph提供了豐富的參數(shù)配置選項(xiàng),然而由于Ceph 集群的負(fù)載情況每時(shí)每刻都在變化,加上Ceph 作業(yè)的類型繁多,不同用戶不同作業(yè)的需求也千差萬(wàn)別,默認(rèn)的配置參數(shù)往往不能保證集群資源的充分利用和系統(tǒng)的高吞吐率,因此需要調(diào)整參數(shù)配置從而提高系統(tǒng)在吞吐量、能耗、運(yùn)行時(shí)間等方面的性能[3]。
找到最佳Ceph 參數(shù)配置的簡(jiǎn)單方法是嘗試配置參數(shù)值的每個(gè)組合并選擇最佳配置參數(shù)值,然而在沒(méi)有深入了解Ceph 內(nèi)部系統(tǒng)和給定應(yīng)用程序的情況下手動(dòng)調(diào)整這么多的參數(shù)非常繁瑣且耗時(shí),甚至可能導(dǎo)致性能嚴(yán)重下降;并且Ceph參數(shù)配置的最佳性能是應(yīng)用于特定Ceph應(yīng)用程序的,因此將針對(duì)特定應(yīng)用程序優(yōu)化的一組配置應(yīng)用于不同的Ceph系統(tǒng)會(huì)導(dǎo)致性能欠佳;另外大量普通Ceph 用戶缺乏對(duì)Ceph的底層實(shí)現(xiàn)原理的理解,對(duì)參數(shù)優(yōu)化沒(méi)有經(jīng)驗(yàn),導(dǎo)致運(yùn)維人員的工作量顯著增加?,F(xiàn)有的針對(duì)存儲(chǔ)系統(tǒng)參數(shù)調(diào)優(yōu)問(wèn)題研究已有一定進(jìn)展,Cao等[4]提出一種黑盒自動(dòng)調(diào)整存儲(chǔ)系統(tǒng)參數(shù)的方法,迭代嘗試不同的配置,測(cè)量系統(tǒng)的性能,并根據(jù)之前的信息,選擇下一次的參數(shù)配置。但該方法每次需要運(yùn)行具有大量輸入數(shù)據(jù)集的應(yīng)用程序,會(huì)耗費(fèi)大量時(shí)間并且會(huì)占用大量系統(tǒng)資源。
針對(duì)以上問(wèn)題,本文提出一種基于隨機(jī)森林(Random Forest,RF)和遺傳算法(Genetic Algorithm,GA)參數(shù)自動(dòng)調(diào)優(yōu)的方法,用于自動(dòng)調(diào)整Ceph 參數(shù)配置,優(yōu)化Ceph 系統(tǒng)性能。該方法通過(guò)隨機(jī)森林算法建立性能預(yù)測(cè)模型,與需要執(zhí)行應(yīng)用程序的方法相比,建立性能模型能夠更快地預(yù)測(cè)應(yīng)用程序的性能,從而減少系統(tǒng)資源的占用,節(jié)省大量測(cè)試時(shí)間;之后將性能預(yù)測(cè)模型的輸出作為遺傳算法的輸入對(duì)Ceph 參數(shù)配置方案進(jìn)行自動(dòng)迭代優(yōu)化,以找到最佳參數(shù)配置。實(shí)驗(yàn)結(jié)果表明,與默認(rèn)的Ceph 參數(shù)配置相比,調(diào)優(yōu)后的參數(shù)配置使Ceph 文件系統(tǒng)讀寫(xiě)性能平均提高了1.4 倍,并且尋優(yōu)耗時(shí)遠(yuǎn)低于黑盒參數(shù)調(diào)優(yōu)方法。
統(tǒng)計(jì)推理和機(jī)器學(xué)習(xí)技術(shù)[5]已經(jīng)用于存儲(chǔ)系統(tǒng)參數(shù)調(diào)優(yōu)的研究,如模擬退火(Simulated Annealing,SA)、貝葉斯優(yōu)化(Bayesian Optimization,BO)、遺傳算法、支持向量機(jī)(Support Vector Machine,SVM)、深度Q 網(wǎng)絡(luò)(Deep Q Network,DQN)、隨機(jī)搜索(Random Search,RS)等被應(yīng)用到參數(shù)自動(dòng)調(diào)優(yōu)算法中,形成了相應(yīng)的參數(shù)自動(dòng)調(diào)優(yōu)模型。目前常用的存儲(chǔ)系統(tǒng)參數(shù)自動(dòng)調(diào)優(yōu)方法包括基于策略選擇的抽樣算法、基于HCOpt 系統(tǒng)的參數(shù)調(diào)優(yōu)、TaskConfigure 服務(wù)器方法、DAC(Datasize Adjustment of Configuration,一種數(shù)據(jù)量感知自動(dòng)調(diào)整方法)、自適應(yīng)調(diào)優(yōu)框架MrEtalon、基于遺傳算法的參數(shù)調(diào)優(yōu)和黑盒參數(shù)自動(dòng)調(diào)優(yōu)等。黑盒自動(dòng)調(diào)整存儲(chǔ)系統(tǒng)參數(shù)方法的基本機(jī)制是迭代嘗試不同的參數(shù)配置,測(cè)量出目標(biāo)函數(shù)的值,并根據(jù)以前學(xué)習(xí)的信息,選擇出下一個(gè)需要嘗試的參數(shù)配置,指導(dǎo)搜索出最優(yōu)參數(shù)配置;但是該方法優(yōu)化參數(shù)配置時(shí)每次都需要運(yùn)行具有大量輸入數(shù)據(jù)集的應(yīng)用程序,會(huì)耗費(fèi)大量時(shí)間并且會(huì)占用大量系統(tǒng)資源。文獻(xiàn)[6]提出了一種基于HCOpt 系統(tǒng)的參數(shù)調(diào)優(yōu),該系統(tǒng)采用了基于遺傳算法的參數(shù)調(diào)優(yōu)算法,無(wú)需分析Hadoop 各參數(shù)間的制約關(guān)系,能夠縮短求解時(shí)間。HCOpt 系統(tǒng)目前針對(duì)的是用戶手動(dòng)提交的Map Reduce 作業(yè),但實(shí)際的應(yīng)用環(huán)境中,有很多的Map Reduce 作業(yè)是一些高級(jí)的系統(tǒng)框架根據(jù)用戶命令自動(dòng)生成的,該方法并沒(méi)有考慮到此問(wèn)題。文獻(xiàn)[7]提出了一個(gè)自適應(yīng)調(diào)優(yōu)框架MrEtalon,可以在短時(shí)間內(nèi)為新工作推薦接近最優(yōu)的配置。MrEtalon 設(shè)置了一個(gè)配置存儲(chǔ)庫(kù)來(lái)提供候選配置,以及一個(gè)基于協(xié)作過(guò)濾的推薦引擎來(lái)加速參數(shù)的優(yōu)化;但該方法在生成推薦的過(guò)程會(huì)延遲作業(yè)執(zhí)行,并導(dǎo)致資源空閑。文獻(xiàn)[8]提出了基于作業(yè)資源消耗簽名的任務(wù)分類和基于遺傳算法框架的調(diào)優(yōu)系統(tǒng),系統(tǒng)依據(jù)任務(wù)的資源消耗模式為不同類型的任務(wù)分配適合的配置表,將每一次任務(wù)運(yùn)行作為一次集群測(cè)試,將測(cè)試結(jié)果反饋后用以調(diào)優(yōu)。文獻(xiàn)[9]提出的TaskConfigure服務(wù)器通過(guò)構(gòu)建Hadoop 集群參數(shù)信息庫(kù)系統(tǒng)實(shí)現(xiàn)對(duì)集群參數(shù)的自動(dòng)調(diào)優(yōu)配置,通過(guò)對(duì)集群節(jié)點(diǎn)及任務(wù)的分類,提出集群按類分配配置參數(shù)及采用節(jié)點(diǎn)資源利用效率生成集群系統(tǒng)參數(shù)的優(yōu)化配置值。文獻(xiàn)[10]提出了基于策略選擇的抽樣算法,在Hadoop 中加入了策略感知層,實(shí)驗(yàn)結(jié)果表明改進(jìn)的Hadoop 框架可以自動(dòng)優(yōu)化設(shè)置這些復(fù)雜的參數(shù),從而提高整個(gè)系統(tǒng)的運(yùn)行效率。這里策略感知層的思想是用一種抽樣算法來(lái)實(shí)現(xiàn)樣本感知總體,從而實(shí)現(xiàn)根據(jù)集群的運(yùn)行狀況和作業(yè)的數(shù)據(jù)特點(diǎn)來(lái)動(dòng)態(tài)選擇配置參數(shù)。但該方法在數(shù)據(jù)量比較小時(shí),框架的運(yùn)行效率反而不如以前的框架;而且海量數(shù)據(jù)的抽樣算法屬于一種隨機(jī)抽樣,所以樣本對(duì)總體的估計(jì)有很大的隨機(jī)性。
上述方法能在一定程度上解決存儲(chǔ)系統(tǒng)繁瑣的參數(shù)配置調(diào)整問(wèn)題,推動(dòng)存儲(chǔ)系統(tǒng)參數(shù)自動(dòng)調(diào)優(yōu)的研究工作,但未能考慮存儲(chǔ)系統(tǒng)參數(shù)的空間巨大性及非線性關(guān)系,不能很好地解決Ceph系統(tǒng)的參數(shù)調(diào)優(yōu)問(wèn)題。
Ceph數(shù)據(jù)讀寫(xiě)的基本流程:msg模塊接收到讀寫(xiě)請(qǐng)求,通過(guò)ms_fast_dispatch 等函數(shù)的處理,添加到OSD(Object Storage Device)的op_sharedwq函數(shù)中。在op_sharedwq函數(shù)的請(qǐng)求下通過(guò)線程池的一系列復(fù)雜處理,最后調(diào)用FileJournal 的submit_entry 函數(shù)同時(shí)添加到FileJournal 的writeq 隊(duì)列里和completions隊(duì)列里。FileJournal的write_thread線程以aio的形式寫(xiě)日志數(shù)據(jù)到磁盤(pán),F(xiàn)ileJournal的write_finish_thread 以線程檢查IO 請(qǐng)求是否完成。Finisher 的線程把請(qǐng)求添加到FileStore 的op_wq 隊(duì)列里,F(xiàn)ileStore 調(diào)用write 系統(tǒng),先將對(duì)象數(shù)據(jù)寫(xiě)入系統(tǒng)的PageCache 里,然后再寫(xiě)入XFS 文件系統(tǒng)里。當(dāng)數(shù)據(jù)內(nèi)容不足時(shí),也有可能直接刷磁盤(pán),然后向上層返回ack應(yīng)答讀寫(xiě)成功[11]。
上述模塊中包含大量的Ceph 參數(shù)配置,本文選取了這些模塊中能夠顯著影響Ceph 文件系統(tǒng)讀寫(xiě)性能的一些參數(shù)進(jìn)行研究,具體的參數(shù)及其取值范圍如表1所示。
表1 Ceph配置參數(shù)說(shuō)明Tab.1 Description of Ceph configuration parameters
其中不同的參數(shù)取值會(huì)對(duì)Ceph 系統(tǒng)性能產(chǎn)生不同的影響,如將osd_op_threads(處理peering 等請(qǐng)求的線程數(shù))、filestore_op_threads(IO 線程數(shù))參數(shù)設(shè)置一個(gè)較大值,能夠加快IO 處理速度,但是如果線程太多,頻繁的線程切換也會(huì)影響系統(tǒng)性能。為了更直觀地了解不同參數(shù)配置對(duì)Ceph 文件系統(tǒng)讀寫(xiě)性能產(chǎn)生的影響,對(duì)表1中的7個(gè)參數(shù)取值進(jìn)行隨機(jī)分配,形成300 組不同的Ceph 參數(shù)配置,以Ceph 文件系統(tǒng)每秒的讀寫(xiě)次數(shù)(Input/Output Operations Per Second,IOPS)作為性能指標(biāo),通過(guò)運(yùn)行相應(yīng)的Ceph 集群,觀察系統(tǒng)的性能如何隨參數(shù)配置而變化。圖1 顯示了當(dāng)Ceph 配置參數(shù)發(fā)生變化時(shí),系統(tǒng)的讀寫(xiě)性能發(fā)生顯著變化,并且參數(shù)配置與性能呈現(xiàn)出非線性關(guān)系,有些參數(shù)配置在經(jīng)過(guò)調(diào)整后反而降低了系統(tǒng)性能。由此可見(jiàn),手動(dòng)調(diào)整Ceph 配置參數(shù)非常繁瑣且耗時(shí),甚至可能導(dǎo)致性能嚴(yán)重下降。
圖1 不同參數(shù)配置下性能變化Fig.1 Performance changes with different parameter configurations
針對(duì)上述問(wèn)題,本文提出基于隨機(jī)森林和遺傳算法的參數(shù)自動(dòng)調(diào)優(yōu)方法,可以自動(dòng)調(diào)整配置參數(shù)的值,以優(yōu)化給定集群上運(yùn)行的Ceph應(yīng)用程序的性能。圖2顯示了該方法的總體架構(gòu),主要由生成數(shù)據(jù)、建立模型和參數(shù)尋優(yōu)三個(gè)部分組成。
圖2 模型總體架構(gòu)Fig.2 Overall architecture of the proposed model
主要步驟如下:
1)在Ceph 參數(shù)配置范圍內(nèi),對(duì)參數(shù)進(jìn)行隨機(jī)采樣,生成一個(gè)參數(shù)集{conf1,conf2,…,onfn};
2)使用生成的參數(shù)集運(yùn)行相應(yīng)的Ceph 集群,以Ceph 文件系統(tǒng)每秒的讀寫(xiě)次數(shù)作為性能指標(biāo),收集相應(yīng)的性能{IOPS1,IOPS2,…,IOPSn};
3)使用步驟1)和2)中的數(shù)據(jù)集,通過(guò)隨機(jī)森林算法建立性能預(yù)測(cè)模型;
4)輸入一組配置參數(shù)的初始值到性能預(yù)測(cè)模型中,性能預(yù)測(cè)模型輸出相應(yīng)的IOPS值;
5)將默認(rèn)的參數(shù)配置和相應(yīng)的IOPS 值作為遺傳算法輸入,執(zhí)行交叉、變異操作,生成一組新的配置參數(shù),將這些參數(shù)再次傳入性能預(yù)測(cè)模型,直到找到最優(yōu)參數(shù)配置。
生成數(shù)據(jù)模塊主要目的是收集不同的參數(shù)配置所對(duì)應(yīng)的Ceph 文件系統(tǒng)的讀寫(xiě)性能,然后,將收集的數(shù)據(jù)集用于建立性能模型。本文使用隨機(jī)采樣的方法對(duì)表1 中的參數(shù)進(jìn)行采集,生成參數(shù)集confi={ci1,ci2,ci3,ci4,ci5,ci6,ci7}。confi是一組參數(shù)配置,cin是單個(gè)的參數(shù)取值。將采樣的參數(shù)集confi放入Ceph集群中運(yùn)行,以Ceph文件系統(tǒng)每秒的讀寫(xiě)次數(shù)作為性能指標(biāo),得到相應(yīng)的性能 IOPSi,構(gòu)造一個(gè)向量S={(conf1,IOPS1);(conf2,IOPS2);…;(confn,IOPSn)}存 儲(chǔ) 參數(shù)配置集和相應(yīng)的性能。
考慮到Ceph 配置參數(shù)以復(fù)雜的非線性關(guān)系相互作用,本文選取隨機(jī)森林來(lái)為Ceph 文件系統(tǒng)構(gòu)建性能預(yù)測(cè)模型。隨機(jī)森林是一種強(qiáng)大的集成模型,是bagging 算法的一種擴(kuò)展,該方法結(jié)合了統(tǒng)計(jì)推理和機(jī)器學(xué)習(xí)方法的優(yōu)勢(shì)[12],基于一組回歸或分類樹(shù)而不是單一樹(shù)進(jìn)行預(yù)測(cè),并組合各個(gè)樹(shù)的輸出以得到最終輸出,這使得性能預(yù)測(cè)不僅準(zhǔn)確而且建立的模型更加穩(wěn)定。此外,該方法對(duì)過(guò)度擬合具有很強(qiáng)的魯棒性,并且它沒(méi)有對(duì)預(yù)測(cè)變量作出任何假設(shè),算法1 展示了建立隨機(jī)森林模型的具體過(guò)程。
算法1 隨機(jī)森林建模過(guò)程。
輸入 訓(xùn)練集S;訓(xùn)練樣本B;
1) For i=1 to B{
2) Ti=bootstrap sample from S
4) }
輸出 預(yù)測(cè)性能Pre。
使用向量S 作為隨機(jī)森林的輸入,從全部樣本中選取大小為B 的bootstrap 樣本,并將它們存儲(chǔ)在Ti中;樣本特征數(shù)目為7,對(duì)B 個(gè)bootstrap 樣本選擇7 個(gè)特征數(shù)目中的k 個(gè)特征,用建立決策樹(shù)的方式獲得最佳分割點(diǎn),重復(fù)m次,產(chǎn)生m棵決策樹(shù),將它們存儲(chǔ)到Cx中;通過(guò)聚合B個(gè)bootstrap 樣本樹(shù)的預(yù)測(cè)來(lái)預(yù)測(cè)新數(shù)據(jù)Prei。
在建立完性能模型后,仍然不知道最優(yōu)的參數(shù)配置,本文選取遺傳算法來(lái)搜尋最優(yōu)參數(shù)配置。遺傳算法是一種通過(guò)模擬自然進(jìn)化過(guò)程搜索最優(yōu)解的方法[13],其主要特點(diǎn)是:直接對(duì)結(jié)構(gòu)對(duì)象進(jìn)行操作,不存在求導(dǎo)和函數(shù)連續(xù)性的限定;具有內(nèi)在的隱并行性和更好的全局尋優(yōu)能力;采用概率化的尋優(yōu)方法,不需要確定的規(guī)則就能自動(dòng)獲取和指導(dǎo)優(yōu)化的搜索空間,自適應(yīng)地調(diào)整搜索方向。圖3描述了參數(shù)尋優(yōu)的基本框架。
圖3 參數(shù)尋優(yōu)框架Fig.3 Framework of parameter optimization
首先將默認(rèn)的參數(shù)配置輸入到性能模型中,得到對(duì)應(yīng)的讀寫(xiě)性能;將默認(rèn)配置參數(shù)及相應(yīng)的讀寫(xiě)性能作為GA 的輸入,讀寫(xiě)性能作為GA 的適應(yīng)度值;GA 將默認(rèn)參數(shù)進(jìn)行交叉、變異,得到一組新的參數(shù)配置;將新的參數(shù)配置傳入性能模型中。重復(fù)以上步驟,直到找到最優(yōu)參數(shù)配置。
參數(shù)尋優(yōu)的算法如算法2所示:
算法2 參數(shù)尋優(yōu)。
輸入 初始種群p(0),迭代計(jì)數(shù)器t,交叉發(fā)生的概率Pc,變異發(fā)生的概率Pm,種群規(guī)模M,終止進(jìn)化的代數(shù)T;
1) 初始化Pc、Pm、M、T參數(shù),隨機(jī)產(chǎn)生第一代種群p(0)
2) do
3) 計(jì)算種群p(0)中每一個(gè)個(gè)體的適應(yīng)度f(wàn)(t)。
4) 初始化空種群p(t)
5) for t=0 to M
6) 根據(jù)適應(yīng)度以比例選擇算法從種群p(0)中選出2個(gè)個(gè)體
7) if(random(0,1)<Pc)
8) 對(duì)2個(gè)個(gè)體按交叉概率Pc執(zhí)行交叉操作
9) if(random(0,1)<Pm)
10) 對(duì)兩個(gè)個(gè)體按變異概率Pm執(zhí)行變異操作
11) 將2個(gè)新個(gè)體加入種群p(t)中
12) end for
13)用p(t)取代p(0)
14)while t<T
輸出 p(t)。
算法具體流程如下:
1)初始種群生成。初始種群采用隨機(jī)的方式生成,設(shè)為p(0),設(shè)定迭代計(jì)數(shù)器t=0,p(t)表示第t代種群,p(0)中每個(gè)個(gè)體由表1中7個(gè)參數(shù)值組合。
2)計(jì)算個(gè)體適應(yīng)度值。適應(yīng)度值用于評(píng)價(jià)個(gè)體的優(yōu)劣程度,適應(yīng)度越大個(gè)體越好,反之適應(yīng)度越小則個(gè)體越差。這里以Ceph文件系統(tǒng)每秒的讀寫(xiě)次數(shù)作為遺傳算法的適應(yīng)度值。
3)選擇操作。根據(jù)適應(yīng)度的大小對(duì)個(gè)體進(jìn)行選擇,以保證適應(yīng)性能好的個(gè)體有更多的機(jī)會(huì)繁殖后代,使優(yōu)良特性得以遺傳。這里采用的選擇算法為“輪盤(pán)賭算法”,即個(gè)體被選中的概率與其適應(yīng)度函數(shù)值成正比。首先計(jì)算所有個(gè)體的適應(yīng)度之和:
然后計(jì)算每個(gè)染色體被選擇的概率:
4)交叉操作。對(duì)配置方案參數(shù)進(jìn)行二進(jìn)制編碼,并采取單點(diǎn)交叉方式,隨機(jī)設(shè)置交叉點(diǎn)互換參數(shù)信息。
5)變異操作。采用基本位變異的方法,對(duì)個(gè)體編碼串以變異概率Pm隨機(jī)指定某一位或某幾位基因進(jìn)行變異操作。對(duì)每一個(gè)變異點(diǎn),將其按位取反或用其他等位基因來(lái)替換。操作完成后,對(duì)參數(shù)編碼進(jìn)行解碼,生成新的種群p(t)。
6)更新種群。用交叉、變異后得到的新的種群p(t)取代初始種群p(0)。
7)終止條件判斷。當(dāng)進(jìn)化代數(shù)達(dá)到規(guī)定迭代次數(shù)T 時(shí),輸出結(jié)果;否則轉(zhuǎn)到步驟3)。
本文將一組參數(shù)配置confi={ci1,ci2,ci3,ci4,ci5,ci6,ci7}作為遺傳算法中的一條染色體,其中的每一個(gè)參數(shù)值代表一個(gè)基因,Ceph 文件系統(tǒng)每秒的讀寫(xiě)次數(shù)作為遺傳算法的適應(yīng)度值。在遺傳算法尋優(yōu)前,首先要確定Pc、Pm、M、T 的取值:變異概率Pm變異實(shí)質(zhì)上是對(duì)參數(shù)配置取值空間的深度搜索,變異概率取值太大則會(huì)使遺傳算法成為隨機(jī)搜索算法,并且由于隨機(jī)性太大,GA 在搜索上會(huì)花費(fèi)更多的時(shí)間[14],故Pm取值為0.01;交叉概率Pc影響了配置方案的交替速度,選取較高的交叉概率使算法效率更高,這里取為0.8;種群規(guī)模M 與迭代次數(shù)T 越大,可以增加搜索規(guī)模,提高搜索精度,但是太大會(huì)增加時(shí)間開(kāi)銷,降低搜索的效率,本文將M和T設(shè)置為100。
為了利用隨機(jī)森林算法構(gòu)造性能模型來(lái)自動(dòng)優(yōu)化Ceph程序,需要確定3.2 節(jié)中的兩個(gè)參數(shù)m 和k,其中m 代表決策樹(shù)的個(gè)數(shù),k是決策樹(shù)參數(shù)的最大特征數(shù)。較高的m值能使隨機(jī)森林模型獲得較高的精度,但也會(huì)導(dǎo)致較長(zhǎng)的模型評(píng)估時(shí)間[15]。本文選取網(wǎng)格搜索的方法來(lái)確定m 和k 的最優(yōu)值,圖4(a)中橫坐標(biāo)代表決策樹(shù)的個(gè)數(shù),縱坐標(biāo)代表模型的精度。從整體上看,隨著m值的增大,模型精度隨之上升,當(dāng)m=141時(shí),對(duì)模型精度的提高趨于平緩,綜合模型的運(yùn)行成本,選取m 值為141。圖4(b)中橫縱坐標(biāo)分別代表決策數(shù)的最大特征數(shù)和模型精度,當(dāng)k=7時(shí),模型精度達(dá)到最高。
圖4 m和k值對(duì)模型精度的影響Fig.4 Influence of m and k values on model accuracy
在確定了隨機(jī)森林的參數(shù)之后,從表1 的配置參數(shù)中隨機(jī)采樣出500 組數(shù)據(jù),在4 臺(tái)服務(wù)器上部署Ceph 文件系統(tǒng)讀寫(xiě)性能測(cè)試集群測(cè)試它們對(duì)應(yīng)的讀寫(xiě)性能,構(gòu)成實(shí)驗(yàn)數(shù)據(jù)集S,其中80%作為訓(xùn)練集,20%作為測(cè)試集。圖5 顯示了隨機(jī)森林建立的性能模型的預(yù)測(cè)效果,其中橫縱坐標(biāo)分別代表不同的參數(shù)配置和Ceph 系統(tǒng)性能。觀察圖5 可以發(fā)現(xiàn),隨機(jī)森林算法建立的性能模型能夠很好地預(yù)測(cè)Ceph 文件系統(tǒng)的讀寫(xiě)性能,并能及時(shí)反映實(shí)測(cè)值的變化趨勢(shì)。
圖5 隨機(jī)森林預(yù)測(cè)效果圖Fig.5 Random forest prediction effect map
為了驗(yàn)證隨機(jī)森林性能模型的優(yōu)劣性,本文采用了隨機(jī)森林(RF)、支持向量機(jī)(SVM)、人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network,ANN)和K 最近鄰(K-Nearest Neighbors,KNN)算法幾種機(jī)器學(xué)習(xí)算法分別為Ceph 文件系統(tǒng)構(gòu)建了讀寫(xiě)性能模型,并分析比較了這幾種性能模型的精度。幾種機(jī)器學(xué)習(xí)算法建立的性能預(yù)測(cè)對(duì)比模型如圖6 所示,其中Real 為實(shí)際測(cè)試值,SVM、KNN、ANN、RF 分別代表支持向量機(jī)、K 最近鄰、人工神經(jīng)網(wǎng)絡(luò)和隨機(jī)森林算法建立的性能模型預(yù)測(cè)值。從整體趨勢(shì)上看,采用隨機(jī)森林算法得到的預(yù)測(cè)值能夠及時(shí)反映實(shí)測(cè)值Real 的變化趨勢(shì),而采用其他算法得到的預(yù)測(cè)值曲線則與實(shí)測(cè)值Real 曲線存在較明顯差異;并且當(dāng)實(shí)測(cè)值Real 發(fā)生驟然改變時(shí),隨機(jī)森林模型的預(yù)測(cè)值能夠及時(shí)跟隨Real上升或下降,而其他模型的預(yù)測(cè)值則存在明顯振蕩,且嚴(yán)重滯后于實(shí)測(cè)值的變化趨勢(shì)。
圖6 幾種模型的綜合性能對(duì)比Fig.6 Performance comparison of several models
為了更直觀地比較各模型精度,本文定義預(yù)測(cè)誤差公式為:
其中:Prei是Ceph 文件系統(tǒng)讀寫(xiě)性能的預(yù)測(cè)值,Reali是測(cè)試的實(shí)際性能值。err 反映了性能模型的預(yù)測(cè)值與實(shí)際測(cè)試值之間的相對(duì)差異,并且越低越好。RF、SVM、ANN、KNN 的誤差分別為8.6%、20%、27%和49%,由此可見(jiàn),隨機(jī)森林算法建立的模型性能要明顯優(yōu)于其他機(jī)器學(xué)習(xí)算法。
使用遺傳算法迭代尋優(yōu)的趨勢(shì)圖如圖7 所示,圖中橫坐標(biāo)代表遺傳算法的迭代次數(shù),縱坐標(biāo)代表Ceph 文件系統(tǒng)的讀寫(xiě)性能。為了確保實(shí)驗(yàn)結(jié)果的有效性,取5 次遺傳算法尋優(yōu)程序運(yùn)行的平均值作為最終實(shí)驗(yàn)結(jié)果。觀察圖7 可以看出,遺傳算法經(jīng)過(guò)約70 次迭代之后,能夠達(dá)到平穩(wěn)狀態(tài)。經(jīng)過(guò)參數(shù)優(yōu)化后的Ceph 文件系統(tǒng)讀寫(xiě)性能約為3 144,而默認(rèn)參數(shù)配置的性能只能達(dá)到1 300,性能提高了約1.4倍。
為了評(píng)估本文方法對(duì)Ceph 參數(shù)自動(dòng)調(diào)優(yōu)的效率,將黑盒參數(shù)調(diào)優(yōu)法與隨機(jī)森林和遺傳算法參數(shù)調(diào)優(yōu)法進(jìn)行對(duì)比,圖8 顯示了在不同大小文件下,兩種方法搜索出最優(yōu)參數(shù)的耗時(shí)對(duì)比。觀察圖8 可以看出,使用隨機(jī)森林和遺傳算法優(yōu)化參數(shù)的耗時(shí)要明顯低于黑盒參數(shù)調(diào)優(yōu)的方法;并且隨著輸入文件的變大,黑盒參數(shù)調(diào)優(yōu)法的耗時(shí)顯著增加,而加入性能模型調(diào)優(yōu)的方法耗時(shí)能夠穩(wěn)定在一個(gè)較小的值。因?yàn)檫z傳算法每次的迭代只需要對(duì)性能模型進(jìn)行評(píng)估,并不需要重新運(yùn)行Ceph 應(yīng)用程序,而黑盒參數(shù)調(diào)優(yōu)法每次需要運(yùn)行具有大量輸入數(shù)據(jù)集的應(yīng)用程序,會(huì)耗費(fèi)相當(dāng)長(zhǎng)的時(shí)間。
圖7 讀寫(xiě)性能與GA迭代步數(shù)關(guān)系Fig.7 Relationship between read and write performance and GA iteration step
圖8 不同大小文件下尋優(yōu)效率對(duì)比Fig.8 Comparison of optimization efficiency under different file sizes
本文針對(duì)Ceph 配置參數(shù)難以手動(dòng)調(diào)優(yōu)的問(wèn)題,提出一種基于隨機(jī)森林和遺傳算法的參數(shù)調(diào)優(yōu)方法,用于自動(dòng)調(diào)整Ceph配置參數(shù),以優(yōu)化Ceph系統(tǒng)性能。利用隨機(jī)森林建立準(zhǔn)確和強(qiáng)大的性能預(yù)測(cè)模型,將模型的輸出作為遺傳算法輸入以自動(dòng)搜索Ceph 參數(shù)配置空間,產(chǎn)生新的參數(shù)配置,優(yōu)化應(yīng)用程序性能。實(shí)驗(yàn)結(jié)果表明,經(jīng)過(guò)參數(shù)調(diào)優(yōu)后的參數(shù)配置與默認(rèn)參數(shù)配置相比,Ceph文件系統(tǒng)讀寫(xiě)性能提高了約1.4倍,并且尋優(yōu)耗時(shí)遠(yuǎn)低于黑盒參數(shù)調(diào)優(yōu)方法。在以后的工作中,將繼續(xù)深入對(duì)集群參數(shù)的研究,進(jìn)一步了解參數(shù)之間及參數(shù)值的設(shè)定與系統(tǒng)資源的相關(guān)性,并增加參數(shù)的研究數(shù)量。