新四季網

對代碼覆蓋使用硬體輔助的自主測試用例反饋的方法和設備的製作方法

2023-05-01 09:34:51

專利名稱:對代碼覆蓋使用硬體輔助的自主測試用例反饋的方法和設備的製作方法
技術領域:
本發明總體上涉及改進的數據處理系統。具體地,本發明提供了一種用於獲取數據處理系統中的性能數據的方法和設備。更具體地,本發明提供了一種在獲得數據處理系統中的代碼覆蓋數據時,對軟體工具提供硬體輔助的方法和設備。
背景技術:
在分析和增強數據處理系統以及在數據處理系統內執行的應用程式的性能時,如果知道數據處理系統內的哪些軟體模塊正在使用系統資源,是很有幫助的。對數據處理系統的有效管理和增強要求知道各種系統資源在何時和如何被使用。用性能工具來監視和檢查數據處理系統,以確定當各種軟體應用在數據處理系統中執行時的資源消耗。例如,性能工具可以識別數據處理系統中最常執行的模塊和指令,或者可以識別那些分配最大量內存或者執行I/O請求最多的模塊。硬體性能工具可以被內置在系統中,或者在以後添加。
一種已知的軟體性能工具是跟蹤工具。跟蹤工具可以使用多種技術來提供跟蹤信息,來指示執行程序的執行流。一種技術是通過在特定事件發生時記錄這些事件,來跟蹤特定的指令序列。這種技術稱為基於事件的特徵描繪(profiling)技術。例如,跟蹤工具可以記錄每一次進入和每一離開某個模塊、子例程、方法、函數或者系統部件。或者,跟蹤工具可以記錄內存請求者以及分配給每一個內存分配請求的內存量。一般,對每一個這樣的事件產生一個帶有時間戳記的記錄。使用類似於進入-退出記錄的對應記錄對來跟蹤任意代碼段的執行、I/O或數據傳輸的開始和結束,以及其它許多感興趣的事件。
為了改進各種計算機系列所產生的代碼的性能,常常需要判斷在執行代碼時,處理器將時間花在了什麼地方。在計算機處理領域,這種做法就是通常所說的「熱點」定位。理想情況下,希望在代碼級的指令和/或源行分離出這樣的熱點,以將注意力集中於可能從對代碼的改進獲益最多的區域。
另一種跟蹤技術涉及對程序的執行流定期採樣,以識別程序中看來花費了大量時間的特定位置。這種技術系基於這樣的思想按照規則的間隔,定期中斷應用程式或者數據處理系統的執行。這種技術被稱為基於採樣的特徵描繪技術。在每一次中斷時,記錄預定長度時間的信息,或者記錄感興趣的預定個數的事件的信息。例如,可以在每一個間隔記錄當前執行線程(executing thread)的程序計數器,當前執行線程是被進行特徵描繪的較大程序的一個可執行的部分。可以在後處理時對照數據處理系統的裝入映像圖(load map)以及符號表信息求解這些值,從而可以從該分析得到關於時間花費在什麼地方的概要描述。
使用當前可用的軟體工具確定測試覆蓋範圍是一個困難的問題。當測試程序代碼時,尚不存在一種容易的機制來確定執行什麼代碼,不執行什麼代碼。這種標識也稱為代碼覆蓋(code coverage)。存在標識代碼覆蓋的軟體技術和工具。但是,這些技術和工具通常要改變被測試的代碼。但是並不希望不得不改變或者改編代碼,因為這樣的過程可能冗長而耗費時間。其它類型的技術和工具基於根據程序的靜態分析生成測試用例。這種方法不能保證測試的完全覆蓋。
建立諸如上述這些工具以尋找與特定條件或者問題相關的答案會花費很多精力,並且可能非常難以校準,因為軟體工具本身會影響被測試的系統。本發明認識到,對工具開發和問題分析提供硬體輔助能夠大大減輕開發軟體性能工具所需的工作量。另外,隨著處理器密度(densitiy of processors)的不斷增大,可以將硬體輔助包括進來,以提供另外的調試和分析功能。
因此,希望能夠提供一種改進的方法、設備和計算機指令,用於為分析在數據處理系統中執行的代碼的代碼覆蓋的性能工具提供硬體輔助。

發明內容
本發明提供了一種用於提供代碼的覆蓋數據的方法、設備和計算機指令。獲得包含與代碼相關的指令訪問指示符的覆蓋數據。識別由數據處理系統中的處理器響應處理器對代碼的執行而設置的特定指令訪問指示符,以形成被設定的指令訪問指示符。將每一個被設定的指令訪問指示符與所述代碼的一部分相關聯。產生該覆蓋數據的一個表達。在該表達中標識所述被設定的指令訪問指示符。該表達例如可以是圖形表達。


