生產(chǎn)環(huán)境下高并發(fā)程序崩潰?麻州大學(xué)讓多線程軟件故障分析自動(dòng)化
軟件調(diào)試是非??菰锒旨夹g(shù)難度很高的工作,其中軟件故障的自動(dòng)化分析是幾代程序員共同的夢(mèng)想。進(jìn)入多核時(shí)代后,多個(gè)線程的并行處理極大地提高了程序性能,但同時(shí)任務(wù)的交織又使得程序運(yùn)行結(jié)果更難以重現(xiàn),這讓調(diào)試工作變得更加艱巨。
近日,麻薩諸塞大學(xué)阿默斯特分校(University of Massachusetts Amherst,簡(jiǎn)稱「麻州大學(xué)」)的電子與計(jì)算機(jī)工程系劉通平教授領(lǐng)導(dǎo)的研究團(tuán)隊(duì)最近開發(fā)一個(gè)名為 Watcher(哨兵)的自動(dòng)化多線程軟件故障分析工具,可以在幾秒鐘或者幾分鐘內(nèi)自動(dòng)精準(zhǔn)定位軟件錯(cuò)誤原因,有望徹底解決生產(chǎn)環(huán)境下并行程序調(diào)試?yán)щy的問題,能顯著提高自動(dòng)駕駛等關(guān)鍵系統(tǒng)的可靠性。
從智能手表到大型服務(wù)器,零售終端到金融交易平臺(tái),軟件服務(wù)存在于日常生活的方方面面,極大的便利了人們的日常生活。但是,軟件中總會(huì)包含一些潛在的缺陷或者 bug。盡管嚴(yán)格的軟件測(cè)試有助于盡早發(fā)現(xiàn)這些缺陷,但是開發(fā)人員往往迫于壓力,在沒有進(jìn)行全面測(cè)試的情況下就匆匆將軟件發(fā)布。而且有些軟件缺陷只在特定輸入條件下才會(huì)觸發(fā),或者只在特定的任務(wù)交互下才會(huì)顯現(xiàn),即使是嚴(yán)格的測(cè)試也并不能完全消除大型軟件中的所有缺陷,尤其是并發(fā)軟件中的缺陷。這些程序的缺陷常常成為軟件測(cè)試的漏網(wǎng)之魚,進(jìn)而導(dǎo)致運(yùn)行過程中系統(tǒng)崩潰、程序掛起、或引發(fā)安全漏洞。
盡管目前存在一些可用的軟件調(diào)試系統(tǒng),但大都需要人工干預(yù)。這樣的系統(tǒng)在實(shí)際應(yīng)用生產(chǎn)環(huán)境中是無(wú)法直接部署的。人們經(jīng)常使用微軟公司的辦公軟件,但是你不能指望普通用戶能夠調(diào)試這些軟件問題。普通用戶既沒有能力,也沒有義務(wù)去幫忙調(diào)試。因此,軟件公司只能收集用戶的錯(cuò)誤報(bào)告,然后進(jìn)行離線診斷。但離線診斷又有各種弊端:
第一,因?yàn)閿?shù)據(jù)上傳時(shí)并不能區(qū)分出故障相關(guān)信息,離線診斷必須收集錯(cuò)誤現(xiàn)場(chǎng)的所有數(shù)據(jù),其中也會(huì)包含一些用戶的隱私數(shù)據(jù)。比如,用戶剛剛用 IE 瀏覽器登陸網(wǎng)上銀行賬號(hào)然后崩潰,其錯(cuò)誤報(bào)告就會(huì)包含用戶的賬號(hào)和密碼等隱私信息;
第二,因?yàn)殡x線診斷通常依賴于統(tǒng)計(jì)方法,或者通過錯(cuò)誤狀態(tài)反向推理程序運(yùn)行的狀態(tài),這些方法的診斷能力都十分有限。因此,迫切需要更有效的軟件診斷系統(tǒng)來(lái)取代傳統(tǒng)的離線診斷方法。
「無(wú)論技術(shù)如何進(jìn)步,軟件故障始終是一個(gè)令人擔(dān)憂的問題」劉通平教授表示:「我們研究的軟件故障診斷系統(tǒng) Watcher 可以在原始的運(yùn)行環(huán)境中現(xiàn)場(chǎng)快速地診斷程序故障的根本原因。
跟以往的工具相比,Watcher 避免了其他分析軟件的隱私問題。用戶不再需要上傳整個(gè)內(nèi)存鏡像,Watcher 也只會(huì)提供報(bào)告軟件相關(guān)故障的報(bào)告。而且,Watcher 可以輕松部署,不依賴于定制的硬件或操作系統(tǒng)(不過目前 Watcher 只提供了對(duì) Linux 系統(tǒng)的支持),也不需要修改程序代碼或者重新編譯程序。研究團(tuán)隊(duì)利用 Watcher 成功檢測(cè)了幾十種軟件(包括一些大型應(yīng)用)中發(fā)生的故障。評(píng)估結(jié)果顯示,Watcher 可以在短短幾秒鐘內(nèi)準(zhǔn)確識(shí)別出軟件故障的根本原因」。
「冰凍三尺,非一日之寒,騏驥千里,非一日之功」。這項(xiàng)軟件故障診斷的突破也是來(lái)自于劉教授和其研究團(tuán)隊(duì)的長(zhǎng)期耕耘和努力:早在 10 年前,劉通平教授還是博士生的時(shí)候,他就開始研究并行軟件的確定性問題,其成果發(fā)在計(jì)算機(jī)軟件系統(tǒng)的最頂級(jí)會(huì)議 - 操作系統(tǒng)原理大會(huì)(SOSP'11)。在博士階段后期,他開始研究 Watcher 軟件系統(tǒng)的基礎(chǔ)工作,一種確定性的記錄重放系統(tǒng)(record-and-replay),相關(guān)的成果發(fā)表在軟件工程頂會(huì)(ICSE‘16)和編程語(yǔ)言的頂會(huì)(PLDI‘18)。2015 年劉教授還在德州大學(xué)圣安東尼奧分校工作時(shí),他的學(xué)生劉宏宇繼續(xù)這一方面的研究工作,經(jīng)過 8 年的辛勤工作,軟件故障診斷才有了今天的重大突破。
劉教授介紹說:「Watcher 的成功離不開它的基石 --iReplayer,它也是我們組 PLDI‘2018 的工作。iReplayer 能夠準(zhǔn)確無(wú)誤的復(fù)現(xiàn)程序錯(cuò)誤運(yùn)行情況的系統(tǒng),保證程序運(yùn)行的一致性:在重新執(zhí)行過程中,相同指令將對(duì)與原始運(yùn)行時(shí)完全一致的存儲(chǔ)單元 / 寄存器執(zhí)行相同的讀寫操作。這一特性這為軟件故障診斷打下了堅(jiān)實(shí)的基礎(chǔ)」。正是基于 iReplayer,Watcher 才能夠?qū)崿F(xiàn)現(xiàn)場(chǎng)診斷軟件錯(cuò)誤,其基本原理如下圖所示:
Watcher 作為一個(gè)運(yùn)行庫(kù)存在,可以和待檢測(cè)的程序相鏈接。在程序正常運(yùn)行時(shí),Watcher 對(duì)程序的運(yùn)行情況進(jìn)行一些記錄,但其性能開銷低于 3%。當(dāng)程序發(fā)生錯(cuò)誤時(shí),Watcher 的診斷模塊將被自動(dòng)開啟,并在重放過程中進(jìn)行自動(dòng)診斷。Watcher 將二進(jìn)制靜態(tài)分析、動(dòng)態(tài)分析與硬件調(diào)試技術(shù)結(jié)合在一起實(shí)現(xiàn)了自動(dòng)化軟件故障診斷。目前該研究已發(fā)表在程序語(yǔ)言與軟件工程類頂級(jí)學(xué)術(shù)會(huì)議OOPSLA‘2020,相關(guān)合作單位還包括普渡大學(xué)、德州大學(xué)圣安東尼奧分校、和伊利諾伊大學(xué)香檳分校。
Watcher 的程序錯(cuò)誤診斷基于一個(gè)關(guān)鍵發(fā)現(xiàn):程序錯(cuò)誤通常是由于程序?qū)㈠e(cuò)誤或無(wú)效的值寫入某個(gè)內(nèi)存中,并在隨后的運(yùn)行中引發(fā)異常所導(dǎo)致?;谶@個(gè)發(fā)現(xiàn),Watcher 采用混合分析法來(lái)確定導(dǎo)致程序錯(cuò)誤發(fā)生的內(nèi)存單元、相關(guān)的指令和錯(cuò)誤值傳播路徑。在二進(jìn)制分析中如果出現(xiàn)不能確定的情況時(shí),Watcher 利用重放運(yùn)行過程再次收集和確認(rèn)程序錯(cuò)誤相關(guān)的信息,做到準(zhǔn)確無(wú)誤的報(bào)告程序錯(cuò)誤的根本原因。此外,Watcher 還利用硬件寄存器非入侵式地采集對(duì)特定內(nèi)存的訪問,并動(dòng)態(tài)地分析程序錯(cuò)誤相關(guān)片段。分析結(jié)束后,Watcher 會(huì)生成一個(gè)對(duì)于錯(cuò)誤值的完整報(bào)告,程序員根據(jù)其報(bào)告能夠快速定位和修復(fù)這個(gè)程序錯(cuò)誤。
Watcher 的優(yōu)點(diǎn)之一是可以在軟件開發(fā)、部署、生產(chǎn)的所有階段中使用??梢灶A(yù)見,Watcher 將對(duì)各種急需現(xiàn)場(chǎng)錯(cuò)誤診斷的系統(tǒng)非常有用,尤其是人身安全相關(guān)的領(lǐng)域,比如航空系統(tǒng)或者自動(dòng)駕駛。自動(dòng)駕駛領(lǐng)域的一大痛點(diǎn)問題是如何快速的進(jìn)行錯(cuò)誤診斷,讓程序員能夠修復(fù)缺陷以提高系統(tǒng)的魯棒性。然而,由于無(wú)線通信等傳輸瓶頸無(wú)法傳輸整個(gè)內(nèi)存鏡像,或者即使有內(nèi)存鏡像也無(wú)法準(zhǔn)確定位問題,自動(dòng)駕駛企業(yè)很難快速地優(yōu)化系統(tǒng),從而帶來(lái)潛在的安全隱患。因?yàn)?Watcher 可以確定失敗的根本原因,還能避免離線分析或靜態(tài)分析的多個(gè)問題,這些痛點(diǎn)問題將通過 Watcher 得到解決。
根據(jù) 2017 年的數(shù)據(jù),軟件故障每年帶來(lái)超過 1.7 萬(wàn)億美金的財(cái)政損失,而且每個(gè)程序員每年平均超過 1500 小時(shí)用于程序調(diào)試。無(wú)侵入性部署,精準(zhǔn)自動(dòng)化復(fù)現(xiàn)多線程故障,秒級(jí)自動(dòng)錯(cuò)誤原因分析,Watcher 為生產(chǎn)環(huán)境下的軟件故障分析帶來(lái)了曙光,也將可能會(huì)有幾十億美元級(jí)別的市場(chǎng)?
論文鏈接:https://people.umass.edu/tongping/pubs/Watcher_OOPSLA20.pdf