Google已經(jīng)實(shí)現世界級數據中心服務(wù)器監控,新的技術(shù)可以監控世界范圍內每臺服務(wù)器上的每個(gè)任務(wù);其最終目的是通過(guò)這些數據有選擇對進(jìn)程進(jìn)行干預、甚至是關(guān)閉該進(jìn)程讓同CPU上的其它進(jìn)程得以運行。
搜索巨頭在技術(shù)論文中詳細的描述了這一世界級監視技術(shù)的實(shí)現方法,相信使用大型基于Linux云計算基礎設施的機構都會(huì )對此感興趣。
論文中寫(xiě)道:
性能隔離是云計算的主要挑戰。不幸的是,Linux缺少對共享資源(比如:處理器緩存、存儲器總線(xiàn)等)中性能干擾的防御;這樣的話(huà),公有云中的應用程序將無(wú)法避免來(lái)自鄰居們的干擾。
CPI方案使用從硬件性能計數器獲得的CPI(cycles-per-instruction,平均指令周期數)數據檢測問(wèn)題,中斷或者關(guān)閉“問(wèn)題”進(jìn)程從而達到預期的效果,當然它會(huì )根據相同作業(yè)中大量任務(wù)數據認知這個(gè)任務(wù)的反常與否。
本質(zhì)上講,CPI讓Google可以在集群上萬(wàn)個(gè)CPU核心中隔離單個(gè)核心上的單個(gè)性能低下任務(wù),對這個(gè)任務(wù)進(jìn)行檢查并進(jìn)行操作,而造成的CPU開(kāi)銷(xiāo)甚至不到0.1%。它并不需要特殊的硬件支持,唯一的軟件依賴(lài)恰是使用Linux。
CPI允許Google收集任何指定指令的預期CPU CPI,從這些數據中分析出標準的資源配置文件,然后使用這些標準的配置文件去幫助網(wǎng)絡(luò )巨頭確定哪些任務(wù)比一般情況下耗費了更多的CPI,從而解放與這些任務(wù)使用相同CPU的其它進(jìn)程。
Google稱(chēng),其絕大多數機器上都運行著(zhù)多任務(wù)。作業(yè)的處理類(lèi)型分為實(shí)時(shí)處理和批處理兩種,同時(shí)這些作業(yè)由大量的任務(wù)組成。Google服務(wù)器上96%的任務(wù)都會(huì )與至少10個(gè)的任務(wù)組成一個(gè)作業(yè),而87%左右的任務(wù)會(huì )與100或以上的任務(wù)組成一個(gè)作業(yè)。
但是這些任務(wù)可能會(huì )相互干擾,導致處理器緩存和內存分配問(wèn)題,造成應用中的某個(gè)任務(wù)延時(shí)飆升——這正是Google不惜一切代價(jià)都想避免的問(wèn)題。
為了實(shí)現任務(wù)流下每個(gè)處理器的控制,Google使用CPI監視所有運行的服務(wù)器。通過(guò)測量處理器硬件計數器,然后用CPU_CLK_UNHALTED.REF除以INSTRUCTIONS_RETIRED來(lái)獲得CPI數據。
通過(guò)計算模式下的perf_event工具,Google每分鐘都會(huì )收集一個(gè)長(cháng)為10秒周期的數據。系統中總CPU的開(kāi)銷(xiāo)低于0.1%,并且不會(huì )對延時(shí)產(chǎn)生影響。
因為集群需要跨大量的平臺運行,CPI的目的在于體現各種平臺下的CPU運行情況。CPI的值通過(guò)每臺機器上的agent進(jìn)行本地分析和測量。agent通常會(huì )被給予作業(yè)中任務(wù)預期最常見(jiàn)的CPI分布,所以它可以獨立的分析出運行的正常與否。
如果agent發(fā)現有“victim”任務(wù)受到影響變得緩慢,它將會(huì )每秒一次的對“antagonist”任務(wù)進(jìn)行干涉。agent會(huì )使用一個(gè)算法來(lái)判斷“antagonist”任務(wù)的CPU占用增加與“victim”任務(wù)的遲緩是否曾在關(guān)系,依據的則是指令的周期數。
如果agent識別了一個(gè)“antagonist”并發(fā)現它是個(gè)批量作業(yè),系統將會(huì )“通過(guò)CPU hard-capping來(lái)強制減少‘antagonist的CPU占用率’”。
鑒于CPI和Omega論文的聯(lián)合作者中都有John Wilkes,Google很有可能是通過(guò)Omega(Google大型基礎設施管理系統的一個(gè)組件)給agent發(fā)布任務(wù)。
“antagonis”任務(wù)的配置文件與CPI數據進(jìn)行的是離線(xiàn)的記錄和存儲,這樣管理員就可以通過(guò)Google的主要網(wǎng)絡(luò )分析工具Dremel進(jìn)行查詢(xún)。
Google工程師使用Dremel進(jìn)行性能取證,用以確定“antagonists”任務(wù),在將來(lái)他們可能為“antagonists”任務(wù)重新制定策略,讓它們在單獨的主機集中運行,然后使用這個(gè)調度進(jìn)度來(lái)徹底的避免這個(gè)問(wèn)題。
其中有一個(gè)需要改進(jìn)的方面是處理多個(gè)“antagonists”,它將會(huì )復雜化算法;另一個(gè)則是為capping任務(wù)建立的反饋途徑。
論文中寫(xiě)道:“即使這兩方面還未改善,但是CPI是個(gè)強大的、實(shí)用的工具。”
使用CPI獲得應用性能可行信息的開(kāi)銷(xiāo)比Google其它方案來(lái)的更少,這里還存在一個(gè)被稱(chēng)為“Google-Wide Profiling”可同時(shí)對硬件和軟件性能進(jìn)行追蹤的平行技術(shù),但是只在Google小范圍的進(jìn)行使用。
從整體上看,CPI提供的不只是管理,更傾向于讓集群運行的更加穩定、效率。如果你在執行搜索或者查看Gmail、通過(guò)Google服務(wù)查找地址時(shí)發(fā)現比平常需要更多的時(shí)間,那么你可能就會(huì )被CPI冷酷及無(wú)情的當做是“antagonists”。