在所附權利要求中給出了作為本發明的特徵的新穎性特徵。但是,本發明本身,以及其使用的優選方式,以及其進一步的目的和優點,接合附圖閱讀下面對說明性實施例的詳細說明後可以得到最好的理解。附圖中圖1是可以實現本發明的數據處理系統的框圖;圖2是根據本發明的一個優選實施例用於處理信息的處理器系統的框圖;圖3圖解了根據本發明的一個優選實施例,用於處理與指示符相關的指令的部件;圖4圖解了根據本發明的一個優選實施例,用於設定標識已被訪問的存儲單元的指示符的信號的數據流;圖5圖解了根據本發明的一個優選實施例的一種用於將訪問標識符與指令或者存儲單元關聯起來的機制;圖6圖解了根據本發明的一個優選實施例的一個指令束(bundle);圖7的框示了根據本發明的一個優選實施例用於產生元數據比如指示符的部件;圖8是根據本發明的一個舉例的實施例,用頁表把程序指定的存儲器地址轉換為物理地址的數據流的舉例的框圖;圖9是根據本發明的一個例證實施例的例證頁表條目;圖10是根據本發明的一個優選實施例用來標記對指令的訪問的過程的流程圖;圖11是根據本發明的一個優選實施例,其後跟隨指令高速緩存的設定指令訪問指示符的過程的流程圖;圖12是根據本發明的一個優選實施例,標記對子例程的訪問的過程的流程圖;圖13是根據本發明的一個優選實施例,標記對代碼段的訪問的過程的流程圖;圖14是根據本發明的一個優選實施例,用來分析代碼覆蓋數據的部件的框圖;圖15是根據本發明的一個優選實施例,用來收集代碼覆蓋數據和顯示程序內被覆蓋和不被覆蓋的路徑的過程的流程圖;圖16是根據本發明的一個優選實施例,用來標記對包含數據的存儲單元的訪問的過程的流程圖;圖17是根據本發明的一個優選實施例,其後跟隨數據高速緩存的處理的流程圖;圖18是根據本發明的一個優選實施例,用於當在運行時間內發生動態存儲器分配時,獲取調用棧信息的過程的流程圖;圖19是根據本發明的一個優選實施例,用於在對存儲器解除分配時,發送有關在程序執行期間發生的數據訪問的信息的過程的流程圖;圖20是根據本發明的一個優選實施例,產生調用流樹以標識沒有被初始化或者訪問的區域的過程的流程圖;圖21圖解了根據本發明的一個優選實施例的一個圖形化報告,其圖示了數據區的覆蓋;
圖22是根據本發明的一個優選實施例,用於產生顯示信息的過程的流程圖;圖23是根據本發明的一個優選實施例,使用元數據將數據預先取入高速緩存的過程的流程圖;圖24是根據本發明的一個優選實施例的圖解元數據的過程的流程圖,所述元數據包括將從開始點預先取入的什麼數據的標識。
圖25是根據本發明的一個優選實施例,圖解包括對要從開始點預取出什麼數據的標識的元數據的處理的流程圖。
具體實施例方式
現在看圖1,圖1表示了其中可以實現本發明的數據處理系統的框圖。客戶機100是計算機的一個例子,其中可以有實現本發明的處理的代碼或者指令。客戶機100應用外圍部件互連(PCI)局部總線結構。儘管所圖示的例子應用的是PCI總線,但是也可以使用其它總線結構,比如加速圖形埠(Accelerated Graphics Port(AGP))以及工業標準結構(Industry Standard Architecture(ISA))。處理器102和主存儲器104通過PCI橋108連接到PCI局部總線106。PCI橋108還可以包括集成存儲器控制器和處理器102用高速緩存存儲器。可以通過直接部件互連或者通過插入板(add-in board)向PCI局部總線106進行另外的連接。
在圖示的例子,區域網(LAN)適配器110、小型計算機系統接口SCSI主機總線適配器112以及擴展總線接口114通過直接部件連接被連接到PCI局部總線106。相反,音頻適配器116、圖形適配器118以及音頻/視頻適配器119通過插入擴展槽的插入板連接到PCI局部總線106。擴展總線接口114為鍵盤和滑鼠適配器120、數據機122和附加存儲器124提供連接。SCSI主機總線適配器112為硬碟驅動器126、磁帶驅動器128以及CD-ROM驅動器130提供連接。典型的PCI局部總線實現支持三個或者四個PCI擴展槽或者插入連接器(add-in connector)。
作業系統在處理器102上運行,用來協調和控制圖1的數據處理系統100中的各種部件。作業系統可以是市場上可購買的作業系統比如可從微軟公司獲得的Windows XP。面向對象的編程系統比如Java可以接合作業系統運行,提供從在客戶機100上執行的Java程序或者應用對作業系統的調用。「Java」是昇陽電腦公司(Sun Microsystems,Inc)的商標。用於作業系統、面向對象的編程系統以及應用或者程序的指令位於存儲設備比如硬碟驅動器126上,並可以被裝入主存儲器109以由處理器102執行。
本領域的普通技術人員可以理解,圖1中的硬體可以隨具體實現而變化。除了圖1所示的硬體之外或者取代之,可以使用其它內部硬體或者外圍設備,比如快閃只讀存儲器(ROM)、等效的非易失性存儲器,或者光碟驅動器等。另外,本發明的處理可以應用於多處理器數據處理系統。
例如,客戶機100如果可選地被配置為網絡計算機,則可以不包括SCSI主機總線適配器112、硬碟驅動器126、磁帶驅動器128和CD-ROM 130。在這種情況下,計算機(準確地說是客戶計算機)包括某種類型的網絡通信接口,比如LAN適配器110、數據機122等。又例如,客戶機100可以是一個可引導的獨立系統,而不依賴於某種網絡通信接口,也不管客戶機100是否包括某種類型的網絡通信接口。又例如,客戶機100可以是個人數字助理(PDA),其被配置為具有ROM和/或快閃ROM,以提供用以存儲作業系統文件和/或用戶產生的數據的非易失性存儲器。圖1圖示的例子和上述其它例子不是要對本發明進行結構上的限制。
本發明的處理由處理器102使用計算機實現的指令來執行。所述指令可以位於存儲器比如主存儲器104、存儲器124中,或者位於一個或者多個外圍設備126-130中。
現在看圖2,其中圖示了根據本發明的一個優選實施例,用於處理信息的處理器系統的框圖。處理器210可以被實現為圖1所示的處理器102。
在優選實施例中,處理器210是單集成電路超標量微處理器。因此,如下面所要描述的,處理器210包括各種單元、寄存器、緩衝器、存儲器以及其它部分,它們都是由集成電路形成的。另外,在優選實施例中,處理器210按照精簡指令集計算機(RISC)技術工作。如圖2所示,系統總線211連接到處理器210的總線接口單元(BIU)212。BIU212控制處理器210和系統總線211之間的信息傳輸。
BIU212連接到處理器210的指令高速緩存214和數據高速緩存216。指令高速緩存214將指令輸出到定序器單元218。響應於來自指令高速緩存214的指令,定序器單元218選擇性地將指令輸出到處理器210的其它執行電路。
在優選實施例中,除了定序器單元218之外,處理器210的執行電路包括用來執行指令的許多處理器單元。這些處理器單元也稱為執行單元。這些執行單元例如包括分支單元220、定點單元A(FXUA)222、定點單元B(FXUB)224、復定點(complex fixedpoint)單元(CFXU)226、裝入/存儲單元(LSU)228以及浮點單元(FPU)230。FXUA222,FXUB 224,CFXU 226和LSU 228從通用結構寄存器(general-purposearchitectural register)(GPR)232和定點改名緩衝器(fixed-pointrename buffer)234輸入它們的源操作數信息。另外,FXUA222和FXUB224從進位位(CA)寄存器242輸入「進位位(carry bit)」。FXUA 222,FXUB 224,CFXU 226和LSU 228輸出它們的運算結果(目的操作數信息),用於存儲到定點改名緩衝器234的選定條目中。另外,CFXU 226向專用寄存器處理單元(SPX單元)240輸入輸出源操作數信息和目的操作數信息。
FPU 230從浮點結構寄存器(floating-point architecturalregister)(FPR)236和浮點改名緩衝器238輸入其源操作數信息。FPU230輸出其運算結果(目標操作數信息),用於存儲到浮點改名緩衝器238中的選定條目。
響應於裝入(Load)指令,LSU 228從數據高速緩存216輸入信息,並將這樣的信息拷貝到改名緩衝器234和238中選定的一個。如果這樣的信息未被存儲在數據高速緩存216中,則數據高速緩存216通過BIU212和系統總線211從連接到系統總線211的系統存儲器260輸入這樣的信息。另外,數據高速緩存216能夠通過BIU 212和系統總線211把信息從數據高速緩存216輸出到連接到系統總線211的系統存儲器260。響應於存儲(Store)指令,LSU 228從GPR232和FPR236中選定的一個輸入信息,並將這樣的信息拷貝到數據高速緩存216。
定序器單元218向GPR232和FPR輸入輸出信息。分支單元220從定序器單元218輸入指令和表示處理器210當前狀態的信號。響應於這樣的指令和信號,分支單元220向定序器單元218輸出信號,所述信號指示存儲由處理器210執行的指令序列的合適的存儲器地址。響應於來自分支單元220的這種信號,定序器單元218從指令高速緩存214輸入所指示的指令序列。如果一個或者多個指令序列未被存儲在指令高速緩存214中,則指令高速緩存214通過BIU212和系統總線211,從連接到系統總線211的系統存儲器260輸入這樣的指令。
響應於從指令高速緩存214輸入的指令,定序器單元218將指令選擇性地分派給執行單元220、222、224、226、228和230中選定的單元。每一個執行單元執行特定種類指令的一個或者多個指令。例如,FXUA 222和FXUB 224對源操作數執行第一類定點數學運算,比如加法、減法、與、或以及異或。CFXU 226對源操作數執行第二類定點運算,比如定點乘法和除法。FPU 230對源操作數執行浮點運算,比如浮點乘法和除法。
當信息存儲在選定的一個改名緩衝器234中時,這樣的信息與所選定的改名緩衝器分配的指令所指定的存儲位置(例如GPR232或者CA寄存器242中的一個)相關聯。響應於來自定序器單元218的信號,存儲在選定的一個改名緩衝器234中的信息被拷貝到其相關的一個GPR232(或者CA寄存器242)。定序器單元218響應於產生所述信息的指令的完成,指導(控制)存儲在選定的改名緩衝器234中的信息的上述拷貝。這種拷貝稱為「寫回」。
當信息存儲在選定的改名緩衝器238中時,這樣的信息與FPR236之一相關聯。響應於來自定序器單元218的信號,存儲在選定的改名緩衝器238中的信息被拷貝到其相關的一個FPR 236。定序器單元218響應於產生所述信息的指令的完成,指導(控制)存儲在選定改名緩衝器238中的信息的上述拷貝。
處理器210通過在各個執行單元220、222、224、226、228和230同時處理多個指令來實現高性能。因此,每一個執行作為一系列階段被處理,每一個階段可與其它指令的各階段並行執行。這種技術稱為「流水線技術」(pipelining)。在該說明性實施例的一個重要方面,指令一般作為六個階段被處理,那就是,取數,解碼,分配(調度),執行,完成和寫回。
在取數階段,定序器單元218選擇性地(從指令高速緩存214)從存儲上面結合分支單元220和定序器單元218討論的指令序列的一個或者多個存儲器地址輸入一個或者多個指令。在解碼階段,定序器單元218對多達四個取出的指令解碼。
在分配(調度)階段,在為分配的指令的結果(目標操作數信息)保留改名緩衝器條目之後,定序器單元218將多達四個被解碼的指令選擇性地分配給(響應於解碼階段的解碼)選定的執行單元220,222,224,226,228和230。在分配階段,操作數信息被提供給用於分配的指令的選定執行單元。處理器210按照指令的編程順序分配指令。
在執行階段,執行單元執行其分配的指令,並將其運算結果(目標操作數信息)輸出以存儲到上述改名緩衝器234和改名緩衝器238中的選定條目。這樣,處理器210能夠按照不同於指令的編程順序的順序執行指令。
在完成階段,定序器單元218指出指令已「完成」。處理器210按照指令的編程順序「完成」指令。
在寫回階段,定序器218控制從改名緩衝器234和238分別向GPR 232和FRP 236拷貝信息。定序器單元218控制存儲在選定的改名緩衝器的信息的這種拷貝。類似地,在特定指令的寫回階段,處理器210響應特定指令更新其結構狀態(architectural state)。處理器210按照指令的編程順序處理指令的各「寫回」階段。處理器210最好在規定條件下合併指令的完成階段和寫回階段。
在圖示的實施例中,每一個指令需要一個機器周期以完成指令處理的每一個階段。儘管如此,某些指令(例如CFXU 226執行的復定點指令)可能需要多於一個的機器周期。因此,響應完成在前指令所需的時間的變化,在特定指令的執行和完成階段之間可以發生可變的延遲。
在定序器218內設置完成緩衝器248,用以跟蹤在執行單元內執行的多個指令的完成。在指示已經成功地完成了一個指令或者一組指令時,按照應用特定的順序,完成緩衝器248可以用來啟動把那些已完成的指令的結果傳送給相關的通用寄存器。
另外,處理器210還包括處理器監視單元240,後者連接到指令高速緩存214以及處理器210中的其它單元。處理器210的操作可以使用性能監視單元240來監視,性能監視單元在此說明性實施例中是一個軟體可訪問的機制,其能夠提供描述指令執行資源的使用和存儲控制的詳細信息。儘管在圖2中沒有圖示,性能監視單元240事實上耦接到處理器210的每一個功能單元,以允許監視處理器210的操作的所有方面,包括,例如,重建事件之間的關係,識別錯誤觸發,識別性能瓶頸,監視流水線故障(pipeline stall),監視空閒處理器周期,確定分配效率,確定分支效率,確定未對準數據訪問的性能損失,識別串行化指令的執行的頻率,識別被禁止的中斷,確定性能效率。
性能監視單元240包括數量與實現相關(例如2-8)的計數器241-242,被標記為PMC1和PMC2,它們用來對選定的事件的發生次數進行計數。性能監視單元240還包括至少一個監視器模式控制寄存器(monitor mode control register(MMCR))。在此例子中,存在兩個控制寄存器MMCR243和244,規定計數器241-242的功能。計數器241-242和MMCR 243-244最好被實現為SPR,可通過可由CFXU 26執行MFSPR(move from SPR從SPR移出)和MTSPR(move to SPR移到SPR)指令被訪問以進行讀或者寫。但是,在一個備選實施例中,計數器241、242和MMCR 243-244可以簡單地被實現為I/O空間中的地址。在另一個實施例中,控制寄存器和計數器可以通過索引寄存器間接地被訪問。本實施例在來自因特爾公司的處理器中的IA-64架構中實現。
另外,處理器210還包括中斷單元250,該中斷單元被連接到指令高速緩存214。另外,儘管圖2沒有圖示,中斷單元250被連接到處理器210內的其它處理器單元。中斷單元250可以從其它處理器單元接收信號,啟動動作,比如開始錯誤處理或者軟中斷處理(trapprocess)。在這些例子中,中斷單元250被用來產生在程序執行中可能發生的中斷和異常。
本發明提供了監視特定指令的執行,以及在執行程序時,對特定存儲單元的訪問的能力。這種確定也被稱為代碼覆蓋。具體地,可以使用一個備用欄位來保存一個指示符,該指示符與特定指令或者存儲單元相關聯。可以響應指令的執行或者對存儲單元的訪問設置該指示符。可以使用對這些指示符的檢查來判斷已經執行了什麼代碼,什麼代碼還沒有執行。對於執行代碼期間什麼存儲單元已經被訪問,什麼存儲單元沒有被訪問,可以進行類似的識別。或者,可以在另一個與指令或者存儲單元相關的另一位置存儲所述指示符。
在將指示符置於所述指令中的情況下,一般使用一個備用欄位。但是在某些情況下,可以將指令擴展為包括所述指示符所需的空間。在這種情況下,處理器的架構需要改變。例如,64位架構可能要改變為65位架構,以容納所述指示符。對於數據的訪問,指示符可以與數據或者數據所處的存儲單元相關聯。
在這些說明性的例子中,這些指示符也被稱為訪問指示符。數據訪問指示符與存儲單元相關聯,而指令訪問指示符與指令相關聯。在執行程序之前,這些指示符一般被初始化為未被設置。
當處理器執行一個指令時,設定與該指令相關的指令訪問指示符。對一個存儲單元的訪問導致與該存儲單元相關的指示符被設定。通過檢查已經被設定和未被設定的指示符,可以標識代碼覆蓋。此檢查可以使用在被設計為測試代碼覆蓋的軟體工具中實現的過程進行。這樣,對於指令和對存儲單元的數據訪問,可以實現代碼覆蓋(codecoverage)而無需要求對代碼進行統計分析或者改編(instrumentation)。
現在看圖3,其中圖示了根據本發明的一個優選實施例,在處理與指示符相關的指令時使用的部件。指令高速緩存300接收指令束(bundle)302。指令高速緩存300是圖2的指令高速緩存214的一個例子。一個指令束是一個指令組(grouping of instructions)。這種指令組一般存在於可從因特爾公司獲得的IA-64處理器中。指令高速緩存300處理指令以用於執行。
作為該指令的處理的一部分,指令高速緩存300將指令分配給不同的執行單元用以執行。當發生了指令的執行時,從完成緩衝器306接收信號304。完成緩衝器306是完成緩衝器比如圖2所示完成緩衝器248的一個例子。信號304標識已經完成了執行的指令。這個標識可以採用不同的形式。例如,可以用對應於完成緩衝器306中的條目的條目號來標識已經完成了執行的指令。用這種方法,指令高速緩存300知道給定的指令位於其高速緩存的什麼地方。取決於處理器的實現方式,可以用其它指示符來標識那些指令已完成,比如在高速緩存300中的位置。
當收到信號304時,指令高速緩存300設置與已經被執行的指令相關的指令訪問指示符。響應於對信號304的接收,指令高速緩存標記或者設置與已完成執行的指令相關的指令訪問指示符308。取決於具體實現方式,該指示符可以在各種位置。例如,指令訪問指示符308可以位於指令中的備用位或者欄位中,或者位於影子存儲器中,或者位於頁表中。
對於存儲單元中的數據的訪問,由數據高速緩存比如圖2中的數據高速緩存216,而不是指令高速緩存處理數據和指示符。或者,處理器可以具有組合的數據和指令高速緩存,在這種情況下,適當地設置所述指示符。
儘管圖示的例子是由完成緩衝器306產生表示指令執行的完成的信號,但是取決於具體的處理器架構和配置,該信號也可以由其它處理器單元生成。例如,該處理器單元可以是實際處理該指令的處理單元。另外,如果硬體不支持亂序操作(out-of-order operation),則向處理器單元分配一個指令用於執行可以是指明該指令已被執行的一個可接受的時間點。換句話說,如果一個指令不被投機性地(speculatively)執行,則處理器中的一個分配器(dispatcher)可以將該指令標記為已被執行。
現在看圖4,其中圖示了根據本發明的一個優選實施例,用來設置標識已被訪問的存儲單元的指示符的信號的數據流。當一個指令已被執行時,數據高速緩存400從完成緩衝器404接收信號402。信號402也包括被執行的的指令已經訪問了某個存儲單元的數據的指示。
響應收到信號402,設置數據訪問指示符406。該數據訪問指示符與已完成的指令所訪問的存儲單元相關。在數據訪問指示符不被包括在存儲單元本身中時,使用元數據來將指示符的關聯映射到存儲單元。高速緩存單元中指令/數據的位置標識指令/數據的物理存儲器中的位置。所有當前可用的高速緩存單元都具有這個能力。該高速緩存單元還知道更新訪問指示符的位置。
現在看圖5,其中圖示了根據本發明的一個優選實施例,將訪問指示符與指令或者存儲單元相關聯的一種機制。處理器500從高速緩存502接收指令。在這個例子中,指示符不與指令一起存儲或者不被存儲在找到數據的存儲單元中。相反,指示符被存儲在單獨的存儲器區域,訪問指示符影子高速緩存504中。所述存儲器可以是任何存儲設備,比如系統存儲器、快閃記憶體、高速緩存或者磁碟。
當處理器500從高速緩存502接收然後執行指令時,對應於來自高速緩存502的指令,處理器500在訪問指示符影子高速緩存504中設置指令訪問指示符。對於包含數據的存儲單元的訪問,執行類似的處理。在一個實施例中,對每一個不影響實際數據段的對應字,提供一個完全影子字(full shadow word)。換句話說,處理器500允許高速緩存502的架構或者配置保持不變。在這些例子中,所描述的映射是字到字。但是,也可以使用其它類型的映射,比如每數據字一個影子位(shadow bit),其中,訪問指示符影子高速緩存504中的一個比特位對應於數據的一個字。
對於這種類型的架構,編譯器使用這種特徵在與數據區本身相分離的工作區中以類似於調試符號(debug symbol)的方式調試信息。當裝入一個模塊時,由裝入器準備附加信息(extra information)訪問指示符,使得在將指令裝入高速緩存502時,其能夠合併到訪問指示符影子高速緩存504中。這些高速緩存區可以被混合,以及按這樣被標記,或者由操作模式加以理解。當發生相關數據訪問和指令執行時,處理器500設置訪問指示符。在這些例子中,所述處理由調試器或者分析程序編程,以知道在該過程執行指令時是否使用影子信息。
現在看圖6,其中圖示了根據本發明的一個優選實施例的一個指令束。指令束600包含指令片(slot)602、指令片604和指令片606,以及模板608。如圖所示,指令束600包含128個比特。每一個指令片包含41個比特,模板(template)608包含5個比特。模板608用來標識當前數據束內的停止,以及將指令片內的指令映射到不同類型的執行單元。
指令束600內的備用位(備用比特)用來保存本發明的指示符。例如,指示符610、612和614分別位於指令片602、604和606內。取決於特定的實現,這些指示符可以採用各種形式和各種大小。指示符可以使用單個比特或者使用多個比特。在這些說明性的例子中,可以使用單個比特來表示指令已被執行。可以類似地將欄位用於標記數據或者存儲單元的指示符。當執行過程總是開始於指令束中的第一指令時(象在IA-64架構中那樣),則可以用兩個比特來表示所執行的最後一個指令。這隻對具有分支指令的模板是需要的。如果正在標記基本模塊,則只需要標記分支指令以及一個分支之後的指令。
現在看圖7,圖示了根據本發明的一個優選實施例,用於產生元數據和訪問指示符的部件。編譯器支持嵌在源中的表示要產生的元數據的指令(directive)。所述元數據用來指示要執行什麼操作,比如標識哪些指令或者存儲單元要與特定訪問指示符相關聯。換句話說,元數據定義訪問指示符到個體指令、指令組和存儲單元的映射。對於存儲單元來說,取決於具體的實現,元數據可以將訪問指示符映射到個體存儲單元或者具有不同大小的不同存儲單元組。處理器中的硬體部件使用這些訪問指示符,來反映出當一個存儲單元被訪問或者當一個指令被執行時這些部件所做的更新。
編譯器700可以產生用於執行的指令702和用於監視代碼覆蓋的元數據和訪問指示符704。當指令或者數據高速緩存頁被裝入存儲器時,作業系統程序裝入器/程序連結器和/或性能監視程序讀出編譯器700產生的元數據和訪問指示符704,將元數據和訪問指示符704裝入存儲器。處理器708可以按照編譯器700生成的格式接受元數據和訪問指示符704,並用元數據和訪問指示符704填充影子存儲器705。
在一個備選實施例中,不是編譯器而是性能監視程序生成所述元數據和訪問指示符。
在一個實施例中,所述格式簡單地具有元數據和/或其每一個塊或者區段基準的訪問指示符影子高速緩存條目,並將元數據和訪問指示符704移動到其相應的影子條目。高速緩存可以不具有影子高速緩存,相反,高速緩存本身的內部格式可以被修改為包含元數據和訪問指示符704。在修改指令流本身以包含所述元數據的實施例中,或者是裝入器更新指令流以包含合適的元數據和/或訪問指示符和工作區,或者是編譯器700產生了所述代碼以包含元數據和訪問指示符704。無論在哪種情況下,在裝入代碼之後,處理器接受元數據和訪問指示符704。
另外,可以將元數據和訪問指示符704置入與指令702相關的影子存儲器705中。編譯器700產生表或者調試數據部分中的信息。所述性能監視程序將所述信息裝入影子存儲器705中的影子數據區。或者,所述調試區可以由作業系統,或者由一起工作的性能監視程序和處理器自動填充。
指令702然後可以由處理器708來執行。編譯器700可以設置處理器708中的一個寄存器比如模式寄存器(mode register)710。當設置該寄存器時,處理器708在執行指令702時查看影子存儲器705中的元數據和訪問指示符704,以確定元數據和訪問指示符704是否與正在指令702中執行的指令相關聯。
如果沒有設置模式寄存器710,則當執行指令702時忽略元數據和訪問指示符704。在這些說明性的實施例中,使用模式寄存器710來打開或者關閉標記對指令的訪問的功能。
除了定義要與訪問指示符相關聯的指令或者指令組之外,元數據和訪問指示符704內的元數據可以用來設置模式寄存器710。當一個訪問指示符按照指令級(on an instruction level basis)相關聯時,每一個與訪問指示符相關聯的指令在該指令被執行時使其關聯的訪問指示符被設置。當一個訪問指示符與一個指令集相關聯時,在這些說明性的例子中,當該指令集中的任何指令被執行時,該訪問指示符就被設置。
對於存儲單元712中的數據,可以執行類似的處理。取決於具體的實現,可以在指令內或者數據內,而不是影子儲存器705內,設置元數據和訪問指示符704。但是,通過在影子存儲器705中設置元數據和訪問指示符704,當在影子存儲器705中設置元數據和訪問指示符704時,可以動態生成元數據和訪問指示符704。
這個特徵允許選擇和標識用於代碼覆蓋監視的指令,而無需修改程序。換句話說,編譯器700可以在指令702已被編譯以由處理器708執行後,生成元數據和訪問指示符704。設置模式寄存器710使處理器708在性能改編影子存儲器(performance instrumentation shadowmemory)705中查找元數據和訪問指示符704,而無需修改指令702。在這些例子中,當執行指令702中的指令和/或訪問存儲單元712中的存儲單元的數據時,與指令或者存儲單元相關聯的訪問指示符的存在使處理器708設置訪問指示符。
圖8圖解了根據本發明的一個舉例的實施方式中的數據流的舉例的框圖,其中,使用頁表來將程序指定的存儲器地址轉換為物理地址。如圖8所示,程序地址810(用於數據或者指令)通過地址空間寄存器被轉換為虛擬地址,所述寄存器使用規定有效地址空間的各種手段中的一種。得到的虛擬地址由處理器用來在頁表830中搜索與該虛擬地址匹配的頁描述符。匹配的頁描述符的內容一般包含與該虛擬頁相關的物理地址和屬性。這些內容被用來將該虛擬地址轉換為物理地址,以及確定頁的屬性(例如訪問權)。
在本發明的另一個實施例中,將所述頁表擴展為包括另外的欄位,用於存儲訪問指示符比如指令訪問指示符和數據訪問指示符的每一個條目。當一個過程訪問該頁表以執行虛擬-物理頁面地址映射時,可以查詢這些另外的欄位,取出這些欄位的值,並根據導致對頁表的訪問的特定事件來更新這些欄位中的值。
或者,為了避免性能的退化,這些欄位中的訪問指示符信息可以被高速緩存在類似於翻譯後援緩衝器(Translation Look-aside Buffer(TLB))或者有效-真實地址轉換緩衝器(Effective to Real AddressTranslation Buffer(ERAT))的處理器資源中。例如,可以提供一個性能指示符後援緩衝器(Performance Indicator Look-Aside Buffer(PILAB)),其中可以高速緩存虛擬-真實地址轉換信息和在頁表的上述欄位中提供的性能指示符信息。當接收到一個指令或者數據地址訪問請求時,可以在PILAB中進行程序或者虛擬地址的查找,以獲得地址轉換信息和訪問指示符信息。如果在PILAB中不存在程序或者虛擬地址,則可以詢問頁表以獲得該信息。
圖9圖解了根據本發明的一個例證實施方式的例證頁表條目。如圖9所示,該頁表條目900包括用於存儲虛擬頁地址的欄位910、用於存儲物理頁地址的欄位920、用於存儲與代碼覆蓋相關的數據的代碼覆蓋欄位930-950。這些欄位由測試或者性能監視應用程式用來確定被測試的計算機應用程式的代碼覆蓋。這些代碼覆蓋欄位可以包括,例如,指令訪問指示符、數據訪問指示符或者預取信息。這些額外欄位930-950的值可以由處理器中的不同部件根據測試或者性能監視應用程式提供給這些單元的信息來設置。
例如,以類似於上面所述的將訪問指示符與指令和/或部分數據相關聯的方式,可以將訪問指示符與頁表中的這些指令和/或數據部分相關聯。這樣,當判斷一個指令或者數據部分是否具有相關聯的訪問指示符時,可以用該指令或者數據部分的虛擬地址來標識頁表中的一個條目,可以檢查在額外欄位930和940中存儲的值來看一個訪問指示符是否與物理頁面或者物理頁面的一部分相關聯。也就是,如果與虛擬地址相關聯的偏移落入存儲有訪問指示符的欄位930中所標識的偏移範圍內,則對應於該虛擬地址的指令具有相關聯的訪問指示符。該指示符在該指令被執行的情況下被設置。
訪問類型欄位940用來對於對存儲單元的訪問,標識已經發生的訪問的類型。預取信息欄位950可以包括諸如指針、偏移量和地址等信息。這樣,例如,當必須從物理存儲器取出指令或者部分數據時,就諮詢該頁表,以識別所述指令或者部分數據的物理存儲位置。同時,可以查詢欄位930-950,並可以將訪問欄位930中的指示符設置為表示該頁面已經從物理存儲器被取出並被裝入存儲器或者高速緩存。
應當理解,儘管圖9隻圖示了一個用於存儲訪問指示符的欄位、一個用於標識訪問類型的欄位和一個用於存儲預取信息的欄位,但是本發明不限於此。相反,可以使用與物理頁面相關聯的任意數量的用於存儲多個訪問指示符等的欄位而不偏離本發明的實質範圍。
現在看圖10,其中圖示了根據本發明的一個優選實施例,用於標記對指令的訪問的處理的流程圖。示於圖10的處理可以被實現到一個指令高速緩存中,比如圖2中的指令高速緩存214。
該過程開始於接收一個指令束(步驟1000)。接下來,識別該指令束中用於執行的指令(步驟1002)。接下來,執行該指令(步驟1004)。在這些說明性的例子中,步驟1004中對所述指令的執行的一部分包括執行該指令。然後,設置一個與該指令相關聯的指示符來指示該指令的執行(步驟1006)。然後,判斷該指令束中是否還有未被處理的指令(步驟1008)。
如果該指令束中還存在未被處理的指令,則所述過程前進到上述的步驟1002。如果在該指令束中不再存在另外的未被處理的指令,則該過程結束。在一個備選實施例中,如果該指令束沒有分支則設置一個比特,該比特指出當採用一個分支時執行的最後一個指令。
在此例中,指令高速緩存包含所有的信息,對包含要被更新以反映執行指令時的變化的指令訪問指示符的區域有直接訪問權。由完成緩衝器或者訪問該完成緩衝器的處理器單元提供有關完成的執行的信息。
現在看圖11,其中圖示了根據本發明的一個優選實施例,由指令高速緩存遵循的設置指令訪問指示符的處理的流程圖。圖11所示的過程可以被實現到一個指令高速緩存中,比如圖2中的指令高速緩存214。
該過程開始於接收表示指令的執行已完成的信號(步驟1100)。在這些例子中,從完成緩衝器比如圖2中的完成緩衝器248接收一個信號。該完成緩衝器包括標識已完成了執行的執令的信息。接下來,保存存儲器中的更新信息(步驟1102),之後過程結束。響應收到該信號,可以將指令高速緩存中的一個條目保存到存儲器中。使用從完成緩衝器接收到的信號中的信息來標識所述條目。例如,所述信號可以指出對應於第7項的指令已經完成執行。用於該指令的信息可以位於在該指令高速緩存中創建的一個寄存器中,以提供執行操作的最快路徑。在所述高速緩存中保存信息時,該信息可以被置於另一個位置中,該位置比如是頁表或者影子存儲器。該更新也包括對指令訪問指示符的設置,如果有這樣一個指示符與該指令相關聯的話。
這樣,通過處理器中的硬體部件的輔助,可以針對指令標識代碼覆蓋。這種硬體輔助允許藉助於在執行指令時設置的指令訪問指示符來標識已被執行的指令。上面所描述的例子提供了其中每一個被執行的指令都被標記的細粒度。如果希望有較粗的粒度,則可以對部分代碼(比如代碼段或者子例程)應用該過程。
現在看圖12,其中圖示了根據本發明的一個優選實施例,標記對子例程的訪問的處理的流程圖。圖12所示的過程可以被實現到一個指令高速緩存比如圖2的指令高速緩存214中。
該過程開始於識別被執行的指令(步驟1200)。接下來,判斷該指令是否位於被選定來監視的子例程的開始地址(步驟1202)。如果該指令不是子例程的開始,則判斷是否對子例程的開始地址處的指令預先設置了指令訪問指示符(步驟1204)。如果判定對開始地址的指令預先設置了指令訪問指示符,則判斷所識別的指令是否是用於子例程的返回地址的指令(步驟1206)。如果該指令是用於返回地址的指令,則在與該子例程相關的元數據中設置用於該返回指令的指令訪問指示符(步驟1208),之後結束處理。
現在回頭再看上述步驟1206和1204。如果判斷結果為否,則過程返回步驟1200。在步驟1202,如果所識別的指令是子例程開始的指令,則過程前進到上述步驟1208。
現在看圖13,其中圖示了根據本發明的一個優選實施例,用於識別對代碼段的訪問的過程的流程圖。圖13所示的處理可以被實現到一個指令高速緩存比如圖2中的指令高速緩存214中。
該過程開始於識別要被執行的指令(步驟1300)。接下來,判斷所識別的指令是否是分支指令(步驟1302)。如果該指令是分支指令,則設置與該指令相關的指令訪問指示符(步驟1304),之後結束處理。如上所述,該指示符可以以多種方式實現。例如,該指示符可以位於該指令的附加欄位(extra field)或者未使用欄位中,或者位於影子存儲器中,或者位於頁表中。
現在回頭看步驟1302。如果該指令不是分支指令,則判斷前一指令是否是分支指令(步驟1306)。如果前一指令是分支指令,則過程前進到步驟1304,如上所述標記指令訪問指示符。在步驟1306,如果前一指令不是分支指令,則過程結束。本質上,步驟1306和步驟1304一起標記當確實有分支時,在分支指令之後的指令。
這樣,本發明的機制提供了用於標記已被執行的代碼段的硬體輔助。通過檢查已被標記的指令訪問指示符,可以在確定代碼覆蓋時識別代碼段的執行。
現在看圖14,其中圖示了根據本發明的一個優選實施例,用來分析代碼覆蓋數據的部件的框圖。使用本發明的硬體輔助機制所產生的代碼覆蓋信息,可以使用軟體工具來產生報告或者圖形表達,與已被執行的代碼區域相對比識別尚未執行的代碼區域。這種代碼覆蓋信息還可以包括在執行代碼時對存儲器位置的訪問。使用該信息,可以啟動對代碼的新測試,以產生更新的報告或者表達,來顯示出代碼覆蓋的變化。
在此說明性的例子中,代碼覆蓋應用程式1400獲得代碼1404的執行所產生的訪問指示符數據1402。該代碼可以是,例如,程序,應用,或者程序或應用的一部分的代碼。訪問指示符數據包括指令訪問指示符和/或數據訪問指示符。
當開始代碼1404的執行時,這些指示符最初是未被設置的。當指令被執行時,或者當執行指令期間訪問存儲單元中的數據時,設置所述指示符。指令的執行可導致關於某一存儲單元的指令訪問指示符和數據訪問指示符被設置。在執行代碼1404之後,可以設置一部分或者全部指示符。
代碼覆蓋應用程式1400分析訪問指示符數據1402以識別在代碼1404執行期間已經被覆蓋的指令路徑和未被覆蓋的指令路徑。使用圖形接口(GUI)1406來顯示該執行數據。執行數據的顯示可以包括高亮顯示或者使用不同的顏色或者圖形符號,來標識已經被執行的指令,並標識數據已經被訪問的存儲單元。GUI1406也可以由用戶用來設置供測試代碼1404之用的新參數。當再次測試代碼1404時,分析新的訪問或者覆蓋信息,並顯示在GUI1406上,以允許用戶看到代碼覆蓋發生了什麼樣的變化。
在說明性的例子中,代碼覆蓋應用程式1400可以是定期運行以對覆蓋進行採樣並提供更新的報告或者呈示的後臺監督程序(daemon)。用戶可以改變各種參數,或者可以定義一組可供執行代碼1404之用的場景。
可以收集代碼覆蓋數據並提供給用戶以供分析。現在看圖15,其中圖示了根據本發明的一個優選實施例,已執行和未執行的指令的表達。在此說明性的例子中,代碼1500是使用硬體輔助對處理器實際執行的指令標記指令訪問指示符時已執行的原始碼的一個例子。
在此例子中,代碼部分1502、1504和1506已被執行,而代碼部分1508、1510、1512和1514是尚未被執行的指令。可以這樣顯示代碼1500,使得用一種顏色比如綠色顯示已執行的指令,而用另一種顏色比如紅色顯示尚未執行的指令。這樣,用戶就容易識別已執行的和尚未執行的指令。在另一個實施例中,只顯示已執行的或者未執行的指令。另外,對於已執行的指令,可以設置圖形符號與之相關,或者將圖形符號設置在其後面。可以使用許多不同的顯示技術來顯示代碼覆蓋信息。例如,圖形用戶界面可以使用高亮顯示、不同字體或者只在顯示器上顯示已執行的指令。用戶可以使用任何類型的顯示系統來識別已執行的和尚未執行的多行代碼。
現在看圖16,其中圖示了用於收集代碼覆蓋數據、顯示程序內被覆蓋和未被覆蓋的路徑的過程的流程圖。圖16所示的過程可以被實現在代碼覆蓋或者測試應用程式中。圖16所示的處理的目標在於就指令的執行而論的代碼覆蓋數據的收集。
該過程開始於接收由程序使用的測試參數(步驟1600)。下面是可以輸入的命令行的一個例子Test-code-data Application。在此例子中,Test是測試程序,Application是要被測試的應用程式,-code表示代碼覆蓋,-data表示數據覆蓋。接下來,執行該程序(步驟1602)。步驟1602的程序的執行導致產生訪問指示符形式的代碼覆蓋數據,所述訪問指示符比如是指令訪問指示符,在處理器執行所述程序的指令時被設置。
然後,判斷是否完成了使用硬體輔助執行指令對代碼覆蓋數據的收集(步驟1604)。如果代碼覆蓋數據的收集沒有完成,則過程返回步驟1602,繼續執行程序。否則,識別被執行的指令(步驟1606)。在這些說明性的例子中,通過用已經設置的指令訪問指示符來識別指令,從而實現步驟1606。接下來,識別未被執行的指令(步驟1608)。在這些說明性的例子中,通過用還沒有設置的指令訪問指示符來識別指令,從而實現步驟1608。然後,顯示標識被覆蓋的執行路徑和未被覆蓋的執行路徑的執行數據(步驟1610)。在這些例子中,在GUI中進行顯示,其中,圖形化地把被覆蓋的執行路徑和未被覆蓋的執行路徑呈示給用戶以便分析。
接下來,判斷是否存在新參數供執行程序之用(步驟1612)。如果沒有新參數則處理結束。如果有新參數,那麼過程前進到如上所述的步驟1600。
在此說明性的例子中,在執行程序後顯示覆蓋數據的呈現圖像。取決於實現方式,在程序的執行過程中,數據的顯示可以定期進行,可以允許用戶在執行期間改變參數以查看代碼覆蓋是如何改變的。
本發明還提供一種以數據訪問的形式確定覆蓋的機制。指示符可以與元數據一起存儲,其中,元數據選擇特定數據用以改編(instrumentation)。關於數據是否已被訪問的指示可以被存儲在許多不同的地方。例如,可以用附加位擴展一個字,可以提供一個影子高速緩存區,以及可以設計一個頁表來包括此信息。
在支持數據訪問覆蓋時,更新編譯器以支持產生一個元數據調試部分(類似於符號部分(symbols section)),作業系統與連結程序/裝入程序以及性能監視或者測試覆蓋設備驅動程序一起允許專門的操作模式。這些技術模擬每存儲器字一個附加位或者附加字。使用不同的機制,當執行指定的應用時,設置一個比特來指示指定的數據區已被執行。存在多種方式來指示這種支持。例如,可以對每一個數據字節提供一個比特,或者對每一個數據字提供一個比特。編譯器產生的元數據可以對要使用的硬體提供該映射。該映射可以具有數據類型相關性。當訪問一個數據欄位時,設置用於數據訪問指示符的合適比特。取決於所述映射,可以對不同數據訪問設置同一個比特。
現在看圖17,其中圖示了根據本發明的一個優選實施例,標記對包含數據的存儲單元的訪問的處理的流程圖。在這些說明性的例子中,每當發生數據訪問時就啟動該處理過程。圖17所示的過程可以實現在一個數據高速緩存比如圖2中的數據高速緩存216中。
該過程始於檢測對存儲單元中的數據的訪問(步驟1700)。在這些例子中,通過完成緩衝器生成的,表示在執行指令時數據已被訪問的信號,由數據高速緩存標識所述數據訪問。在一個實施例中,標識所執行的指令,指令高速緩存單元知曉該指令的數據操作數,該指令高速緩存單元從所述完成緩衝器接收一個信號,並發送一個信號給所述數據高速緩存單元,指出所述指令的數據操作數已被訪問。或者,所述完成緩衝器能夠直接向數據高速緩存發送正被訪問的數據的指示。這種方法會要求完成緩衝器知道所述數據信息。
接下來,設定與包含數據的存儲單元相關的指示訪問的數據訪問指示符(步驟1702)。在這些說明性的例子中,數據訪問指示符可以位於影子存儲器或者頁表中。當處理器處在選定或者特殊模式下時發生所述指示符的設定,以使得對具有某個長度,比如一個字節、一個字或者一個雙字的數據,設置一個比特。然後,處理存儲單元訪問(步驟1704),之後處理結束。
確定測試覆蓋是一個困難的問題,其中,理解數據訪問和數據用途可能有所幫助。換句話說,如果知道是否使用了一個分配的陣列,或者是否運用了一個靜態數據,就會有所幫助。另外,測試數據邊界對於測試覆蓋來說也是很重要的。例如,判斷是否對一個陣列分配了足夠的空間是有用的。可以通過判斷是否發生了陣列外的訪問來進行所述判斷。
本發明的機制提出了構建和維護可以由用在動態數據區覆蓋中的執行程序訪問的調用流樹。當請求分配數據比如malloc(MemoryAllocator,存儲空間分配函數)時,調用一個例程以建立樹。確定調用棧的一種方法是走查(walk)所述棧來確定malloc時的調用順序。另一種方法是使用通過設定數據訪問指示符生成的硬體信息。還有類似於美國專利申請「Method Determining Computer Program andApparatus for Flows Autonomically Using Hardware Assisted ThreadStack Tracking and Cataloged Symbolic Data」(申請序列號10/803663,代理人案卷號AUS920030548US1,申請日2004年3月18日)的技術,該申請在此全文引為參考。該技術用來識別調用序列,下面稱為調用棧。該樹被維持在存儲器中,可以通過調用(比如對讀出當前線程的調用棧信息的設備驅動器的應用編程接口(applicationprogramming interface(API)調用)被訪問。用於維護硬體線程維護的調用棧,並將地址轉換為符號名的處理也在下述美國專利申請中有描述″Method and Apparatus for Determining Computer ProgramFlows Autonomically Using Hardware Assisted Thread StackTracking and Cataloged Symbolic Data″,申請序列號10/803663,代理人案卷號AUS920030548US1,申請日2004年3月18日。從設備驅動器取出的調用棧被送往弧流(arcflow)程序,弧流程序使棧走進(walk into)其面向線程的樹。該處理在下述美國專利申請中有描述″Method and System for Merging Event-Based Data and SampledData Into Postprocessed Trace Output″,申請序列號09/343,438,代理人案卷號AT9-98-850,申請日1999年6月30日。一種方法涉及指示開始區域、結束區域以及超過結束區域的一個用於標記的字節。另外,其它的統計數據也可以被保存在該存儲區中。可以維護涉及使用其它硬體輔助能力的其它統計數據的例子、訪問次數、高速緩存未命中、周期等等。
現在看圖18,其中圖示了根據本發明的一個優選實施例,數據高速緩存所遵循的處理的流程圖。圖18所圖示的處理可以被實現在一個數據高速緩存比如圖2所示的數據高速緩存216中。
該處理開始於接收表示訪問存儲單元中的數據的指令執行已完成的信號(步驟1800)。該信號一般是從完成緩衝器接收的。在存儲器中保存更新信息(步驟1802),之後結束處理。在數據高速緩存中保存在寄存器中存儲的信息。該信息可以被保存在頁表中,也可以在另一個存儲器中(比如影子高速緩存中)設置數據訪問指示符。保存在頁表中的信息一般包含指令所訪問的數據作出的任何變化。而在其它存儲器中保存的信息涉及設置一個數據訪問指示符,來指示已經訪問過存儲單元。
現在看圖19,其中圖示了根據本發明的一個優選實施例,當在運行時間內發生動態存儲器分配時,用於獲取調用棧信息的處理的流程圖。圖19所示的處理可以被實現為軟體。該處理開始於檢測動態存儲器分配(步驟1900)。當一個指令要求分配存儲器時,在運行時間內請求動態存儲器分配。接下來,獲取調用棧信息(步驟1902)。然後,識別被分配的存儲器(步驟1904)。接下來,標記用於報告的存儲器(步驟1906),之後結束處理。標記存儲器以用於報告,以使硬體比如數據高速緩存知道何時標記對所分配存儲器中的數據的訪問。存儲器分配可以是這樣的存儲器分配例程分配比規定的要多的存儲器,以允許查錯。例如,存儲器分配例程可以分配一個額外的字節,標記開始地址、結束地址和超過結束地址的一個字節。換句話說,如果發生了對這些被標記地址的訪問,則這些被標記的部分會使數據訪問指示符被設置。在這些例子中,標記超過結束地址的一個字節,使得對該存儲器位置的訪問導致數據訪問指示符被設置。這樣,判斷是否已分配了足夠的存儲器供使用。如果在程序執行期間設置了該數據訪問指示符,那麼,由於在所分配的存儲區外發生了訪問,已分配的存儲器可能不夠。
現在看圖20,其中圖示了根據本發明的一個優選實施例,當存儲器被解除分配時,發送有關在程序執行期間發生的數據訪問的信息的處理的流程圖。圖20所示的處理可以被實現為軟體。
該處理開始於檢測到存儲器解除分配(步驟2000),比如釋放請求。接下來,收集標識對被分配存儲器中的數據的訪問的信息(步驟2002)。然後,發送訪問數據和調用棧信息以供處理(步驟2004),之後結束處理。該數據被發送給軟體工具用於處理。步驟2004可以涉及將數據置於可由該軟體工具訪問的位置。
在這些例子中,當存儲器被解除分配時,數據被實時發送。可以收集信息並發送以供處理的其它時間包括由監視過程執行的採樣。在其它情況下,可以在程序已完成執行之後發送所述信息。標識對數據的訪問的信息可以包括不同於存儲單元的標識的信息。例如,該信息還可以包括對請求分配存儲器的代碼的標識,以及被分配的存儲器的大小。另外,可以使用在本申請所引用的申請中描述的硬體輔助機制來記錄對存儲單元的訪問次數。
現在看圖21,其中圖示了根據本發明的一個優選實施例,產生一個調用流樹以標識未被初始化或者訪問的區域的處理的流程圖。可用標識代碼覆蓋的軟體工具來實現圖21所示的處理。該處理使用在圖19和圖20中收集的信息來產生調用流樹,以標識沒有被初始化或者訪問的區域。該調用流樹還包括有關已被訪問的存儲單元的信息,以及沒有被訪問的存儲單元的信息。
當接收到訪問數據和調用棧信息時開始該處理(步驟2100)。接下來,處理接收到的數據和調用棧信息(步驟2102)。然後,產生標識調用方和分配存儲器的代碼的調用流樹(步驟2104)。接下來,生成包含數據訪問信息的葉節點ID數據(步驟2106),之後該處理結束。將數據區的訪問信息置入與分配了其中的數據被訪問的存儲器的節點相關聯的葉節點中。
使用有關對數據區的訪問的覆蓋,本發明的機制提供有關沒有被初始化、沒有被訪問或者已被訪問的數據區的信息。在識別這些數據區時,可以按照一定的方式標記或顯示初始原始碼,以指示哪些數據區已被訪問,哪些數據區尚未被訪問。對於數據的動態分配,發生了動態存儲器分配的原始碼部分可以被標記,使得當在執行期間分配的存儲器區域中發生訪問時,這些存儲器區域使數據訪問指示符被標記。另外,可以標記代碼中的指令,使得硬體在靜態數據結構被訪問時設置指示符。
現在看圖22,其中圖示了根據本發明的一個優選實施例,標識數據區的覆蓋的圖形報告。在此例子中,報告2200表示了區域2202中的數據訪問覆蓋。該區域表示出了靜態數據區域。區域2202中的部分2204、2206和2208是其中發生了數據訪問的存儲單元。通過定位在代碼執行期間設定的數據訪問指示符來標識這些部分。
調用流樹2210是調用流樹的一個例子,其中,節點D代表如區域2212中所示的動態分配存儲器的代碼部分。區域2212中的該信息是位於與調用流樹2210中的節點D相關聯的葉節點中的信息。區域2212中的部分2214表示了被訪問過的區域2212的部分。
現在看圖23,其中圖示了根據本發明的一個優選實施例,產生顯示信息的過程的流程圖。圖示於圖23的過程可以被實現為用於確定數據訪問的覆蓋的軟體工具。
該過程開始於獲取靜態和動態數據的數據訪問信息(步驟2300)。該信息包括獲取分配的用於代碼的執行的數據訪問指示符。所獲取的其它信息包括如上所述在存儲器的動態分配期間產生的調用流樹。
接下來,生成用於對靜態和動態數據的訪問的覆蓋映像圖(coverage map)(步驟2302)。然後,顯示該覆蓋映像圖(步驟2304),之後結束處理。該覆蓋映像圖類似於圖22中的報告2200。報告程序可以支持在報告結構中使用偏移量。例如,可以使用c\programfiles\appl.exe(func1100)來表示在func1中從位置100發出了malloc。
處理器總線速度和存儲器訪問明顯慢於處理器速度。更多的情況是數據處理系統的性能受到處理器訪問的約束或者限制,而不是處理器速度的約束或限制。這種現象的結果是多級高速緩存(multi-levelcaching)的使用,以及試圖將數據預先取入這些高速緩存,以更快地訪問數據。但是,預取的努力通常是代碼或者跨步驅動的,不能較好地處理與數據相關的動態訪問。大多數現有的方法要求編譯器或者編程者在代碼流中建立預取提示。一旦生成目標代碼,則這些提示給出允許預取的信息。但是,這種系統幾乎沒有提供改變代碼的機會。例子有Java對象中的用於碎片收集(garbage collection)或者指針跟蹤(pointer chasing)的跟蹤基準(chasing references)。
本發明的機制通過使用硬體輔助改進了預取處理。使用元數據,預取指示符可以與數據相關。例如,預取指示符數據可以指明將該數據當作一個要預取出的指針處理。預取指示符本身可以是一個指向數據結構的指針。當將該數據裝入高速緩存時,處理器檢測指針預取條件,並預取出該數據所指向的高速緩存行。
現在看圖24,其中圖示了使用元數據將數據預取入高速緩存的處理的流程圖。在這些例子中,圖24所示的處理可以被實現到一個裝入/存儲單元中。在這些例子中,被預取的數據是指針。
該過程開始於裝入一個指令(步驟2400)。接下來,判斷用於預取的元數據是否與指令關聯(步驟2402)。在這些例子中,元數據是一個與一個指令相關聯的預取指示符。
如果用於預取的元數據與指令相連,則判斷硬體是否決定預取數據(步驟2404)。在一個優選實施例中,指令高速緩存判斷指令高速緩存何時以及是否投機性地(speculatively)預取。例如,該指令高速緩存可以判斷其沒有待完成的高速緩存未命中(cache miss),並具有已經相當長時間沒有被使用的可以被替換的高速緩存條目。在這種情況下,指令高速緩存投機性地預取。但是,如果指令高速緩存具有待完成的未命中,和/或沒有方便的高速緩存行進行替換,它就不可以進行投機性地預取。可以對高速緩存未命中的數量和/或可替換的高速緩存行的數量設置一個閾值,以判斷在存在預取指示符時,指令高速緩存是否要預取數據。例如,如果待完成的高速緩存未命中少於選定的閾值,則進行預取。在這些說明性的例子中,如果希望替換高速緩存行並且如果選擇來替換的高速緩存行的數量大於選定的閾值,也可以進行預取。所述裝入存儲單元可以發出向高速緩存單元進行投機性裝入的請求,但是由高速緩存單元判斷是否實際進行預取。
或者,取決於硬體的實現,裝入存儲單元可以判斷是否向高速緩存單元進行投機性裝入。如果硬體決定預取數據,則使用與指令相關的元數據將數據預取入高速緩存(步驟2406)。在這些例子中,數據是指針。該指針是指向數據結構或者數據塊的指針。接下來,將指令發往一個單元進行處理(步驟2408),之後結束該過程。
回頭看步驟2404。如果硬體決定不預取數據則過程返回如上所述的步驟2408。在步驟2302,如果用於預取的元數據不與指令相關聯,則過程前進到如上所述的步驟2408。在這些例子中,在硬體發出關於應當預取的指示之前、同時或者之後,硬體可以將指令發送給用於處理的單元。
除了預取指向數據結構或者數據塊的指針之外,本發明的機制提供了從數據結構內的存儲單元預取數據的能力。與指針相結合的跨距(stride)或者偏移量可以用來標識要預取的數據。或者,可以用地址來標識所需的數據的位置。
現在來看圖25,其中根據本發明的一個優選實施例,描述了圖示包括對要從開始點預取出什麼數據的標識的元數據的處理的流程圖。圖示於圖25的過程可以被實現到一個裝入存儲單元比如圖2中的裝入存儲單元228中。
該過程開始於檢測表示預取的元數據(步驟2500)。該元數據可以包括對於要從指針所標識的數據結構中預取什麼數據的標識。該元數據可以包括指針形式的預取指示符。該元數據還可以包括使用偏移量或者地址對數據本身的標識。根據高速緩存單元的狀態來判斷是否應進行預取(步驟2502)。這些例子中的預取操作是投機性的,根據高速緩存單元的狀態選擇性地執行所述處理。例如,如果發生了超過一定數量的高速緩存未命中,則不進行預取,過程結束。
在步驟2502,如果發生了預取操作,則轉入存儲器中用於預取的選定點(步驟2504)。可以在元數據中用指針和偏移量或者跨距,或者存儲器地址,來標識該選定點存儲器。接下來,從存儲器中的選定點將數據預取到高速緩存中(步驟2506),之後過程結束。見步驟2502,如果沒有發生預取操作,則過程結束。
這樣,本發明提供了一種改進的方法、設備和計算機指令,用於對代碼覆蓋提供硬體輔助。本發明的機制允許監視指令的執行和在執行程序時對存儲單元的訪問。提供訪問指示符來指示指令的執行或者對存儲單元中的數據的訪問。這些指示符的設定由硬體比如處理器中的不同部件來執行。這樣,軟體工具可以在獲得和分析覆蓋數據時有更佳的覆蓋率,並避免改變被測試的代碼。
另外,對於在確定程序執行中的覆蓋方面提供輔助的硬體來說,上述流程圖所示的步驟提供了可由硬體中的不同部件執行的處理的邏輯流程。具體地,這些步驟可以被實現為處理器中的微代碼或者硬體邏輯。在這些例子中,微代碼是直接控制處理器的最低層指令。單個機器語言指令一般轉換為幾個微代碼指令。微代碼可以是硬體形式或者軟體形式。在許多現代處理器中,微代碼被硬連線到處理器。
重要的是要注意到,儘管對本發明的描述是在全功能數據處理系統的上下文中進行的,本領域的普通技術人員知道,本發明的處理過程能夠以指令的計算機可讀介質的形式以及多種形式分布,無論實際用於進行所述分布的信號承載介質的具體類型如何,本發明都同樣適用。計算機可讀介質的例子包括可記錄類型的介質,比如軟盤、硬碟驅動器、RAM、CD-ROM、DVD-ROM,以及傳輸類型的介質,比如數字和模擬通信鏈路,使用諸如射頻和光波傳輸等傳輸形式的有線或者無線通信鏈路。計算機可讀介質可以採用編碼格式的形式,所述編碼格式被解碼以實際用於具體的數據處理系統。
上面對本發明的說明是為了解釋和說明的目的,不是要窮盡本發明或者將本發明限於所公開的形式。對於本領域普通技術人員,許多修改和變化都是顯而易見的。例如,重要的是注意到,不同的處理器架構可以將本申請中所說明的功能以各種用來在個單元之間傳輸信息的機制分布到不同的單元中。另外,儘管描述了具體的處理器單元作為對本發明的功能的實現,但是這些不同的功能可以被結合到硬體中的其它處理器單元中。另外,附圖中所描述的步驟既可以被實現為硬體電路,又可以被實現為處理器內的不同處理器單元專用的指令,比如由執行單元使用的微代碼。
上述實施例的選擇和描述是為了更好地解釋本發明的原理和其實際應用,並使本領域的普通技術人員能夠理解本發明的針對所能想到的具體用途進行了各種適當的修改的各種實施例。
權利要求
1.數據處理系統中用於提供代碼的覆蓋數據的方法,包括獲得包含與該代碼相關的指令訪問指示符的覆蓋數據;識別由數據處理系統中的處理器響應處理器對該代碼的執行而設置的特定指令訪問指示符,以形成設定指令訪問指示符,其中,每一個設定指令訪問指示符與所述代碼的一部分相關聯;以及產生該覆蓋數據的一個表達,其中,在該表達中標識所述設定指令訪問指示符。
2.如權利要求1所述的方法,還包括識別在處理器執行代碼時仍然未設定的未設定指令訪問指示符,其中,在所述表達中標識所述未設定指令訪問指示符。
3.如權利要求2所述的方法,其中,使用第一顏色在所述表達中標識所述設定指令訪問指示符,使用第二顏色在所述表達中標識所述未設定指令訪問指示符。
4.如權利要求2所述的方法,其中,使用圖形符號來在所述表達中標識所述設定指令訪問指示符,使用圖形符號在所述表達中標識所述未設定指令訪問指示符。
5.如權利要求2所述的方法,其中,響應一個事件執行所述產生步驟。
6.如權利要求5所述的方法,其中,所述事件是下述事件中的至少一個代碼執行的完成,時間屆滿,代碼中選定類型的指令的執行。
7.如權利要求1所述的方法,其中,所述代碼部分是代碼中的單個指令,其中,代碼中的每一個指令與一個不同的指令訪問指示符相關聯。
8.如權利要求1所述的方法,其中,所述代碼部分是代碼中的子例程。
9.如權利要求1所述的方法,其中,所述代碼部分是代碼中的分支指令。
10.用於提供代碼的覆蓋數據的數據處理系統,包括獲取裝置,用於獲得包含與該代碼相關的指令訪問指示符的覆蓋數據;識別裝置,用於識別由數據處理系統中的處理器響應處理器對該代碼的執行而設置的特定指令訪問指示符,以形成設定指令訪問指示符,其中,每一個設定指令訪問指示符與所述代碼的一部分相關聯;以及產生裝置,用於產生該覆蓋數據的一個表達,其中,在該表達中標識所述設定指令訪問指示符。
11.如權利要求10所述的數據處理系統,其中所述識別裝置是第一識別裝置,還包括第二識別裝置,用於識別在處理器執行代碼時仍然未設定的未設定指令訪問指示符,其中,在所述表達中標識所述未設定指令訪問指示符。
12.如權利要求11所述的數據處理系統,其中,使用第一顏色在所述表達中標識所述設定指令訪問指示符,使用第二顏色在所述表達中標識所述未設定指令訪問指示符。
13.如權利要求11所述的數據處理系統,其中,使用圖形符號來在所述表達中標識所述設定指令訪問指示符,使用圖形符號在所述表達中標識所述未設定指令訪問指示符。
14.如權利要求11所述的數據處理系統,其中,響應一個事件執行所述產生裝置。
15.如權利要求14所述的數據處理系統,其中,所述事件是下述事件中的至少一個代碼執行的完成,時間屆滿,代碼中選定類型的指令的執行。
16.如權利要求11所述的數據處理系統,其中,所述代碼部分是代碼中的單個指令,其中,代碼中的每一個指令與一個不同的指令訪問指示符相關聯。
17.如權利要求11所述的數據處理系統,其中,所述代碼部分是代碼中的子例程。
18.如權利要求11所述的數據處理系統,其中,所述代碼部分是代碼中的分支指令。
19.計算機可讀介質中的用於提供代碼的覆蓋數據的電腦程式產品,包括第一指令,用於獲得包含與該代碼相關的指令訪問指示符的覆蓋數據;第二指令,用於識別由數據處理系統中的處理器響應處理器對該代碼的執行而設置的特定指令訪問指示符,以形成設定指令訪問指示符,其中,每一個設定指令訪問指示符與所述代碼的一部分相關聯;以及第三指令,用於產生該覆蓋數據的一個表達,其中,在該表達中標識所述設定指令訪問指示符。
20.如權利要求19所述的電腦程式產品,還包括第四指令,用於識別在處理器執行代碼時仍然未設定的未設定指令訪問指示符,其中,在所述表達中標識所述未設定指令訪問指示符。
21.如權利要求20所述的電腦程式產品,其中,使用第一顏色在所述表達中標識所述設定指令訪問指示符,使用第二顏色在所述表達中標識所述未設定指令訪問指示符。
22.如權利要求20所述的電腦程式產品,其中,使用圖形符號來在所述表達中標識所述設定指令訪問指示符,使用圖形符號在所述表達中標識所述未設定指令訪問指示符。
23.如權利要求20所述的電腦程式產品,其中,響應一個事件執行所述第三指令。
24.如權利要求23所述的電腦程式產品,其中,所述事件是下述事件中的至少一個代碼執行的完成,時間屆滿,代碼中選定類型的指令的執行。
全文摘要
本發明涉及對代碼覆蓋使用硬體輔助的自主測試條件反饋方法和設備。具體地,本發明提供了一種用於提供代碼的覆蓋數據的方法、設備和計算機指令。獲得包含與代碼相關的指令訪問指示符的覆蓋數據。識別由數據處理系統中的處理器響應處理器對代碼的執行而設置的特定指令訪問指示符,以形成設定指令訪問指示符。將每一個設定指令訪問指示符與所述代碼的一部分相關聯。產生該覆蓋數據的一個表達。在該表達中標識所述設定指令訪問指示符。該表達例如可以是圖形表達。
文檔編號G06F11/36GK1677364SQ200510054289
公開日2005年10月5日 申請日期2005年3月21日 優先權日2004年3月22日
發明者羅伯特·託德·迪姆普西, 弗蘭克·埃裡奧特·萊維尼, 羅伯特·約翰·烏爾克哈特 申請人:國際商業機器公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