一種基于運(yùn)行快照序列的并行程序重現(xiàn)調(diào)試方法
【專利摘要】本發(fā)明公開了一種基于運(yùn)行快照序列的并行程序重現(xiàn)調(diào)試方法,在并行程序運(yùn)行前,由用戶執(zhí)行在程序運(yùn)行中對(duì)調(diào)試會(huì)產(chǎn)生幫助的關(guān)鍵點(diǎn);在并行程序執(zhí)行的過程中,針對(duì)用戶指定的每一個(gè)關(guān)鍵點(diǎn)都保存一個(gè)快照,多個(gè)快照形成快照序列。在并行程序執(zhí)行結(jié)束后,進(jìn)入重放階段,向用戶展示快照信息以恢復(fù)出程序在設(shè)定關(guān)鍵點(diǎn)的運(yùn)行場(chǎng)景。本發(fā)明提出的運(yùn)行快照序列方法實(shí)際上將并行程序的調(diào)試執(zhí)行從一個(gè)物理上的實(shí)際執(zhí)行轉(zhuǎn)化為了一個(gè)邏輯上的概念執(zhí)行,這也是本發(fā)明提出的方法與傳統(tǒng)技術(shù)方案的一個(gè)最大不同。本發(fā)明提出的運(yùn)行快照序列方法具有實(shí)現(xiàn)簡(jiǎn)單、使用靈活和額外代價(jià)小這三個(gè)主要優(yōu)勢(shì)。
【專利說明】一種基于運(yùn)行快照序列的并行程序重現(xiàn)調(diào)試方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及在多核架構(gòu)中進(jìn)行軟件調(diào)試的方法。更具體的說,本發(fā)明設(shè)計(jì)在多核架構(gòu)中實(shí)現(xiàn)共享內(nèi)存多線程程序的可重現(xiàn)調(diào)試的技術(shù)方法??芍噩F(xiàn)調(diào)試為一種可以讓并行程序在運(yùn)行過程和調(diào)試過程中都能產(chǎn)生相同結(jié)果的技術(shù)。
【背景技術(shù)】
[0002]近年來,為了使硅效率(即,“應(yīng)用可實(shí)現(xiàn)的” MIP/mm2或MIP/mW)最大化,出現(xiàn)了一種制造包含多個(gè)核的處理器的趨勢(shì)。這種多核架構(gòu)理想地適于運(yùn)行基于線程的應(yīng)用,因?yàn)榫€程定義了包含執(zhí)行狀態(tài)、指令流和數(shù)據(jù)組的自主工作包,該線程通過定義可以與其他線程并行執(zhí)行。然而,這種并行執(zhí)行對(duì)在這些多核架構(gòu)上使用的軟件調(diào)試進(jìn)程引入了另外的問題。軟件調(diào)試是對(duì)計(jì)算機(jī)應(yīng)用的執(zhí)行中的錯(cuò)誤進(jìn)行定位和改正的總稱。
[0003]針對(duì)于并行程序而進(jìn)行的軟件調(diào)試,一般會(huì)由于并行程序運(yùn)行的不確定性而產(chǎn)生困難。并行程序的不確定性是指,在相同不行程序的多次運(yùn)行中,產(chǎn)生的結(jié)果可能是不同的。這一現(xiàn)象可能導(dǎo)致在軟件的先前運(yùn)行中,軟件錯(cuò)誤出現(xiàn),但是在軟件的調(diào)試運(yùn)行中,軟件錯(cuò)誤消失。這種結(jié)果的不確定性就會(huì)為軟件的調(diào)試帶來困難。近年來在學(xué)術(shù)界和工業(yè)界提出了可重現(xiàn)調(diào)試的方法,以應(yīng)對(duì)并行程序調(diào)試中出現(xiàn)的不確定性問題。所謂可重現(xiàn)調(diào)試,就是讓并行程序在運(yùn)行過程和調(diào)試過程中都能產(chǎn)生相同結(jié)果的技術(shù)。
[0004]造成并行程序執(zhí)行不確定性的有多個(gè)方面,包括:不確定的指令、不確定的函數(shù)、1操作(輸入/輸出操作)、陷阱指令、線程調(diào)度以及對(duì)共享內(nèi)存不確定的訪問等。為了實(shí)現(xiàn)程序執(zhí)行的確定性,可重現(xiàn)調(diào)試需要消除上述多個(gè)方面可能造成的不確定性。其中,在多核處理器環(huán)境下執(zhí)行多線程程序時(shí),對(duì)共享內(nèi)存不確定的訪問順序,是當(dāng)前可重現(xiàn)調(diào)試領(lǐng)域面對(duì)的關(guān)鍵問題。
[0005]目前針對(duì)可重現(xiàn)調(diào)試,學(xué)術(shù)界和工業(yè)界都已經(jīng)給予了充分的關(guān)注,并提出了多種解決方法。現(xiàn)有的解決方法主要可以分為三類:完全記錄方式、部分記錄方式和確定性重現(xiàn)方式。完全記錄方式的思路為:記錄所有共享內(nèi)存上數(shù)據(jù)訪問的沖突以及沖突之間的序列信息;部分記錄方式的思路為:在完全記錄方式記得基礎(chǔ)上進(jìn)行優(yōu)化,只記錄影響最終結(jié)果的部分關(guān)鍵訪問序;確定性并行方法的核心思路為:在不記錄任何共享內(nèi)存訪問序的情況下,使并行程序確定性的執(zhí)行。
[0006]以上三種針對(duì)可重現(xiàn)調(diào)試問題的解決思路,都存在共同的不足,主要體現(xiàn)在一下的三個(gè)方面:第一,都需要較大的可重現(xiàn)代價(jià)。對(duì)于完全記錄方式和部分記錄方式,現(xiàn)有的技術(shù)方案都需要記錄大量的日志。對(duì)于確定性并行方式,則會(huì)使并行程序的執(zhí)行產(chǎn)生較大的性能損失,降低程序的并行性;第二,方案的泛用性差。已有的解決方法有些屬于硬件方法,需要針對(duì)于特定的硬件結(jié)構(gòu)。軟件方面的方法也需要基于特定的操作系統(tǒng)、虛擬機(jī)以及運(yùn)行時(shí)環(huán)境等;第三,可擴(kuò)展性差。這里的可擴(kuò)展性主要體現(xiàn)在對(duì)于線程數(shù)目的可擴(kuò)展性。現(xiàn)有方案的實(shí)驗(yàn)數(shù)據(jù)大多基于2-4線程的測(cè)試,只有極少數(shù)的方案進(jìn)行了線程數(shù)為8的測(cè)試。并且從實(shí)現(xiàn)結(jié)果中可以發(fā)現(xiàn),現(xiàn)有方案的性能損失和日志大小會(huì)隨著線程數(shù)超線性增長(zhǎng)。
[0007]綜上,并行程序的可重現(xiàn)調(diào)試為一個(gè)具有廣泛應(yīng)用前景的研宄方向。但是現(xiàn)階段針對(duì)可重現(xiàn)調(diào)試的已有研宄成果都存在有比較嚴(yán)重的缺陷。一個(gè)可以指出的事實(shí)是:目前商業(yè)化的可以支持可重現(xiàn)調(diào)試的軟件或硬件系統(tǒng)仍未出現(xiàn)。因此在現(xiàn)階段,對(duì)可重現(xiàn)調(diào)試的實(shí)現(xiàn)思路進(jìn)行更多的思考和嘗試是十分有意義的。
【發(fā)明內(nèi)容】
[0008]本發(fā)明提出的基于運(yùn)行快照序列的并行程序重現(xiàn)調(diào)試方法適用于多核處理器平臺(tái)中。所指的多核心處理器也可以成為多微處理器核心,是在一個(gè)單一的計(jì)算組件中,加入兩個(gè)或兩個(gè)以上的獨(dú)立實(shí)體中央處理單元。這些核心可以分別獨(dú)立運(yùn)行程序指令。
[0009]本發(fā)明提出的是一種額外代價(jià)較小且具有實(shí)用性的實(shí)現(xiàn)并行程序可重現(xiàn)調(diào)試的方法。在可重現(xiàn)調(diào)試領(lǐng)域,傳統(tǒng)的實(shí)現(xiàn)方式都采用了讓需要被調(diào)試的程序進(jìn)行實(shí)際重現(xiàn)的方式。即在并行程序執(zhí)行的過程中記錄一些必要的序列信息(或者在執(zhí)行的過程中保證沒有不確定執(zhí)行情況的出現(xiàn)),從而保證在并行程序的原始執(zhí)行和調(diào)試執(zhí)行都將產(chǎn)生相同的結(jié)果。在保證了結(jié)果的相同后,用戶就可以使用傳統(tǒng)的斷點(diǎn)、單步執(zhí)行等調(diào)試方法進(jìn)行進(jìn)一步的調(diào)試。
[0010]本發(fā)明的提出的技術(shù)方案則是將并行程序的調(diào)試執(zhí)行從一個(gè)物理上的實(shí)際執(zhí)行轉(zhuǎn)化為了一個(gè)邏輯上的概念執(zhí)行。技術(shù)方案為:在并行程序運(yùn)行前,由用戶執(zhí)行在程序運(yùn)行中對(duì)調(diào)試會(huì)產(chǎn)生幫助的關(guān)鍵點(diǎn);在并行程序執(zhí)行的過程中,針對(duì)用戶指定的每一個(gè)關(guān)鍵點(diǎn)都保存一個(gè)快照,多個(gè)快照形成快照序列。在并行程序執(zhí)行結(jié)束后,進(jìn)入重放階段,向用戶展示快照信息以恢復(fù)出程序在設(shè)定關(guān)鍵點(diǎn)的運(yùn)行場(chǎng)景。
[0011]所指的快照為目標(biāo)并行程序在指定時(shí)刻的整體運(yùn)行狀態(tài),包括處理器中的寄存器使用情況(即處理器上下文)、內(nèi)存中的堆及運(yùn)行棧數(shù)據(jù)、以及程序?qū)τ谙到y(tǒng)中各類資源的使用情況。在具體的使用過程中,用戶也可以根據(jù)自身需要對(duì)快照所涵蓋的數(shù)據(jù)內(nèi)容進(jìn)行一定的縮減。
[0012]本領(lǐng)域的技術(shù)人員可以了解到,傳統(tǒng)的程序調(diào)試流程一般包括:用戶在程序中設(shè)定斷點(diǎn);程序開始運(yùn)行,在用戶設(shè)定的斷點(diǎn)處停止;用戶可以查看被調(diào)試程序在當(dāng)前時(shí)刻的整體運(yùn)行狀態(tài),包括處理器中的寄存器使用情況(即處理器上下文)、內(nèi)存中的堆及棧數(shù)據(jù)、以及程序?qū)τ谙到y(tǒng)中各類資源的使用情況;用戶在查看各個(gè)斷點(diǎn)的狀態(tài)數(shù)據(jù)后,可以對(duì)程序的運(yùn)行狀態(tài)產(chǎn)生更深的了解,并使用觀察到的信息指導(dǎo)程序錯(cuò)誤的修改。
[0013]與傳統(tǒng)的調(diào)試流程對(duì)比可以發(fā)現(xiàn),本發(fā)明所提出的基于運(yùn)行快照序列的并行程序重現(xiàn)調(diào)試方法,在并行程序運(yùn)行結(jié)束后,提供給用戶連續(xù)的快照序列進(jìn)行查看時(shí),可以實(shí)現(xiàn)與傳統(tǒng)調(diào)試類似的功能。但需要注意的是本發(fā)明提出的方法中,所有的程序執(zhí)行關(guān)鍵點(diǎn)(類似于傳統(tǒng)調(diào)試中的斷點(diǎn)),必須在程序運(yùn)行之前設(shè)置,在程序運(yùn)行過程中和結(jié)束后均不能更改。并且由于所有的快照信息是在并行程序運(yùn)行的過程中實(shí)時(shí)記錄的,可以完全真實(shí)的反應(yīng)并行程序的運(yùn)行狀況,從這一點(diǎn)上保證了調(diào)試錯(cuò)誤的可重現(xiàn)。綜上,本發(fā)明所提出的方法是實(shí)現(xiàn)了并行程序的可重現(xiàn)調(diào)試功能的。
[0014]本發(fā)明所提出的方法適用于解決多線程程序的可重現(xiàn)調(diào)試問題。為了解決這一問題,本發(fā)明提出的整體技術(shù)方案流程如下:
[0015]步驟一:提供給用戶快照保存觸發(fā)程序庫,用戶在程序編寫的過程中,根據(jù)程序的具體業(yè)務(wù)邏輯,自行選擇合適的位置在代碼中調(diào)用快照保存觸發(fā)程序庫所提供的接口。
[0016]在完成編譯后,與快照保存觸發(fā)的相關(guān)的機(jī)器指令將會(huì)迀入到目標(biāo)用戶程序中的特定位置。
[0017]這里及下文中的目標(biāo)用戶程序指調(diào)試方法用戶編寫源代碼并完成編譯后產(chǎn)生的在操作系統(tǒng)中可調(diào)度的進(jìn)程(如目標(biāo)進(jìn)程、任意一進(jìn)程P)。
[0018]步驟二:在目標(biāo)用戶程序運(yùn)行的過程中,若快照保存觸發(fā)相關(guān)的機(jī)器指令被執(zhí)行。則通過硬件提供的控制功能,使得所有執(zhí)行目標(biāo)用戶程序的處理器核都被暫停,并且轉(zhuǎn)入執(zhí)行快照保存執(zhí)行模塊的程序。
[0019]步驟三:預(yù)先對(duì)目標(biāo)用戶程序執(zhí)行時(shí)所處的操作系統(tǒng)程序進(jìn)行改動(dòng)。添加快照保存執(zhí)行模塊、快照信息維護(hù)模塊以及額外的快照相關(guān)進(jìn)程調(diào)度策略??煺毡4鎴?zhí)行模塊負(fù)責(zé)保存目標(biāo)用戶程序在當(dāng)前時(shí)刻的快照信息??煺招畔⒕S護(hù)模塊負(fù)責(zé)提供快照保存狀態(tài)的查詢,以便所有的處理器核可以了解到目標(biāo)用戶程序的快照保存過程是否結(jié)束。額外的快照相關(guān)進(jìn)程調(diào)度策略需要保證在目標(biāo)用戶程序的快照保存過程結(jié)束前,目標(biāo)用戶程序不能在多核處理器的任意一個(gè)微處理器核心上執(zhí)行。
[0020]步驟四:在轉(zhuǎn)入快照保存執(zhí)行模塊的程序執(zhí)行后,首先要判斷當(dāng)前執(zhí)行的處理器核所屬的類型。如果當(dāng)前程序執(zhí)行所在的處理器核為快照保存的觸發(fā)核,則將其稱為觸發(fā)核,否則將當(dāng)前程序執(zhí)行所在的處理器核稱為響應(yīng)核。對(duì)于在觸發(fā)核中執(zhí)行的快照保存執(zhí)行模塊,需要實(shí)際負(fù)責(zé)目標(biāo)用戶程序快照信息的保存,并在保存完成后向操作系統(tǒng)中的快照信息維護(hù)模塊聲明快照保存過程的結(jié)束。對(duì)于在響應(yīng)核中執(zhí)行的快照保存執(zhí)行模塊,則要主動(dòng)結(jié)束目標(biāo)用戶程序時(shí)間片的執(zhí)行。
[0021]步驟五:在觸發(fā)核聲明快照保存結(jié)束后,所有的處理器核都可以繼續(xù)正常調(diào)度執(zhí)行目標(biāo)用戶程序的任意一個(gè)線程。
[0022]步驟六:在目標(biāo)用戶程序整體執(zhí)行結(jié)束后,將運(yùn)行過程中產(chǎn)生的所有快照信息寫入到外部存儲(chǔ)中。
[0023]步驟七:在需要對(duì)程序的運(yùn)行過程進(jìn)行調(diào)試時(shí),使用快照數(shù)據(jù)重現(xiàn)模塊(6),讀取外部存儲(chǔ)中已經(jīng)保存的快照信息,并將一個(gè)或多個(gè)快照順序的展示給用戶,實(shí)現(xiàn)一種近似的可重現(xiàn)調(diào)試效果。
[0024]在上述的技術(shù)方案下,本發(fā)明的有益效果主要在于,整體上提出了一種具有實(shí)用性的并行程序可重現(xiàn)調(diào)試方法,方法的具體優(yōu)勢(shì)體現(xiàn)在實(shí)現(xiàn)簡(jiǎn)單、使用靈活和額外代價(jià)小這三點(diǎn)上。實(shí)現(xiàn)簡(jiǎn)單方面,現(xiàn)有的并行程序可重現(xiàn)調(diào)試技術(shù)一般都對(duì)硬件以及操作系統(tǒng)具有較大的依賴。而本發(fā)明提出的方法只需要在操作系統(tǒng)中添加三個(gè)較小的功能模塊,相比之下對(duì)系統(tǒng)和硬件具有更小的依賴,實(shí)現(xiàn)簡(jiǎn)單,具有更大的泛用性;使用靈活方面,在本發(fā)明提供的技術(shù)方案框架中,用戶可以根據(jù)需要設(shè)定快照捕捉的關(guān)鍵點(diǎn)和快照的具體內(nèi)容;額外代價(jià)小方法,已有的實(shí)現(xiàn)可重現(xiàn)調(diào)試的方法,為了實(shí)現(xiàn)程序的實(shí)際復(fù)現(xiàn),在多核多線程程序的應(yīng)用場(chǎng)景下都需要記錄大量的內(nèi)存訪問順序,而本發(fā)明提出的方法并不要求程序的實(shí)際復(fù)現(xiàn),只需關(guān)注用戶指定的一些關(guān)鍵點(diǎn),為實(shí)現(xiàn)可重現(xiàn)調(diào)試而引入的代價(jià)較小。且具體的額外代價(jià)與線程數(shù)無關(guān)。
【專利附圖】
【附圖說明】
[0025]圖1是本發(fā)明基于運(yùn)行快照序列的并行程序重現(xiàn)調(diào)試方法的流程圖與捕捉部分結(jié)構(gòu)框圖。
[0026]圖2是本發(fā)明基于運(yùn)行快照序列的并行程序重現(xiàn)調(diào)試方法的重現(xiàn)部分結(jié)構(gòu)框圖。
[0027]圖3是本發(fā)明快照捕捉觸發(fā)核處理流程圖。
[0028]圖4是本發(fā)明快照捕捉響應(yīng)核處理流程圖。
[0029]圖5是本發(fā)明輔助轉(zhuǎn)存線程處理流程圖。
[0030]圖6是本發(fā)明額外進(jìn)程調(diào)度策略處理流程圖。
【具體實(shí)施方式】
[0031]下面結(jié)合附圖,對(duì)本發(fā)明的【具體實(shí)施方式】進(jìn)行進(jìn)一步的說明。
[0032]圖1和圖2給出了本發(fā)明所提出的捕捉、重現(xiàn)的技術(shù)方案。在具體的實(shí)施方式中,本發(fā)明的技術(shù)方案可以劃分為快照保存觸發(fā)模塊4、快照捕捉執(zhí)行模塊1、快照信息維護(hù)模塊2、額外進(jìn)程調(diào)度策略模塊3、輔助轉(zhuǎn)存線程模塊5和快照數(shù)據(jù)重現(xiàn)模塊6。
[0033]下面將對(duì)上述各個(gè)模塊的具體實(shí)現(xiàn)方式進(jìn)行進(jìn)一步詳細(xì)的說明。
[0034]快照保存觸發(fā)模塊4
[0035]快照保存觸發(fā)模塊4所對(duì)應(yīng)的機(jī)器指令會(huì)混合編譯到用戶編寫的程序中。提供多種邏輯供用戶觸發(fā)快照的保存。該快照保存觸發(fā)模塊4中同樣需要實(shí)現(xiàn)一種和處理器硬件進(jìn)行交互的機(jī)制,用來控制快照保存時(shí)多個(gè)處理器核的行為。
[0036]在快照保存觸發(fā)模塊4中,所提供給用戶的是一個(gè)可以采用多種方式調(diào)用的程序庫。在一個(gè)典型的程序庫中,用戶可以采用如下的幾種方式完成快照的觸發(fā)。
[0037](A)直接觸發(fā)方式:如程序庫提供給用戶一個(gè)可調(diào)用的函數(shù)DoSnapO,用戶在調(diào)用該函數(shù)后就可以觸發(fā)快照的采集。
[0038](B)條件觸發(fā)方式:可以成為條件觸發(fā)的觸發(fā)方式有很多種,例如:使用assert的語義,當(dāng)某個(gè)變量不滿足/滿足某個(gè)條件時(shí)就觸發(fā)快照的捕捉;使用try/catch語義,結(jié)合異常觸發(fā)的機(jī)制,當(dāng)出現(xiàn)某種類型的異常時(shí)就出發(fā)快照的捕捉。
[0039](C)信號(hào)觸發(fā)方式:當(dāng)用戶定義的并行程序在執(zhí)行的過程中產(chǎn)生某些特定的信號(hào),如段錯(cuò)誤信號(hào)(信號(hào)類型并不限定于必須停止程序執(zhí)行的致命信號(hào))時(shí),就觸發(fā)快照的捕捉。上述的信號(hào)是針對(duì)Linux系統(tǒng)環(huán)境進(jìn)行說明的。本領(lǐng)域的技術(shù)人員可以了解到,Linux系統(tǒng)是一種目前使用非常廣泛的操作系統(tǒng),在其他的常用商業(yè)操作系統(tǒng)中,如Window/Unix中,也會(huì)支持類似的信號(hào)發(fā)送和捕獲功能。
[0040]快照保存觸發(fā)模塊4在具體的實(shí)施過程中需要關(guān)注的另一點(diǎn)就是對(duì)多個(gè)處理器核(如處理器核A、處理器核B、處理器核C、處理器核D等)的控制。對(duì)于共享內(nèi)存執(zhí)行環(huán)境下的多線程程序,屬于同一進(jìn)程的多個(gè)線程可能同時(shí)在多個(gè)處理器的物理核上執(zhí)行。在這種情況下,如果處理器核A觸發(fā)快照捕捉后不對(duì)處理器核B和處理器核C進(jìn)行控制而直接進(jìn)行快照保存。則最后保存的快照結(jié)果,有極大的可能出現(xiàn)各個(gè)線程的快照信息不在同一時(shí)間點(diǎn)上的情況,在這種情況下,最終保存得到的快照信息是和實(shí)際執(zhí)行過程不符,甚至可能對(duì)用戶的調(diào)試過程產(chǎn)生誤導(dǎo)的。因此,快照保存觸發(fā)模塊4需要對(duì)處理器的多個(gè)物理核進(jìn)行控制,在保存快照的過程中使多個(gè)處理器核同時(shí)暫停。
[0041]暫停一個(gè)處理器核上程序的運(yùn)行。常用的方法分為軟件和硬件兩種。軟件的方法即利用操作系統(tǒng)對(duì)進(jìn)程的調(diào)度來完成指定線程的停止執(zhí)行。但軟件方法必須在用戶程序需要執(zhí)行特權(quán)執(zhí)行并進(jìn)入系統(tǒng)態(tài)時(shí)才會(huì)生效,在這樣的情況下,發(fā)出停止信號(hào)到目標(biāo)線程實(shí)際停止,這期間可能產(chǎn)生的延遲是不確定的。而硬件的方法則是使用處理器硬件提供的控制功能,一般會(huì)在一個(gè)處理器執(zhí)行時(shí)間周期內(nèi)完成控制的生效。
[0042]目前在主流的商用處理器中都可以實(shí)現(xiàn)上述的硬件控制多個(gè)處理器核暫停的功能。本發(fā)明的具體保護(hù)點(diǎn)并不涵蓋于硬件暫停方法的具體實(shí)現(xiàn)過程。但是在【具體實(shí)施方式】的說明中,可以給出特定硬件平臺(tái)上的一種具體實(shí)現(xiàn)方法:該方法適用于Intel IA-32/64處理器架構(gòu)。本領(lǐng)域的技術(shù)人員可以了解到,Intel IA-32/64處理器架構(gòu)是目前應(yīng)用最為廣泛的一款商用處理器架構(gòu)。Intel IA-32/64處理器架構(gòu)中,提供了 IPIs技術(shù),即跨處理器中斷。通過使用IPIs技術(shù),用戶可以實(shí)現(xiàn)軟件上的中斷自我觸發(fā)。在Intel IA-32/64架構(gòu)多核處理器的每個(gè)處理器核中,都具有1cal-APIC部件。用戶在使用匯編指令向1cal-APIC中的RAC寄存器寫入數(shù)值后,即可以向其他所有的處理器核廣播特定類型的中斷。
[0043]則在Intel IA-32/64處理器架構(gòu)中,快照保存觸發(fā)模塊4控制功能的一個(gè)可能的具體實(shí)現(xiàn)流程為:
[0044]1.用戶程序觸發(fā)快照保存。
[0045]2.設(shè)觸發(fā)快照保存的線程所運(yùn)行于的處理器核為coreA。向coreA中1cal-APIC部件中的RAC寄存器寫入實(shí)現(xiàn)定義的中斷類型。
[0046]3.事先將快照保存執(zhí)行模塊的程序作為特定中斷的處理函數(shù)進(jìn)行注冊(cè)。則所有的處理器核可以在一個(gè)指令周期內(nèi)暫停并轉(zhuǎn)入快照保存執(zhí)行程序。
[0047]快照捕捉執(zhí)行模塊I
[0048]快照捕捉執(zhí)行模塊I需要事先作為附加模塊添加至操作系統(tǒng)中,負(fù)責(zé)實(shí)際執(zhí)行快照的保存過程。在保存過程中需要對(duì)處理器核的類型加以區(qū)分,劃分為觸發(fā)核和響應(yīng)核,并進(jìn)行不同的處理。
[0049]在快照捕捉模塊I的具體實(shí)施方案中,首先要對(duì)處理器核的類型進(jìn)行定義。設(shè)觸發(fā)快照保存的線程所運(yùn)行于的處理器核為觸發(fā)核,其他的所有處理器物理核為響應(yīng)核。在實(shí)際的快照保存執(zhí)行流程中,觸發(fā)核為實(shí)際執(zhí)行保存的處理器核,響應(yīng)核需要完成的則為部分同步操作。
[0050]快照捕捉觸發(fā)核的具體處理流程如圖3所示。以下將對(duì)圖3中展示的具體流程進(jìn)行進(jìn)一步的說明:
[0051](A)在快照觸發(fā)前,于觸發(fā)核上執(zhí)行的為需要保存進(jìn)程的一個(gè)線程(在本部分的說明中稱之為目標(biāo)進(jìn)程和目標(biāo)線程)。在目標(biāo)線程執(zhí)行的過程中,用戶的邏輯觸發(fā)了快照的保存,使用上文已經(jīng)提到的處理器控制方法,讓觸發(fā)核的執(zhí)行轉(zhuǎn)入快照保存執(zhí)行部分。
[0052](B)在轉(zhuǎn)入快照保存執(zhí)行部分后,首先與快照信息維護(hù)模塊進(jìn)行交互,聲明目標(biāo)進(jìn)程的快照保存過程開始。
[0053](C)執(zhí)行實(shí)際的快照保存過程。從操作系統(tǒng)中讀取必要信息,獲取與目標(biāo)進(jìn)程相關(guān)的內(nèi)存資源和系統(tǒng)資源,轉(zhuǎn)化成為完整的快照信息,并將快照信息復(fù)制到內(nèi)存中特定的目標(biāo)區(qū)域。
[0054](D)與快照信息維護(hù)模塊進(jìn)行教書,聲明目標(biāo)進(jìn)程的快照保存過程結(jié)束。
[0055](E)觸發(fā)核的快照保存執(zhí)行過程結(jié)束。
[0056]快照捕捉響應(yīng)核的具體處理流程如圖4所示。以下將對(duì)圖4中展示的具體流程進(jìn)行進(jìn)一步的說明:
[0057](A)快照捕捉響應(yīng)核接收到硬件發(fā)出的暫停信號(hào),轉(zhuǎn)入快照保存執(zhí)行模塊。
[0058](B)檢查當(dāng)前正在執(zhí)行的進(jìn)程是否為發(fā)出快照捕捉請(qǐng)求的進(jìn)程。如果是,則主動(dòng)結(jié)束當(dāng)前進(jìn)程時(shí)間片的處理,并向操作系統(tǒng)通知,隨后操作系統(tǒng)在調(diào)度的過程中會(huì)調(diào)度其他的進(jìn)程至當(dāng)前的響應(yīng)核。如果否,則返回至程序正常執(zhí)行的狀態(tài)。本領(lǐng)域的技術(shù)人員可以了解到,主動(dòng)結(jié)束時(shí)間片的處理有多種方式,包括執(zhí)行任意特權(quán)指令時(shí)響應(yīng)核進(jìn)入系統(tǒng)態(tài)等。操作系統(tǒng)進(jìn)程調(diào)度中的額外策略體現(xiàn)在額外快照線程調(diào)度策略模塊中。如果不是,則響應(yīng)核將恢復(fù)程序的正常執(zhí)行,不受快照保存行為的影響。
[0059]在觸發(fā)核執(zhí)行快照實(shí)際保存的過程中,還可以根據(jù)用戶的需要對(duì)快照的內(nèi)容進(jìn)行個(gè)性化的定制。在最完整的情況下,快照信息將包括目標(biāo)進(jìn)程所使用的全部?jī)?nèi)存資源(運(yùn)行棧、堆的數(shù)據(jù))、處理器上下文以及其他各類對(duì)調(diào)試有幫助的系統(tǒng)資源。在實(shí)際實(shí)現(xiàn)的過程中,考慮到進(jìn)行調(diào)試的目標(biāo)程序占用的內(nèi)存空間可能較大,且大部分的內(nèi)存中存儲(chǔ)的數(shù)據(jù)對(duì)用戶設(shè)計(jì)的調(diào)試過程并沒有實(shí)際的幫助,這時(shí)候用戶就可以自行定義實(shí)際的快照內(nèi)容,對(duì)完成的快照數(shù)據(jù)進(jìn)行裁剪。例如,只保存運(yùn)行棧中的數(shù)據(jù),或者只保存關(guān)鍵的變量數(shù)據(jù)等。
[0060]在本發(fā)明中提出的捕捉過程中,快照保存觸發(fā)模塊4會(huì)多次滿足觸發(fā)條件,即第一次快照保存觸發(fā)、第二次快照保存觸發(fā)、……、第N次快照保存觸發(fā);使得快照捕捉執(zhí)行模塊I被多次執(zhí)行,即第一次轉(zhuǎn)入快照保存執(zhí)行過程、第二次轉(zhuǎn)入快照保存執(zhí)行過程、……、第N次轉(zhuǎn)入快照保存執(zhí)行過程;最終生成多個(gè)用戶程序快照,即第一次用戶程序快照、第二次用戶程序快照、……、第N次用戶程序快照。
[0061]快照信息維護(hù)模塊2
[0062]快照信息維護(hù)模塊2需要事先作為附加模塊添加至操作系統(tǒng)中,負(fù)責(zé)維護(hù)一個(gè)或多個(gè)正在執(zhí)行快照保存的進(jìn)程的信息??煺詹蹲綀?zhí)行模塊1、額外進(jìn)程調(diào)度策略模塊3都需要與快照信息維護(hù)模塊2進(jìn)行交互。
[0063]快照信息維護(hù)模塊2為需要向操作系統(tǒng)中添加的一個(gè)獨(dú)立模塊。該模塊在內(nèi)部為每個(gè)需要保存快照的用戶進(jìn)程維護(hù)一個(gè)結(jié)構(gòu)體,每個(gè)結(jié)構(gòu)體包含兩種狀態(tài):快照保存狀態(tài)和空閑狀態(tài)。每個(gè)結(jié)構(gòu)體還要對(duì)應(yīng)一個(gè)唯一的進(jìn)程標(biāo)示符,快照信息維護(hù)模塊2可以通過進(jìn)程標(biāo)示符檢索到任意一個(gè)處于運(yùn)行中的需要保存快照的進(jìn)程對(duì)應(yīng)的結(jié)構(gòu)體。在后續(xù)的說明中將上面定義的結(jié)構(gòu)體成為信息管理結(jié)構(gòu)體。
[0064]快照信息維護(hù)模塊2向外提供四個(gè)調(diào)用接口:進(jìn)程運(yùn)行開始、進(jìn)程運(yùn)行結(jié)束、快照保存開始以及快照保存結(jié)束。
[0065]進(jìn)程運(yùn)行開始接口由操作系統(tǒng)在創(chuàng)建一個(gè)需要保存快照的用戶進(jìn)程時(shí)調(diào)用。調(diào)用后快照信息維護(hù)模塊2會(huì)針對(duì)新新創(chuàng)建的用戶進(jìn)程創(chuàng)建信息管理結(jié)構(gòu)體。并且結(jié)構(gòu)體處于空閑狀態(tài)。于此對(duì)應(yīng)的,進(jìn)程運(yùn)行結(jié)束接口有操作系統(tǒng)的一個(gè)需要保存快照的用戶進(jìn)程結(jié)束時(shí)調(diào)用。調(diào)用后將會(huì)刪除與該進(jìn)程對(duì)應(yīng)的信息管理結(jié)構(gòu)體。
[0066]快照保存開始以及快照保存結(jié)束則由快照捕捉執(zhí)行模塊I中定義的觸發(fā)核調(diào)用。當(dāng)觸發(fā)核轉(zhuǎn)入快照捕捉執(zhí)行模塊I的執(zhí)行時(shí),會(huì)首先調(diào)用快照保存開始接口,隨后快照信息維護(hù)模塊2便會(huì)將對(duì)應(yīng)信息管理結(jié)構(gòu)體的狀態(tài)改變?yōu)榭煺毡4鏍顟B(tài)。當(dāng)觸發(fā)核完成了快照的保存后,會(huì)調(diào)用快照保存結(jié)束接口,隨后快照信息維護(hù)模塊2變回將對(duì)應(yīng)信息管理結(jié)構(gòu)體的狀態(tài)改變?yōu)榭煺毡4鏍顟B(tài)。
[0067]額外進(jìn)程調(diào)度策略模塊3
[0068]額外進(jìn)程調(diào)度策略模塊3需要實(shí)現(xiàn)作為附加模塊添加至操作系統(tǒng)中。在操作系統(tǒng)實(shí)際運(yùn)行的過程中,與已有的線程調(diào)度策略相結(jié)合,實(shí)現(xiàn)與已有機(jī)制存在一定不同的新型線程調(diào)度策略。
[0069]本發(fā)明中的額外進(jìn)程調(diào)度策略模塊3,需要作為一個(gè)附加部分添加到操作系統(tǒng)的整體線程調(diào)度策略中。本領(lǐng)域的技術(shù)人員可以了解到,目前主流使用的操作系統(tǒng),如Windows/Linux/Unix,其內(nèi)部具有較為獨(dú)立的線程調(diào)度策略模塊。在操作系統(tǒng)已有的調(diào)度策略的基礎(chǔ)上,如圖6所示額外進(jìn)程調(diào)度策略模塊3的運(yùn)行流程如下:
[0070](A)運(yùn)行操作系統(tǒng)中原始的線程調(diào)度策略,得到調(diào)度結(jié)果。針對(duì)處理器核D的一次調(diào)度可以被表示為:將進(jìn)程P調(diào)度到處理器核D執(zhí)行。
[0071](B)從快照信息維護(hù)模塊2中獲取任意進(jìn)程P對(duì)應(yīng)的快照保存狀態(tài)。如果進(jìn)程P是處于快照保存狀態(tài),則需要拒絕此次進(jìn)程調(diào)度;如果否,則接受此次調(diào)度。
[0072](C)拒絕進(jìn)程調(diào)度后會(huì)再次調(diào)用操作系統(tǒng)中原始的線程調(diào)度策略,直至線程調(diào)度策略產(chǎn)生的結(jié)果為可接受為止。
[0073]輔助轉(zhuǎn)存線程模塊5
[0074]輔助轉(zhuǎn)存線程模塊5需要實(shí)現(xiàn)作為附加模塊添加至操作系統(tǒng)中,負(fù)責(zé)將一個(gè)或多個(gè)正在執(zhí)行快照保存的進(jìn)程所保存的快照,在適當(dāng)?shù)臅r(shí)機(jī)轉(zhuǎn)存如外部存儲(chǔ)中。
[0075]本發(fā)明所提出的運(yùn)行快照記錄方法,在程序占用內(nèi)存空間較大,或者程序運(yùn)行時(shí)間較長(zhǎng)時(shí),可能產(chǎn)生的快照數(shù)據(jù)量是比較大的。如果將所有的快照數(shù)據(jù)都保存在內(nèi)存會(huì)導(dǎo)致存儲(chǔ)資源的耗盡。因此,需要在程序運(yùn)行的過程中,定時(shí)將部分的快照數(shù)據(jù)轉(zhuǎn)存如外部存儲(chǔ)中。
[0076]一個(gè)可以考慮的方案為讓觸發(fā)核在執(zhí)行實(shí)際的快照保存時(shí),每添加一個(gè)快照后,就檢查當(dāng)前存儲(chǔ)的快照容量是否超出限制,如果超出限制則將部分快照信息轉(zhuǎn)存到外部存儲(chǔ)中。但是采用此種方案時(shí),快照保存操作的運(yùn)行時(shí)間可能較長(zhǎng),這會(huì)對(duì)需要保存快照的進(jìn)程的運(yùn)行產(chǎn)生較大的影響。
[0077]為了解決這一問題,在實(shí)際的實(shí)現(xiàn)方案中引入了輔助轉(zhuǎn)存線程模塊5。所述的輔助轉(zhuǎn)存線程模塊5與快照捕捉執(zhí)行模塊I和快照信息維護(hù)模塊2相互配合運(yùn)行。當(dāng)有一個(gè)新的需要保存快照的進(jìn)程開始運(yùn)行時(shí),快照信息維護(hù)模塊2便會(huì)為其在內(nèi)存中分配一定的快照保存空間,快照捕捉執(zhí)行模塊I會(huì)將該進(jìn)程產(chǎn)生的用戶程序快照寫入到該內(nèi)存區(qū)域中。而輔助轉(zhuǎn)存線程模塊5則會(huì)同時(shí)關(guān)注所有正在運(yùn)行的需要保存快照的進(jìn)程對(duì)應(yīng)的內(nèi)存區(qū)域。其具體的運(yùn)行流程如圖5所示:
[0078](A)在操作系統(tǒng)開始運(yùn)行后,輔助轉(zhuǎn)存線程模塊5就作為一個(gè)獨(dú)立的模塊伴隨操作系統(tǒng)開始運(yùn)行。在實(shí)際運(yùn)行的過程中,輔助轉(zhuǎn)存線程模塊5始終執(zhí)行以下的循環(huán)。
[0079](B)輔助轉(zhuǎn)存線程模塊5遍歷所有已經(jīng)啟動(dòng)的進(jìn)程列表。
[0080](C)針對(duì)每一個(gè)進(jìn)程,首先檢查該進(jìn)程是否執(zhí)行結(jié)束。如果是已經(jīng)執(zhí)行結(jié)束,則需要將該進(jìn)程在內(nèi)存中存儲(chǔ)的所有快照信息都寫入到外部存儲(chǔ)中。如果否,則繼續(xù)執(zhí)行下一步的檢查。
[0081](D)檢查當(dāng)前進(jìn)程在內(nèi)存中存儲(chǔ)的快照信息是否超過了容量限制,如果是超過則將部分快照信息寫入到外部存儲(chǔ)中,如果否,則不進(jìn)行任何的快照轉(zhuǎn)存操作。這里的容量限制可以根據(jù)系統(tǒng)各種性能指標(biāo)靈活的制定。
[0082](E)針對(duì)當(dāng)前進(jìn)程的檢查和轉(zhuǎn)存操作結(jié)束。跳至(B),繼續(xù)循環(huán)。
[0083]快照數(shù)據(jù)重現(xiàn)模塊6
[0084]快照數(shù)據(jù)重現(xiàn)模塊6在并行程序執(zhí)行完成后運(yùn)行,從外部存儲(chǔ)中讀取已經(jīng)保存的快照信息,并結(jié)合具有一般功能的調(diào)試工具將快照信息連續(xù)的展示給用戶,從而提供完整的調(diào)試功能。
[0085]快照數(shù)據(jù)重現(xiàn)模塊6的實(shí)現(xiàn)方案可以整體分為兩個(gè)部分,第一是單一快照中的信息完整的展示給用戶,第二是實(shí)現(xiàn)多個(gè)快照(即重現(xiàn)第一次用戶程序快照、重現(xiàn)第二次用戶程序快照、……、重現(xiàn)第N次用戶程序快照)之間的連續(xù)播放、跳轉(zhuǎn)等功能。
[0086]針對(duì)第一部分,如果保存的快照為完整版本,即包含了程序占有的全部?jī)?nèi)存資源(堆、運(yùn)行棧),則可以結(jié)合已有的調(diào)試工具進(jìn)行展示。GDB為一個(gè)目前應(yīng)用最為廣泛的調(diào)試工具,在GDB結(jié)合Linux系統(tǒng)可以實(shí)現(xiàn)core dump的功能,即當(dāng)用戶程序崩潰時(shí)會(huì)自動(dòng)捕捉用戶程序鎖占有的全部?jī)?nèi)存資源,形成一個(gè)core dump文件。⑶B可以加載core dump文件,加載后用戶可以自由的查看程序中運(yùn)行棧和堆中任意地址上的數(shù)據(jù)。
[0087]快照信息的展示便可以和⑶B已有的core dump功能相結(jié)合。具體實(shí)施方法為:采用偽裝的方法,將一個(gè)保存得到的快照信息偽裝成一個(gè)完整的core dump文件,從而可以加載到GDB中進(jìn)行查看。使用這種方法,一方面可以充分的利用已有調(diào)試工具的功能,另一方面也可以使新型的調(diào)試方法作為已有通用調(diào)試工具的一個(gè)新功能進(jìn)行發(fā)布,從而增加發(fā)明的易用性和可擴(kuò)展性。
[0088]針對(duì)上述的第二部分,本領(lǐng)域的技術(shù)人員可以了解到,其整體實(shí)現(xiàn)方法較為清晰和簡(jiǎn)單。
[0089]本發(fā)明是一種基于運(yùn)行快照序列的并行程序調(diào)試方法,所要解決的是并行程序,尤其共享內(nèi)存的多線程程序的可重現(xiàn)調(diào)試的技術(shù)問題。該方法在并行程序運(yùn)行過程中,于用戶指定的關(guān)鍵點(diǎn)完成快照的保存;在并行程序運(yùn)行結(jié)束后,向用戶展示快照信息以恢復(fù)出程序在設(shè)定關(guān)鍵點(diǎn)的運(yùn)行場(chǎng)景。該方法利用快照保存和重現(xiàn)的技術(shù)手段,將并行程序的調(diào)試執(zhí)行由物理執(zhí)行轉(zhuǎn)化為了邏輯執(zhí)行,從而克服了并行程序可重現(xiàn)所面臨的效率問題,具有實(shí)現(xiàn)簡(jiǎn)單、使用靈活和額外代價(jià)小這三個(gè)主要優(yōu)勢(shì)和技術(shù)效果。
【權(quán)利要求】
1.一種基于運(yùn)行快照序列的并行程序重現(xiàn)調(diào)試方法,其特征在于具有以下步驟:在多核多線程的并行程序運(yùn)行環(huán)境中,在用戶并行程序運(yùn)行的過程中通過快照保存觸發(fā)模塊(4)觸發(fā)快照捕捉執(zhí)行模塊(1),捕捉多個(gè)運(yùn)行快照;所捕捉到的快照信息由快照信息維護(hù)模塊(2)進(jìn)行維護(hù),并經(jīng)由輔助轉(zhuǎn)存線程模塊(5)寫入外部存儲(chǔ)器中;在快照捕捉的過程中,讓額外進(jìn)程調(diào)度策略模塊(3)與系統(tǒng)中已有的調(diào)度策略結(jié)合,以實(shí)現(xiàn)性能的優(yōu)化;在并行程序運(yùn)行結(jié)束后,將多個(gè)快照的詳細(xì)信息經(jīng)由快照數(shù)據(jù)重現(xiàn)模塊(6)展示給用戶,并提供快照間的前后跳轉(zhuǎn)操作; 所述的運(yùn)行快照,包含用戶并行程序所使用的如運(yùn)行棧,堆的全部?jī)?nèi)存資源,以及保存時(shí)刻所有處理器核的上下文。
2.根據(jù)權(quán)利要求1所述的基于運(yùn)行快照序列的并行程序重現(xiàn)調(diào)試方法,其特征在于:在用戶并行程序運(yùn)行的過程中捕捉多個(gè)運(yùn)行快照的具有以下步驟:提供快照觸發(fā)程序庫,將快照的觸發(fā)方式以程序庫的方式提供給用戶,由用戶根據(jù)程序具體邏輯決定快照的捕捉點(diǎn);在用戶觸發(fā)快照的捕捉后,對(duì)硬件環(huán)境中的多個(gè)處理器核進(jìn)行控制,以保證快照捕捉的有效性;轉(zhuǎn)入操作系統(tǒng)中預(yù)先添加的快照捕捉執(zhí)行模塊,完成快照內(nèi)容的捕捉和存儲(chǔ);一次快照捕捉執(zhí)行結(jié)束后,用戶的并行程序繼續(xù)正常的執(zhí)行。
3.根據(jù)權(quán)利要求1所述的基于運(yùn)行快照序列的并行程序重現(xiàn)調(diào)試方法,其特征在于:所述快照保存觸發(fā)模塊(4)在快照的觸發(fā)方式中,以程序庫的方式提供用戶的條件下,程序庫中包含多種的快照觸發(fā)方式的: 直接觸發(fā),即用戶調(diào)動(dòng)快照捕捉函數(shù)直接觸發(fā)快照的捕捉; 條件觸發(fā),即用戶使用assert以及try/catch等予以,在程序執(zhí)行滿足某種條件時(shí)觸發(fā)快照的捕捉等。提供程序庫的意義在于允許用戶通過代碼邏輯自行靈活定義快照的觸發(fā)時(shí)機(jī)。 與程序庫相關(guān)的保護(hù)范圍包含但不限于上述的具體觸發(fā)方式。
4.根據(jù)權(quán)利要求1所述的基于運(yùn)行快照序列的并行程序重現(xiàn)調(diào)試方法,其特征在于:所述快照捕捉執(zhí)行模塊(1)對(duì)硬件環(huán)境中的多個(gè)處理器核進(jìn)行控制,當(dāng)多個(gè)處理器核其中的一個(gè)觸發(fā)后,使用硬件提供的控制功能,控制其他所有的處理器核中斷當(dāng)前程序的指令并轉(zhuǎn)入特定的中斷處理器程序。
5.根據(jù)權(quán)利要求1所述的基于運(yùn)行快照序列的并行程序重現(xiàn)調(diào)試方法,其特征在于:在所述的快照捕捉執(zhí)行模塊(1)中,對(duì)當(dāng)前所執(zhí)行的處理器核進(jìn)行判斷,如果當(dāng)前處理器核觸發(fā)了快照的保存,則稱之為觸發(fā)核,否則,稱之為響應(yīng)核;對(duì)于觸發(fā)核,首先要向快照信息管理模塊聲明快照保存的開始,根據(jù)用戶定制策略篩選出需要保存的快照信息,并將快照信息寫入與進(jìn)程對(duì)應(yīng)的內(nèi)存區(qū)域。隨后,向快照信息管理模塊聲明快照保存結(jié)束,結(jié)束快照的保存過程;對(duì)于響應(yīng)核,需要判斷當(dāng)前執(zhí)行的代碼是否為需要保存快照的目標(biāo)進(jìn)程的代碼,如果是,則主動(dòng)結(jié)束當(dāng)前時(shí)間片的指令,否則,恢復(fù)程序的正常指令,不受快照保存過程的影響。
6.根據(jù)權(quán)利要求1所述的基于運(yùn)行快照序列的并行程序重現(xiàn)調(diào)試方法,其特征在于:在所述的額外進(jìn)程調(diào)度策略模塊(3)中,作為一個(gè)額外的調(diào)度策略添加到操作系統(tǒng)已有的線程調(diào)度模塊中;首先調(diào)用操作系統(tǒng)已有的線程調(diào)度模塊,得到一個(gè)新的調(diào)度操作<T,P>,即將線程Τ調(diào)度至處理器Ρ上執(zhí)行。與快照信息管理模塊進(jìn)行交互,判斷線程Τ對(duì)應(yīng)的進(jìn)程是否正在執(zhí)行快照保存,如果正在執(zhí)行,則拒絕此次調(diào)度,并申請(qǐng)一個(gè)新的線程調(diào)度結(jié)果,如果未執(zhí)行快照保存,則通過此次調(diào)度,并實(shí)際執(zhí)行線程調(diào)度。
7.根據(jù)權(quán)利要求1所述的基于運(yùn)行快照序列的并行程序重現(xiàn)調(diào)試方法,其特征在于:在所述的輔助轉(zhuǎn)存線程模塊(6)中,伴隨操作系統(tǒng)而啟動(dòng),之后始終使用一個(gè)獨(dú)立的線程執(zhí)行如下的循環(huán):A訪問快照信息管理模塊,獲得當(dāng)前所有需要保存快照的進(jìn)程列表出對(duì)列表中的每個(gè)進(jìn)程進(jìn)行檢查,如果進(jìn)程已經(jīng)執(zhí)行結(jié)束,則將該進(jìn)程在內(nèi)存中保存的全部快照信息寫入外部存儲(chǔ)中,并通知快照信息管理模塊刪除該進(jìn)程的信息。如果進(jìn)程未執(zhí)行結(jié)束,則檢查進(jìn)程寫入內(nèi)存中的快照信息是否超過預(yù)先定義的容量限制,如果超過,則將該進(jìn)程當(dāng)前寫入內(nèi)存中的快步快照信息都寫入內(nèi)部存儲(chǔ)中;C跳至A,繼續(xù)循環(huán)。
8.根據(jù)權(quán)利要求1所述的基于運(yùn)行快照序列的并行程序重現(xiàn)調(diào)試方法,其特征在于:在所述的快照信息維護(hù)模塊(2)中,提供快照進(jìn)程創(chuàng)建、進(jìn)程執(zhí)行結(jié)束、快照捕捉開始、快照捕捉結(jié)束、進(jìn)程信息獲取以及進(jìn)程信息刪除這5個(gè)對(duì)外調(diào)用的接口。當(dāng)快照進(jìn)程創(chuàng)建接口被調(diào)用時(shí),為該進(jìn)程創(chuàng)建狀態(tài)變量,并分配一塊內(nèi)存中的存儲(chǔ)空間。狀態(tài)變量的狀態(tài)包括:正常執(zhí)行、快照保存中以及執(zhí)行結(jié)束;當(dāng)進(jìn)程執(zhí)行結(jié)束接口被調(diào)用時(shí),將對(duì)應(yīng)進(jìn)程的狀態(tài)置為執(zhí)行結(jié)束;當(dāng)快照捕捉開始接口被調(diào)用時(shí),將對(duì)應(yīng)進(jìn)程的狀態(tài)置為快照保存中;當(dāng)快照捕捉結(jié)束接口被調(diào)用時(shí),將對(duì)應(yīng)進(jìn)程的狀態(tài)置為正常執(zhí)行;當(dāng)進(jìn)程信息獲取接口被調(diào)用時(shí),將全部的進(jìn)程信息返回給調(diào)用者;當(dāng)進(jìn)程信息刪除接口被調(diào)用時(shí),刪除對(duì)應(yīng)進(jìn)程的狀態(tài)變量,并釋放為其分配的內(nèi)存空間。
9.根據(jù)權(quán)利要求1所述的基于運(yùn)行快照序列的并行程序重現(xiàn)調(diào)試方法,其特征在于:在并行程序運(yùn)行結(jié)束后,通過快照數(shù)據(jù)重現(xiàn)模塊(6)將多個(gè)快照的詳細(xì)信息展示給用戶,并提供快照間的前后跳轉(zhuǎn)操作,其特征在于,具有一下步驟:從外部存儲(chǔ)中讀取進(jìn)程保存的全部快照信息;使用已有的調(diào)試工具,或使用定制的調(diào)試工具,向用戶展示任意一個(gè)快照的詳細(xì)信息。如果使用的是已有的調(diào)試工具,則需要根據(jù)工具的要求,對(duì)快照數(shù)據(jù)的格式進(jìn)行一定的轉(zhuǎn)變;用戶在瀏覽其中一個(gè)快照的過程中,可以選擇跳轉(zhuǎn)至其他快照,包括前一個(gè)快照,后一個(gè)快照,或者運(yùn)行過程中的任意一個(gè)快照。
【文檔編號(hào)】G06F11/36GK104461876SQ201410697303
【公開日】2015年3月25日 申請(qǐng)日期:2014年11月26日 優(yōu)先權(quán)日:2014年11月26日
【發(fā)明者】劉軼, 王博弘 申請(qǐng)人:北京航空航天大學(xué)