新四季網

對特定指令類型的指令執行和數據訪問計數的方法和設備的製作方法

2023-04-27 01:55:11 1

專利名稱:對特定指令類型的指令執行和數據訪問計數的方法和設備的製作方法
技術領域:
本發明一般涉及一種改進的數據處理系統。具體地說,本發明提供一種用於獲得數據處理系統內的性能數據的方法和設備。更具體地說,本發明提供一種用於在獲得數據處理系統內的性能數據時對軟體工具提供硬體協助的方法和設備。
背景技術:
在分析和增強數據處理系統和在該數據處理系統內執行的應用程式的性能時,知道數據處理系統內的哪些軟體模塊正在使用系統資源是有幫助的。數據處理系統的有效管理和增強需要知道如何和何時使用了各種系統資源。性能工具用來監測和檢查數據處理系統以確定各種軟體應用程式在數據處理系統內執行時的資源消耗。例如,性能工具可以識別數據處理系統中最頻繁執行的模塊和指令,或者可以識別分配最大量的存儲器或執行最多I/O請求的那些模塊。硬體性能工具可以內置在系統中,或者在以後的時間點添加。
一種公知的軟體性能工具是跟蹤工具。跟蹤工具可以使用多種技術來提供表示執行程序的執行流的跟蹤信息。一種技術通過隨著特定事件的出現而對其進行記錄來跟蹤該特定指令序列,即所謂的基於事件的剖析(profiling)技術。例如,跟蹤工具可以記錄對模塊、子例程、方法、函數或系統組件的每一次進入和每一次退出。或者,跟蹤工具可以記錄每一個存儲器分配請求的請求者以及為其分配的存儲器量。典型地,為每一個這樣的事件產生帶時間戳記錄。還使用類似於進入一退出記錄的對應記錄對來跟蹤開始和完成I/O或數據傳輸以及用於很多其它感興趣事件的任意代碼段的執行。
為了改善由不同計算機家族生成的代碼的性能,經常有必要確定處理器在執行代碼時在何處花費了時間,這樣的工作在計算機處理領域內通常稱作定位「熱點」。在理想情況下,希望以指令和/或原始碼行級別查出這樣的熱點,從而將注意力集中在通過代碼改進而可能受益最大的區域。
另一種跟蹤技術涉及周期性地對程序的執行流進行採樣以識別該程序似乎花費大量時間的特定程序位置。該技術基於以規則間隔周期性地中斷應用程式或數據處理系統執行的思想,即所謂的基於樣本的剖析。每次中斷時,對預定時間長度或者預定次數的感興趣事件記錄信息。例如,在此間隔期間可以記錄當前執行線程的程序計數器,其是正被剖析的較大程序的可執行部分。可以在後處理時對照數據處理系統的裝入圖(load map)和符號表信息來解析這些值,並且可以通過這一分析獲得正在何處花費時間的剖析信息(profile)。
創建諸如得到與特定情形或問題有關的答案的工具可能非常費力,並且可能非常難以校準,因為軟體工具本身影響測試中的系統。本發明認識到對工具開發和問題分析的硬體協助可以極大地減輕開發軟體性能工具所需的工作量。此外,隨著處理器的密度增大,可以包括硬體協助來提供附加調試和分析特性。
因此,具有一種用於為用來分析數據處理系統的性能的性能工具提供硬體協助的改進方法、設備和計算機指令將是有利的。

發明內容
本發明提供了一種用於處理指令的方法、設備和計算機指令。響應數據處理系統的處理器的指令高速緩存中接收到要執行的指令,判定指示符是否與該指令相關聯,以及該指令是否為指令範圍內的特定類型。如果指示符與該指令相關聯並且該指令為該指令範圍內的特定類型,則產生中斷。


在所附權利要求中闡述了被認為是本發明特徵的新穎特性。然而,通過參考下面結合附圖對示例性實施例的詳細描述,本發明本身以及優選使用模式及其進一步目的和優點將會得到更好的理解,其中圖1是可以實現本發明的數據處理系統的方框圖;圖2是根據本發明優選實施例的用於處理信息的處理器系統的方框圖;圖3是示出根據本發明優選實施例的用於處理與指示符相關聯的指令的組件的圖;圖4是示出根據優選實施例的一種用於將性能指示符與指令或存儲單元(memory location)相關聯的機制的圖;圖5是示出根據本發明優選實施例的指令包(bundle)的圖;圖6A和6B是根據本發明優選實施例的包含性能指示符的子例程的圖;圖7是根據本發明優選實施例的用於處理包含性能指示符的指令的過程的流程圖;圖8是根據本發明優選實施例的用於選擇性地發送指令到中斷單元的過程的流程圖;圖9是根據本發明優選實施例的用於響應對與性能指示符相關聯的存儲單元的訪問而產生中斷的過程的流程圖;圖10是根據本發明優選實施例的用於對事件進行計數的過程的流程圖;圖11是根據本發明優選實施例的用於對指令進行選擇性計數的過程的流程圖;圖12是根據本發明優選實施例的用於對指令進行選擇性計數的過程的流程圖;圖13是根據本發明優選實施例的用於識別超過閾值的指令的過程的流程圖;圖14是根據本發明優選實施例的用於訪問存儲單元的過程的流程圖;圖15是示出根據本發明優選實施例的用於生成元數據如性能指示符的組件的方框圖;圖16是示出根據本發明優選實施例的元數據的圖;圖17是示出根據本發明優選實施例的裝入和維護性能檢測映像高速緩存(performance instrumentation shadow cache)時所涉及的組件的圖;圖18是根據本發明優選實施例的用於生成指令元數據的過程的流程圖;圖19是根據本發明優選實施例的用於生成存儲單元元數據的過程的流程圖;圖20是根據本發明優選實施例的用於對特定指令的執行進行計數的過程的流程圖;圖21是根據本發明優選實施例的用於對特定存儲單元的訪問進行計數的過程的流程圖;圖22是示出根據本發明優選實施例的用於訪問關於對指令的執行或對存儲單元的訪問所收集的信息的組件的圖;
圖23是根據本發明優選實施例的用於自主修改程序中的代碼以允許對部分代碼進行選擇性計數或剖析的組件的方框圖;圖24是根據本發明優選實施例的用於將性能指示符動態添加到指令中或者使其與指令相關聯的過程的流程圖;圖25是示出根據本發明優選實施例的用來通過將性能指示符與頁內的指令相關聯來掃描頁的組件的圖;圖26是根據本發明優選實施例的用於將指示符關聯到頁內的指令的過程的流程圖;圖27是示出根據本發明優選實施例的包含堆棧幀的調用堆棧的圖;圖28是根據本發明優選實施例的用於識別與調用和返回從性能監測器單元收集數據的指令相關聯的事件的過程的流程圖;圖29是根據本發明優選實施例的用於識別已被執行多於選定次數的指令的過程的流程圖;圖30是根據本發明優選實施例的用於在特定指令被執行多於某選定次數時檢查調用堆棧並識別例程調用者的過程的流程圖;圖31是示出根據本發明優選實施例的為進行監視而選擇的指令和數據範圍的圖;以及圖32是根據本發明優選實施例的用於對設定範圍的訪問次數以及在設定範圍內執行的指令數進行計數的過程的流程圖。
具體實施例方式
現在參照圖1,其中示出了可以實現本發明的數據處理系統的方框圖。客戶機100是計算機的例子,實現本發明的過程的代碼或指令可以位於其中。客戶機100採用外圍組件互連(PCI)局部總線架構。雖然所示例子採用PCI總線,但是也可以使用其它總線架構如加速圖形埠(AGP)和工業標準架構(ISA)。處理器102和主存儲器104通過PCI橋108連接到PCI局部總線106。PCI橋108還可以包括用於處理器102的集成存儲器控制器和高速緩衝存儲器。與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擴展槽或內插連接器。
作業系統運行在處理器102上,並且用來協調和提供對圖1的數據處理系統100內的各個組件的控制。作業系統可以是市場上可買到的作業系統,如可從微軟公司獲得的Windows XP。面向對象的編程系統如Java可以結合作業系統運行,並且提供從在客戶機100上執行的Java程序或應用程式對作業系統的調用。「Java」是昇陽電腦公司(Sun Microsystems,Inc.)的商標。作業系統、面向對象的編程系統、以及應用程式或程序的指令位於諸如硬碟驅動器126的存儲裝置上,並且可以裝入到主存儲器104中以由處理器102執行。
本領域的普通技術人員應當理解,圖1中的硬體可以根據具體實現而不同。作為對圖1所示的硬體的補充或替代,可以使用其它內部硬體或外圍裝置,如快閃只讀存儲器(ROM)、等效非易失性存儲器或光碟驅動器等。另外,本發明的過程也可以應用於多處理器數據處理系統。
例如,客戶機100,如果可選地配置為網絡計算機,則可以不包括SCSI主機總線適配器112、硬碟驅動器126、磁帶驅動器128和CD-ROM 130。在這種情況下,該計算機可以適當地稱作客戶計算機,並包括某種網絡通信接口如LAN適配器110、數據機122等。作為另一個例子,客戶機100可以是配置成在不依賴於某種網絡通信接口的情況下可啟動的獨立系統,而不管客戶機100是否包括某種網絡通信接口。作為另外一個例子,客戶機100可以是個人數字助理(PDA),其配置有ROM和/或快閃ROM來提供用於存儲作業系統文件和/或用戶所產生數據的非易失性存儲器。圖1所示的例子和上述例子不意味著隱含架構限制。
本發明的過程使用可以位於例如主存儲器104、存儲器124或一個或多個外圍裝置126-130的存儲器中的計算機實現指令由處理器102執行。
接下來參照圖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的執行電路還包括多個執行單元,即轉移(branch)單元220、定點單元A(「FXUA」)222、定點單元B(「FXUB」)224、複合定點單元(「CFXU」)226、裝入/存儲單元(「LSU」)228以及浮點單元(「FPU」)230。FXUA222、FXUB224、CFXU226和LSU228從多個通用架構寄存器(「GPR」)232和多個定點重命名(rename)緩衝器234輸入其源操作數信息。而且,FXUA222和FXUB224從進位(「CA」)寄存器239輸入「進位」。FXUA222、FXUB224、CFXU226和LSU228輸出其運算結果(目的操作數信息)以存儲在定點重命名緩衝器234內的選定條目(entry)上。另外,CFXU226從專用寄存器處理單元(「SPR單元」)237輸入並向其輸出源操作數信息和目的操作數信息。
FPU230從多個浮點架構寄存器(「FPR」)236和多個浮點重命名緩衝器238輸入其源操作數信息。FPU230輸出其運算結果(目的操作數信息)以存儲在浮點重命名緩衝器238內的選定條目上。
響應裝入指令,LSU228從數據高速緩存216輸入信息,並且將該信息拷貝到重命名緩衝器234和238中選定的一個。如果該信息未存儲在數據高速緩存216中,則數據高速緩存216(通過BIU212和系統總線211)從連接到系統總線211的系統存儲器239輸入該信息。而且,數據高速緩存216能夠(通過BIU212和系統總線211)將信息從數據高速緩存216輸出到連接到系統總線211的系統存儲器239。響應存儲指令,LSU228從GPR232和FPR236中選定的一個輸入信息,並且將該信息拷貝到數據高速緩存216。
定序器單元218從GPR232和FPR236輸入信息,並且向其輸出信息。轉移單元220從定序器單元218輸入指令和表示處理器210的當前狀態的信號。響應該指令和信號,轉移單元220(向定序器單元218)輸出表示存儲要由處理器210執行的指令序列的合適的存儲器地址的信號。響應來自轉移單元220的該信號,定序器單元218從指令高速緩存214輸入所指示的指令序列。如果一條或多條指令序列沒有存儲在指令高速緩存214中,則指令高速緩存214(通過BIU212和系統總線211)從連接到系統總線211的系統存儲器239輸入這些指令。
響應從指令高速緩存214輸入的指令,定序器單元218選擇性地將指令調度到執行單元220、222、224、226、228和230中選定的一個。每個執行單元執行一條或多條特定指令類的指令。例如,FXUA222和FXUB224對源操作數執行第一類定點數學運算,如加法、減法、與運算、或運算以及異或運算。CFXU226對源操作數執行第二類定點運算,如定點乘法和除法。FPU230對源操作數執行浮點運算,如浮點乘法和除法。
當信息存儲在選定的一個重命名緩衝器234上時,該信息與由為其分配了選定重命名緩衝器的指令指定的存儲位置(例如,GPR232或進位(CA)寄存器242之一)相關聯。響應來自定序器單元218的信號,將選定的一個重命名緩衝器234上存儲的信息拷貝到與其關聯的一個GPR232(或CA寄存器242)中。定序器單元218響應「完成」產生了該信息的指令,引導拷貝在選定的一個重命名緩衝器234上存儲的信息。該拷貝稱作「寫回」當信息存儲在選定的一個重命名緩衝器238上時,該信息與一個FPR236相關聯。響應來自定序器單元218的信號,將選定的一個重命名緩衝器238上存儲的信息拷貝到與其關聯的一個FPR236中。定序器單元218響應「完成」產生該信息的指令,引導拷貝在選定的一個重命名緩衝器238上存儲的信息。
處理器210通過在執行單元220、222、224、226、228和230中的各個單元上同時處理多條指令來實現高性能。因此,每條指令作為一系列級處理,其中每個級與其它指令的級可並行執行。該技術稱作「流水線技術」。在該示例性實施例的一個重要方面,指令通常以六個級處理,即提取、解碼、調度、執行、完成和寫回。
在提取級,定序器單元218選擇性地(從指令高速緩存214)從上面有關轉移單元220和定序器單元218而進一步討論的存儲指令序列的一個或多個存儲器地址輸入一條或多條指令。
在解碼級,定序器單元218對多達四條所提取的指令進行解碼。
在調度級,定序器單元218在為所調度指令結果(目的操作數信息)保留重命名緩衝器條目之後,將多達四條已解碼的指令選擇性地調度到執行單元220、222、224、226、228和230中(響應解碼級中的解碼)選定的一個。在調度級,將操作數信息提供給所調度指令的選定執行單元。處理器210以指令編程序列的次序調度指令。
在執行級,如上所述,執行單元執行其調度指令,並且輸出其操作結果(目的操作數信息)以存儲在重命名緩衝器234和重命名緩衝器238內的選定條目上。以這種方式,處理器210能夠相對於指令編程序列無序地執行指令。
在完成級,定序器單元218指示指令「完成」。處理器210以指令編程序列的次序「完成」指令。
在寫回級,定序器218引導將信息分別從重命名緩衝器234和238拷貝到GPR232和FPR236。定序器單元218引導拷貝選定重命名緩衝器上存儲的信息。同樣,在特定指令的寫回級,處理器210響應該特定指令更新其架構狀態。處理器210以指令編程序列的次序處理指令的各「寫回」級。處理器210在特定情形下有利地合併指令的完成級和寫回級。
在該示例性實施例中,每條指令需要一個機器周期來完成指令處理的每一個級。但是,一些指令(例如由CFXU226執行的複合定點指令)可能需要多個周期。因此,響應完成先前指令所需的時間的變化,在特定指令的執行和完成級之間可能發生可變延遲。
完成緩衝器248安設在定序器218內以跟蹤正在執行單元內執行的多條指令的完成。一旦出現以應用程式指定順序成功地完成了一條指令或一組指令的指示時,可以利用完成緩衝器248來發起將這些已完成指令的結果傳輸到關聯通用寄存器。
另外,處理器210還包括連接到指令高速緩存214以及處理器210中其它單元的性能監測器單元240。可以利用性能監測器單元240來監測處理器210的操作,在本示例性實施例中,性能監測器單元240是能夠提供描述指令執行資源利用和存儲控制的詳細信息的軟體可訪問機制。雖然圖2中未示出,性能監測器單元240耦接到處理器210的每個功能單元以允許監測處理器210的所有方面的操作,包括例如重建事件之間的關係、識別虛假觸發、識別性能瓶頸、監測流水線停頓(pipeline stall)、監測空閒處理器周期、確定調度效率、確定轉移效率、確定未對準(misaligned)數據訪問的性能損失、識別串行化指令的執行頻率、識別被禁止中斷以及確定性能效率。感興趣事件還可以包括例如指令解碼時間、指令執行、轉移事件、高速緩存失敗(miss)和高速緩存成功(hit)。
性能監測器單元240包括其數目依賴於具體實現的(例如,2-8個)計數器241-242,標記為PMC1和PMC2,用來對選定事件的出現進行計數。性能監測器單元240還包括至少一個監測器模式控制寄存器(MMCR)。在本例中,有兩個指定計數器241-242功能的控制寄存器MMCR243和244。計數器241-242和MMCR243-244最好作為通過可由CFXU226執行的MFSPR(從SPR傳送)和MTSPR(傳送至SPR)指令可訪問以進行讀或寫的SPR實現。然而,在一個可替換實施例中,計數器241-242和MMCR243-244可以簡單地作為I/O空間中的地址實現。在另一個替換實施例中,控制寄存器和計數器可以通過變址寄存器來間接訪問。該實施例在來自英特爾公司(IntelCorporation)的處理器內的IA-64架構中實現。
另外,處理器210還包括連接到指令高速緩存214的中斷單元250。另外,雖然圖2中未示出,中斷單元250連接到處理器210內的其它功能單元。中斷單元250可以從其它功能單元接收信號,並且發起諸如開始錯誤處理或捕獲過程的操作。在這些例子中,使用中斷單元250來產生在程序執行期間可能發生的中斷和異常。
本發明提供了在程序執行期間監視對特定指令的執行以及對特定存儲單元的訪問的能力。具體地說,可以使用空閒欄位來保存用於標識指令或存儲單元為要由性能監測器單元或處理器中的某個其它單元監測的指令或存儲單元的指示符。或者,指示符可以存儲在與指令或存儲單元相關聯的另一個位置中。在指示符置於指令中的情況下,典型地使用空閒欄位,但是在一些情況下可以擴展指令以包括指示符所需的空間。在這種情況下,處理器的架構可能需要改變。例如,64位架構可以改成65位架構以容納指示符。對於數據訪問,指示符可以與數據或該數據所在的存儲單元相關聯。
現在參照圖3,其示出根據本發明優選實施例的用於處理與指示符相關聯的指令的組件的圖。指令高速緩存300接收指令包(bundle)302。指令高速緩存300是圖2中的指令高速緩存214的示例。指令包是一種指令編組。這種指令編組典型地出現於可從英特爾公司獲得的IA-64處理器中。指令高速緩存300處理所要執行的指令。
作為該指令處理的一部分,指令高速緩存300確定哪些指令與指示符相關聯。在這些例子中,這些指示符也稱作「性能指示符」。信號304已與性能指示符相關聯。結果,將指令的信號304發送到性能監測器單元306。性能監測器單元306是圖2中的性能監測器單元240的示例。
當指令高速緩存300確定存在與指示符相關聯的指令時,發送信號以表示正在執行被標記(marked)的指令。在這些例子中,被標記的指令是與性能指示符相關聯的指令。或者,性能指示符可以指示指令包中的所有項目或指令均被標記以被計數。另外,這些指令的信號由指令高速緩存300發送到適當的功能單元。根據具體實現,不同於性能監測器單元306的功能單元可以對指令執行進行計數。在性能指示符位於指令或指令包中的情況下,高速緩存單元即指令高速緩存300探測指示符,並且向性能監測器單元306發送信號。
當性能監測器單元306接收到這些指令的信號時,性能監測器單元306對與指令304執行相關聯的事件進行計數。如圖所示,性能監測器單元306編程為僅對與性能指示符相關聯的指令的事件進行計數。換句話說,使用與指令或存儲單元相關聯的指示符來使得能夠由性能監測器單元306對與指令或存儲單元相關聯的事件進行計數。如果指令高速緩存300接收到沒有性能指示符的指令,則不對與該指令相關聯的事件進行計數。總而言之,性能指示符使得能夠在處理器中逐個指令地或逐個存儲單元地進行計數。
如果性能監測器單元306設成對這些類型的被標記指令所允許的規格(metrics)進行計數的模式,則性能監測器單元306對與性能指示符相關聯的指令的事件進行計數。在某些情況下,性能監測器單元306可以設成執行作為當前可用功能的某種其它類型的計數,例如對所有指令的執行進行計數。
對於訪問存儲單元中的數據,由數據高速緩存如圖2中的數據高速緩存216而不是由指令高速緩存來處理數據和指示符。數據高速緩存將表示正在訪問被標記存儲單元的信號發送到性能監測器單元306。被標記存儲單元類似於被標記指令。這些類型的存儲單元是與性能指示符相關聯的存儲單元。
現在參照圖4,其示出根據本發明優選實施例的一種用於將性能指示符與指令或存儲單元相關聯的機制的圖。處理器400從高速緩存402接收指令。在本例中,指示符不與指令一起存儲,也不存儲於找到數據的存儲單元中。相反,指示符存儲在單獨的存儲區域,即性能檢測映像高速緩存(shadowcache)404內。該存儲裝置可以是任何存儲裝置,例如系統存儲器、快閃記憶體、高速緩存或盤。
當處理器400從高速緩存402接收指令時,處理器400檢查性能檢測映像高速緩存404以查看性能指示符是否與指令相關聯。對包含數據的存儲單元的訪問進行類似的檢查。在一個實施例中,為每個不影響實際數據段的對應的字提供完全映像字。換句話說,處理器400允許高速緩存402的架構或配置保持不變。在這些例子中,所述映射是逐字的。然而,也可以使用某種其它類型的映射,例如每數據字一個映像位,其中性能檢測映像高速緩存404中的一位對應於數據的一個字。
對於這種類型的架構,利用該特性,編譯器以類似於調試符號的方式在與數據區本身分離的工作區內創建調試信息。當裝入模塊時,由裝入器準備額外的信息即性能指示符,從而當將指令裝入到高速緩存402中時使其可用於併入性能檢測映像高速緩存404中。這些高速緩存區域可以是混合的並且要麼如此標記要麼通過操作模式理解。處理器400使用性能指示符來確定如何對相關數據訪問和指令執行進行計數,或者如何避免(take exception)相關數據訪問和指令執行。在這些例子中,通過調試器或性能分析程序將該過程編程為了解在執行指令時是否使用映像信息。
現在參照圖5,其示出根據本發明優選實施例的指令包的圖。指令包500包含指令槽502、指令槽504、指令槽506和模板508。如圖所示,指令包500包含128位。每個指令槽包含41位,而模板508包含5位。模板508用來標識當前指令包內的終止,並且將槽內的指令映射到不同類型的執行單元中。
指令包500內的空閒位用來保存本發明的指示符。例如,指示符510、512和514分別位於指令槽502、504和506內。這些指示符可以根據具體實現而採取各種形式和各種大小。指示符可以使用單個位或者可以使用多個位。單個位可以用來指示響應該指令的執行要對事件進行計數。多個位可以用來標識閾值,例如可以在對事件進行計數之前傳遞的指令執行的處理器或時鐘周期的數量。此外,這些位甚至可以用作針對特定指令的計數器。類似的欄位使用可以用於標記數據或存儲單元的指示符。
或者,模板508可以用來包含相關指示符的指令包,從而使用一位來標識指令包中的所有指令。另外,指令包本身可以擴展成256位或某一其它位數,以包含性能指示符的額外信息。
接下來參照圖6A和6B,示出根據本發明優選實施例的包含性能指示符的子例程和包含性能指示符的數據的圖。在本例中,圖6A中的子例程600包括多條指令,其中指令602、604和606與性能指示符相關聯。這些指令也稱作被標記指令。當執行這些指令時,對與這些指令相關聯的事件進行計數,從而為軟體工具獲得數據以分析執行子例程600的數據處理系統的性能。
數據或包含數據的存儲單元可以採用類似方式以指示符標記。在這些例子中,這些指示符用於對數據或存儲單元訪問進行計數。在圖6B中,數據610包括與性能指示符相關聯的數據。數據612和數據614是與性能指示符相關聯的數據610的部分。與性能指示符相關聯的這些數據部分也稱作被標記數據。
現在參照圖7,其示出了根據本發明優選實施例的用於處理包含性能指示符的指令的過程的流程圖。圖7所示的過程可以在指令高速緩存如圖2中的指令高速緩存214中實現。
該過程以接收指令包(步驟700)開始。在這些例子中,每個指令包具有類似於圖5中的指令包500的格式。識別指令包中的指令(步驟702)。判定是否存在與指令相關聯的性能指示符(步驟704)。該判定可以通過檢查指令或指令包中的適當欄位來進行。或者,可以檢查性能檢測映像高速緩存如圖4中的性能檢測映像高速緩存404,以查看性能指示符是否與指令相關聯。
如果存在性能指示符,則發送信號到性能監測器單元(步驟706)。當接收到該信號時,性能監測器單元將對與指令執行相關聯的事件進行計數。另外,對指令進行處理(步驟708)。指令處理包括例如將指令發送到適當的功能單元以便執行。
然後,判定在指令包中是否存在另外的未處理指令(步驟710)。如果在指令包中存在另外的未處理指令,則該過程返回到如上所述的步驟702。否則,該過程終止。回到步驟704,如果不存在性能指示符,則該過程直接進入步驟708。
現在參照圖8,其示出了根據本發明優選實施例的用於選擇性地發送信號到中斷單元的過程的流程圖。圖8所示的過程可以在指令高速緩存如圖2的指令高速緩存242中實現。在使用性能監測器單元監測事件可能錯過特定事件的情況下採用該過程。例如,性能監測器單元對事件進行計數。當發生高速緩存失敗時,發送信號到性能監測器單元。當將對應高速緩存線的元數據裝入到高速緩存中時,也引發(raise)一個或多個適當信號。如果元數據表示要引發異常,則發送信號到中斷單元,其中該信號表示要引發異常。
該過程以接收指令包(步驟800)開始。識別指令包中的指令(步驟802)。判定是否存在與該指令相關聯的性能指示符(步驟804)。發送到中斷單元以表示要引發異常的信號不同於發送到性能監測器單元的信號。例如,指令可以與具有導致發送信號到中斷單元的第一值的特定性能指示符相關聯。性能指示符的第二值可以用來發送不同信號到性能監測器單元。如果存在具有第一值的性能指示符,則發送信號到中斷單元(步驟806)。當接收到該信號時,中斷單元發起適當的調用流支持以處理該中斷。調用流支持可以例如記錄試圖訪問高速緩存中的指令或數據的功能單元可能發生的高速緩存失敗。
另外,對指令進行處理(步驟808)。指令的處理包括例如發送指令到適當的功能單元以便執行。
然後,判定指令包中是否存在另外的未處理指令(步驟810)。如果指令包中存在另外的未處理指令,則該過程返回到如上所述的步驟802。否則,該過程終止。回到步驟804,如果不存在性能指示符,則該過程直接進入步驟808。
現在參照圖9,其示出根據本發明優選實施例的用於響應對與性能指示符相關聯的存儲單元的訪問而產生中斷的過程的流程圖。圖9所示的過程可以在數據高速緩存如圖2的數據高速緩存246中實現。
該過程以識別訪問存儲單元的請求(步驟900)開始。響應於識別出該請求,判定性能指示符是否與存儲單元相關聯(步驟902)。如果性能指示符與存儲單元相關聯,則通過發送信號到中斷單元來產生中斷(步驟904)。然後,處理對存儲單元的訪問(步驟906),然後該過程終止。
在圖10中,示出了根據本發明優選實施例的用於對事件進行計數的過程的流程圖。圖10所示的過程可以在性能監測器單元如圖2的性能監測器單元240中實現。
該過程以從指令高速緩存接收表示正在處理帶有性能指示符的指令的信號(步驟1000)開始。下一步,對與正被處理的指令相關聯的事件進行計數(步驟1002),然後該過程終止。事件計數可以存儲在計數器如圖2的計數器241中。
接下來參照圖11,其示出了根據本發明優選實施例的用於對指令進行選擇性計數的過程的流程圖。圖11所示的過程可以在指令高速緩存如圖2的指令高速緩存214中實現。
該過程以判定是否接收到與性能指示符相關聯的指令(步驟1100)開始。在本例中,該指示符導致對由處理器執行的這一指令和所有後續指令的事件進行計數。或者,該指示符可以是指示要開始新計數模式的指令本身。如果接收到帶有指示符的指令,則設置(set)標誌以開始對指令的事件進行計數(步驟1102)。該標誌表示應開始對指令的事件進行計數。
下一步,判定是否接收到帶有指示符的指令(步驟1104)。或者,指示符可以是指示要停止新計數模式的指令本身。如果接收到帶有指示符的指令,則清除(unset)該標誌以停止對事件的計數(步驟1106),然後該過程終止。
步驟1100和步驟1104中的指示符可以是相同的指示符,其中該指示符切換標誌的設置和清除。在另一種實現中,可以使用兩個不同的指示符,其中第一指示符僅設置標誌。第二指示符用來清除標誌。可以通過在要進行計數時採用高信號而在不再啟動計數時採用低信號來簡單地實現高速緩存單元如指令高速緩存或數據高速緩存與性能監測器單元之間為表示計數模式而進行的通信。
接下來參照圖12,其示出了根據本發明優選實施例的用於對指令進行選擇性計數的過程的流程圖。圖12所示的過程可以在指令高速緩存如圖2的指令高速緩存214中實現。
該過程以檢查標誌(步驟1200)開始。判定是否設置了標誌(步驟1202)。如果設置了標誌,則發送信號到性能監測器單元以啟動該單元對事件進行計數(步驟1204),然後該過程終止。否則,發送信號到性能監測器單元以禁止對事件計數(步驟1206),然後該過程終止。
圖11和12所示的過程在指令與性能指示符相關聯之後對所有指令的事件進行計數。通過這種方式,可以使用較少的位來觸發對事件的計數。此外,在對所有指令計數的情況下,可以對與外部子例程調用相關聯的事件進行計數。
現在參照圖13,其示出根據本發明優選實施例的用於識別超過閾值的指令的過程的流程圖。圖13所示的過程可以在指令高速緩存如圖2的指令高速緩存214中實現。
該過程以接收與性能指示符相關聯的指令(步驟1300)開始。為指令識別閾值(步驟1302)。在這些例子中,閾值與完成指令所需的處理器或時鐘周期的數量相關。如果訪問高速緩存所需的高速緩存延遲或時間量超過該閾值,則對該事件進行計數。在這些例子中,閾值設置在指示符內。
例如,可以使用三位來設置八個不同的閾值。例如,「xx1」=10周期,「x1x」=50周期,以及「1xx」=100周期。這三位的某組合可以用來設置閾值。根據具體實現,可以使用更多或更少的位,並且可以將不同值分配給這些位。這些位的含義也可以通過接口來控制,例如可以用來設置每個位的含義的一組寄存器。這些寄存器是為此特定目的而添加到處理器架構的寄存器。
監測用於執行該指令的周期(步驟1304)。判定對該指令是否超過了閾值(步驟1306)。如果超過了閾值,則執行選定操作(步驟1308)。該選定操作可以根據具體實現而採取不同的形式。例如,每次超過閾值時,可以遞增計數器。或者,可以產生中斷。中斷可以將控制傳遞給另一個過程以收集數據。例如,該數據可以包括調用堆棧和有關該調用堆棧的信息。堆棧是保留存儲器區域,其中一個或多個程序存儲狀態數據,如過程和函數調用地址、所傳遞的參數、性能監測器計數器值以及有時還有局部變量。
判定監測是否結束(步驟1310)。步驟1310可以一次一條指令地實現。當執行了指令或者超過了閾值時,發送信號。在本例中,單條指令的執行導致發送一個信號。在可以同時執行多條指令的情況下,可能需要多個信號來表示每條指令的執行。在一些實施例中,可以支持採樣方案,其中一次僅對一條指令支持閾值。這可以通過僅支持處理器指令隊列中的特定位置中的那些指令的閾值來實現。在其它實施例中,如果至少一條被標記指令超過閾值,則可以發送一個信號。對於超過閾值的每條指令,為該指令引發或產生單獨的信號。
如果監測結束,則將所收集的信息發送到監測程序(步驟1312),然後,該過程終止。否則,該過程返回到如上所述的步驟1304。在步驟1306,如果未超過該指令的閾值,則該過程直接進入步驟1310。
可以在數據高速緩存如圖2的數據高速緩存216中實現類似的過程,以監測對存儲單元的訪問。圖13所示的過程可以修改成識別訪問存儲單元中的數據所需的周期。如同指令執行一樣,當訪問存儲單元中的數據所需的時間量超過指定閾值時進行計數或產生中斷。
如同其它例子一樣,可以作為指令的一部分或者與存儲單元中的數據一起包括這些指示符。或者,這些指示符可以與指令或數據相關聯地在性能檢測映像高速緩存或存儲器中找到。
參照圖14,其示出根據本發明優選實施例的用於監測對存儲單元的訪問的過程的流程圖。圖14所示的過程可以在數據高速緩存如圖2的數據高速緩存216中實現。該過程用來對存儲單元中的數據訪問進行計數。
該過程以接收與性能指示符相關聯的數據(步驟1400)開始。判定是否訪問了該數據的存儲單元(步驟1402)。如果訪問了該存儲單元,則遞增計數器(步驟1404)。判定監測是否結束(步驟1406)。如果對存儲單元的監測結束,則該過程終止。否則,該過程返回到步驟1402。在步驟1402,如果沒有訪問存儲單元,則該過程進入步驟1406。
參照圖15,其示出根據本發明優選實施例的用於生成元數據如性能指示符的組件的方框圖。編譯器支持嵌入在指示要生成的元數據的原始碼中的命令(directive)。編譯器1500可以生成用於執行的指令1502和用於監測的元數據。在這些例子中,隨著指令或數據高速緩存頁被裝入到存儲器中,作業系統程序裝入器/連結器和/或性能監測程序讀取由編譯器1500生成的元數據,並且將元數據裝入到存儲器如性能監測器部分1506中。該部分本身被標記為元數據1504。處理器可以接受性能監測器部分1506中具有編譯器所生成部分數據的格式的元數據1504,並且向處理器的內部性能檢測映像高速緩存填充該數據。下面參照圖17描述面向塊的方案。
在一個實施例中,該格式對於其塊或扇區(sector)引用中的每一個都簡單地具有性能檢測映像高速緩存條目,並且將元數據1504傳送至其對應的一個或多個映像條目。代替具有性能檢測映像高速緩存,可以修改高速緩存本身的內部格式來包含元數據1504。在修改指令流本身以包含元數據的實施例中,裝入器更新指令流以包含適當的指示符和工作區,或者編譯器1500生成了代碼來包含元數據1504。在任何情況下,在裝入了代碼之後,處理器接收元數據1504。
另外,元數據1504可以與指令1502相關聯地置於性能檢測映像存儲器1505中。編譯器1500在表或調試數據部分中產生信息。性能監測程序將該信息裝入到性能檢測映像存儲器1505內的映像數據區中。或者,調試區可以由一起工作的作業系統和處理器自動填充。
然後,可以由處理器1508執行指令1502。編譯器1500可以設置處理器1508中的寄存器如模式寄存器1510。當設置了該寄存器時,處理器1508在執行指令1502時查看性能檢測映像存儲器1505中的元數據1504,以判定元數據1504中的性能指示符是否與指令1502中正被執行的指令相關聯。使用例如上面參照圖2-14所述的過程處理這些性能指示符。如果沒有設置模式寄存器1510,則在執行指令1502時忽略元數據1504。
可以對存儲單元1512中的數據執行類似的過程。根據具體實現,元數據1504可以置於指令內或數據內,而不是置於性能檢測映像存儲器1505中。然而,通過將元數據1504置於性能檢測映像存儲器1505中,當元數據1504置於性能檢測映像存儲器1505中時可以動態執行元數據1504的生成。
該特性允許在不必修改程序的情況下進行對指令的選擇和監測。換句話說,編譯器1500可以在編譯了指令1502以便由處理器1508執行之後生成元數據1504。設置模式寄存器1510使處理器1508在性能檢測映像存儲器1505中查找元數據1504而不必修改指令1502。在這些例子中,元數據1504採取告訴處理器1508如何處理指令1502的執行和/或對存儲單元1512的數據訪問的性能指示符的形式。
接下來參照圖16,其示出根據本發明優選實施例的元數據的圖。元數據1600是圖15中的元數據1504的例子。該元數據由編譯器如編譯器1500生成。
在本例中,元數據1600包括5個條目,即條目1602、1604、1606、1608和1610,如元數據1600中的行1612所示。在本例中,這些條目中的每一個都包括偏移、長度和用於描述代碼的檢測(instrumentation)的標誌。
條目1602的偏移為0,而其條目長度為120位元組。標誌1614表示需要對由條目長度1616表示的範圍內的所有指令進行計數。在這些例子中,每條指令的長度為4位元組。條目1604的條目長度為4位元組,這與指令相對應。標誌1618表示當執行該指令時應當產生異常。
在條目1606中,以160位元組的偏移開始的指令與標誌1620相關聯。該標誌表示如果超過閾值即100個周期則應當對指令進行計數。
條目1608中的標誌1622表示應當在偏移為256位元組的指令處開始跟蹤。如條目1610中的標誌1624所指示而停止跟蹤,其中條目1610具有用於偏移為512位元組的指令的標誌。
這些標誌用來生成與這些指令相關聯的性能指示符。作業系統將由編譯器生成的該元數據傳送到性能檢測映像存儲器如圖15的性能檢測映像存儲器1506中,並且處理該元數據。或者,根據具體實現,該元數據可以置於指令內的欄位中。
現在參照圖17,示出根據本發明優選實施例的在裝入和維護性能檢測映像高速緩存時所涉及的組件的圖。在本例中,現有高速緩存1700包含主段1702。主段1702包括塊1704、1706、1708、1710、1712、1714、1716、1718、1720、1722和1724。轉換表1726用來提供對主段1702中的塊1704-1724到性能檢測(perfinst)段1728中的塊的映射。該段中的數據置於新性能檢測映像高速緩存1730中。
在程序編譯的時候,編譯器生成如前所述的新性能檢測數據部分。在程序裝入時候,裝入器向處理器查詢以確定高速緩存線大小。裝入器以處理器所要求的格式,為裝入器所裝入的任何文本或數據段解析性能檢測段1728並且構造映像段。該映像段置於新性能檢測映像高速緩存1730中。
映像段中的每一塊包含對應主高速緩存塊中的指令或數據的元數據。該元數據例如包括主段1702的塊內每個帶標籤(tagged)項目的標誌、標籤欄位、閾值和計數欄位。該元數據還可以包括表示塊中的所有指令或數據的標誌。
裝入器構造將主段1702中的每一塊映射到性能檢測段1728中對應的性能檢測塊如塊1732、1734、1736、1738、1740、1742、1744、1746、1748、1750和1752的表,即轉換表1726。此外,裝入器還向處理器登記該表即轉換表1726的頭以及主段1702的位置和大小。
在頁更替的時候,頁面調度軟體提供新接口來使性能檢測段1728與對應主段即主段1702相關聯。當主段1702頁面調入或調出時,性能檢測段1728也頁面調入或調出。
在高速緩存線更替的時候,處理器包含新性能檢測映像高速緩存1730,其中的高速緩存幀與現有數據和指令高速緩存如現有高速緩存1700中的幀直接相關聯。當處理器的指令或數據高速緩存裝入新線時,高速緩存也必須將對應性能檢測塊裝入到性能檢測映像高速緩存即新性能檢測映像高速緩存1730中。處理器(從程序裝入的時候由裝入器提供的登記數據)知道處理器正在將塊帶入其具有關聯性能檢測段即性能檢測段1728的高速緩存。處理器在與該段相關聯的轉換表1726中查看,得到對與將要裝入的塊相對應的性能檢測塊的引用,並且將該性能檢測塊裝入到新性能檢測映像高速緩存1730中。在這些例子中,與元數據相關聯的高速緩存失敗不被周信號通知,或者以不同於與主高速緩存塊如主段1702中的數據相關聯的高速緩存失敗的方式進行處理。
現在參照圖18,其示出根據本發明優選實施例的用於生成指令的元數據的過程的流程圖。圖18所示的過程可以由性能監測程序實現。
該過程以識別要剖析的指令(步驟1800)開始。該指令可以是例如已被執行多於選定次數的指令。為所識別的指令生成元數據(步驟1802)。該元數據採取性能指示符的形式。性能指示符可以,例如,每當執行該指令時遞增計數器,在執行指令所需的周期數超過閾值的情況下遞增計數器,在該指令之後對所有事件、所有指令觸發對事件的計數,或者對響應執行指令而發生的事件進行計數。在優選實施例中,計數器位於關聯的性能檢測映像高速緩存中,並且採取若干位來允許高速緩存中的數據或指令與被保留用於計數的位之間的一一對應關係。
然後,將元數據與指令相關聯(步驟1804)。接下來,判定是否存在更多指令要處理(步驟1806)。如果存在另外的指令,則該過程返回到步驟1800。否則,該過程終止。可以使用類似的過程來動態生成存儲單元中的數據的元數據。
現在參照圖19,其示出根據本發明優選實施例的用於生成存儲單元的元數據的過程的流程圖。圖19所示的過程可以在編譯器如圖15的編譯器1500中實現。
該過程以識別要剖析的存儲單元(步驟1900)開始。通過探測對被標記位置的訪問而發生步驟1900。為所識別的存儲單元生成元數據(步驟1902)。該元數據採取性能指示符的形式。性能指示符可以,例如,每當訪問存儲單元時遞增計數器,在訪問存儲單元所需的周期數超過閾值的情況下遞增計數器,或者觸發對存儲單元的所有訪問的計數。然後,將元數據與存儲單元相關聯(步驟1904)。接下來,判定是否存在更多存儲單元要處理(步驟1906)。如果存在另外的存儲單元,則該過程返回到步驟1900。否則,該過程終止。
現在參照圖20,其示出根據本發明優選實施例的用於對特定指令的執行進行計數的過程的流程圖。圖20所示的過程可以在指令高速緩存如圖2的指令高速緩存214中實現。
該過程以執行指令(步驟2000)開始。判定計數器是否與指令相關聯(步驟2002)。計數器可以包括在指令內的欄位中,或者可以位於性能檢測映像存儲器中。如果計數器與指令相關聯,則遞增計數器(步驟2004),然後該過程終止。否則,該過程終止而不遞增計數器。如果計數器超過閾值,則可以將計數器清零。
當計數器作為指令的一部分實現時,該計數器可能為有限大小。在這種情況下,計數器的閾值可以設為表示計數器何時處於上溢的危險中。然後,在讀到該值之後,則可以將計數器清零。該值可以由性能監測器單元或用來分析數據的程序讀取。可以實現API來訪問該數據。
現在參照圖21,其示出根據本發明優選實施例的用於對特定存儲單元的訪問進行計數的過程的流程圖。圖21所示的過程可以在數據高速緩存如圖2的數據高速緩存216和指令高速緩存214中實現。
該過程以探測對存儲單元的訪問(步驟2100)開始。判定計數器是否與存儲單元相關聯(步驟2102)。計數器可以包括在存儲單元內,或者可以位於性能檢測映像存儲器中。如果計數器與存儲單元相關聯,則遞增計數器(步驟2104),然後該過程終止。否則,該過程終止而不遞增計數器。
接下來參照圖22,其是根據本發明優選實施例的用於訪問關於指令執行或存儲單元訪問而收集的信息的組件的圖。在本例中,指令單元2200執行指令2202,並且遞增計數器2204。每次執行指令2202時,都遞增該計數器。在本例中,指令單元2200可以實現為圖2中的指令高速緩存214。
當指令或數據高速緩存頁被裝入到存儲器中時,作業系統程序裝入器/連結器和/或性能監測程序讀取由編譯器生成的元數據,並且確定計數與指令或數據訪問相關聯,然後裝入過程分配數據區來維護計數器作為其性能檢測段的一部分。計數器的大小和數據訪問的粒度決定所要分配的工作區的數量。
在簡單的情況下,數據或指令訪問的粒度可以是字大小(從而對字中的任何字節的訪問都被認為是一次訪問)並且計數也可以是字大小。在這種情況下,在主段和性能檢測段之間存在一對多映射(不需要全字來包含計數或閾值)。裝入過程分配一個或多個映像頁,並且告訴處理器使用所述一個或多個映像頁來包含計數。該映射的詳細信息在上面參照圖17作過描述。處理器中的高速緩存單元維護映像塊條目以指示對應頁包含計數信息。可以提供不同映射和不同級別的支持。
在另一實施例中,編譯器分配工作區來維護計數,並且指示將這些工作區置於其生成的數據區中。元數據中的條目可以表示數據的開始、數據的字節數、數據的粒度、計數區的開始和每個計數單元的粒度。在任何情況下,將元數據裝入到處理器中,並且處理器向其內部(映像)高速緩存填充元數據。在修改指令流本身來包含元數據的示例性實施例中,裝入器更新指令流以包含適當的指示符和工作區,或者編譯器生成了代碼來包含元數據。在任一種情況下,在裝入了代碼之後,處理器接收元數據。
數據單元2206可以作為圖2中的數據高速緩存206實現。在本例中,每當訪問數據2208時,都遞增計數器2210。數據2208和計數器2210均處於特定存儲單元中。在這些例子中,可以採用新指令,其中,該指令稱作ReadDataAccessCount(RDAC),其獲得(take)數據地址和寄存器,並且將與該數據地址相關聯的計數置於該寄存器中。
指令執行和數據訪問這些事件中的每一個都導致計數器的遞增。本發明的機制提供一個接口即硬體接口2212來訪問所收集的這一數據。在這些例子中,硬體接口2212採取用於作業系統2214的應用程式編程接口(API)的形式。這樣,分析工具2216可以從計數器2204和計數器2210獲得數據。分析工具2216可以採取多種形式,例如Oprofile,其是Linux系統的公知的全系統剖析器。雖然圖22中的例子示出向指令單元和數據單元提供接口,但是也可以實現硬體接口2212來提供對來自處理器中的其它單元的信息的訪問。例如,可以為允許訪問位於性能監測器單元的計數器如圖2的性能監測器單元240的計數器241和242中的信息的硬體接口2212創建API。
在圖23中,示出根據本發明優選實施例的用於自主修改程序代碼以允許對代碼部分進行選擇性計數或剖析中的組件的方框圖。在本例中,剖析器2300是可以用來識別程序如程序2302中具有高使用率的例程的程序,如tprof。在這些例子中,「tprof」是定時器剖析器,其捆綁(ship)在來自國際商業機器(IBM)公司的高級交互性執行體(AIX)作業系統上。該程序採集由定時器發起的樣本。當定時器結束時,tprof識別所執行的指令。tprof是可以用於系統性能分析的CPU剖析工具。該工具是分析工具的例子,並且基於包括以下步驟的採樣技術通過時間或性能監測器計數器周期性地中斷系統;隨同進程id(pid)和線程id(tid)一起確定被中斷代碼的地址;記錄軟體跟蹤緩衝器中的TPROF掛鈎(hook);並且返回到被中斷代碼。
或者,可以使用性能監測器計數器的固定數目的計數來代替定時器。該程序剖析用來指示在程序內何處花費了時間的子例程。使用率超過特定閾值的程序也稱作「熱點(hot)」。通過使用來自剖析器2300的信息,可以識別感興趣的例程如程序2302中的子例程2304。
採用該信息,可以由分析工具2306自主修改子例程2304中的指令,以允許對子例程2304的執行進行計數。可以識別另外的例程以由分析工具2306進行修改。例如,還可以識別子例程2304為感興趣的例程,並修改該例程的指令以允許對子例程2304的執行進行計數。對這些例程中的代碼的修改包括將性能指示符與這些子例程中每一個內的一條或多條指令相關聯。
在由分析工具2306修改了這些例程中的指令之後,由處理器2308執行程序2302。處理器2308執行程序2302並且為這些例程提供計數。例如,對所執行的指令和執行例程時所用周期數的計數可以使用上述機制由處理器2308執行。
參照圖24,其示出根據本發明優選實施例的用於動態地將性能指示符添加到指令或使其與指令關聯的過程的流程圖。圖24所示的過程可以在諸如圖23的分析工具2306的程序中實現。分析工具是用來獲得有關程序執行的規格的程序。這些規格可以是任何可測量參數,如執行時間、所執行的例程、所執行的特定指令和所訪問的存儲單元。
該過程以使用來自剖析器的數據識別感興趣的指令(步驟2400)開始。該剖析器可以例如是AIX中見到的定時器剖析器。從識別出的指令中選擇一條指令以作修改(步驟2402)。然後,將性能指示符動態添加到所選指令(步驟2404)。
在步驟2404,可以以無需為執行而修改指令的方式添加指令。可以採用性能檢測映像存儲器如圖15中的性能檢測映像存儲器1506來保存性能指示符。在這種情形下,設置處理器中的寄存器以指示當執行指令時應檢查性能檢測映像存儲器以獲得性能指示符。
然後,判定是否存在另外的所識別指令要修改(步驟2406)。如果存在另外的指令要修改,則該過程返回到步驟2402。否則,該過程終止。
接下來參照圖25,其示出根據本發明優選實施例的用來通過將性能指示符與頁內的指令相關聯而掃描頁的組件的圖。本發明的機制使用性能指示符來允許每次一頁地檢測(instrument)或修改程序中的指令。
在本例中,程序2500包含三頁,即頁2502、頁2504和頁2506。掃描守護進程(daemon)2508每次一頁或多頁地將性能指示符與程序2500中的指令相關聯。例如,頁2502中的指令可以通過掃描守護進程2508與性能指示符相關聯。然後,由處理器2510執行程序2500。然後可以收集來自對程序2500的執行的數據。該數據包括例如對響應頁2502中的指令而發生的事件的計數,從而對執行頁2502中的每條指令的次數進行計數和/或識別對頁2502的訪問次數。
下一步,掃描守護進程可以從頁2502內的指令中去除性能指示符,並且將性能指示符與頁2504中的指令相關聯。然後,由處理器2510再次執行程序2500,並且收集來自對該程序的執行的數據。然後,可以在所執行的程序2500中修改頁2506中的指令以收集有關該頁的數據。
以這種方式,可以識別諸如定時器剖析器的程序通常不記錄的對例程的使用。由於中斷可能被禁止,或者樣本的定時可能產生同步非隨機行為,所以定時器剖析器可能不記錄對例程的某些使用。通過修改程序2500中的指令,可以獲得對例程或其它模塊的計數,其中,計數是無偏的,並且系統是不受幹擾的。以這種方式,避免了中斷驅動的計數。此外,雖然對代碼的檢測是每次一頁的,但是在掃描程序時也可以使用指令的其它編組,例如形成程序的模塊。例如,編組可以是單個可執行程序、庫、一組選定函數和一組選定頁。
接下來參照圖26,其示出根據本發明優選實施例的用於將指示符添加到頁內指令的過程的流程圖。圖26所示的過程可以在諸如圖25的掃描守護進程2508的程序中實現。
首先,識別頁的選擇範圍(selection)(步驟2600)。在本例中,這些頁是程序中所要掃描或檢測的那些頁。接下來,選擇頁的選擇範圍中的一頁以作修改(步驟2602)。然後,使指示符與選定頁內的所有指令相關聯(步驟2604)。然後執行程序(步驟2606)。接下來,判定是否掃描了選擇範圍內的所有頁(步驟2608)。如果掃描了所有頁,則該過程隨後終止。然而,如果並非所有的頁都已被掃描,則選擇所要掃描的下一頁(步驟2610),而該過程返回到如上所述的步驟2604。
圖26所示的過程示出所掃描的作為頁的指令編組。根據具體實現,可以以這種方式掃描或檢測其它類型的指令分組,例如形成程序的模塊。
採用程序來根據調用堆棧中找到的信息從例程中識別調用者。該程序通過識別已進行的函數調用,允許識別例程中發生了什麼,並且提供對程序中發生了什麼的總結。然而,該程序需要將指令插入代碼中以獲得這一信息。
本發明的機制允許識別調用和返回,而不必執行特別的代碼檢測。具體地說,可以使用對特定指令集產生中斷的函數來收集有關系統和應用程式的信息。在這些例子中,調用和返回的指令與產生中斷的性能指示符相關聯。
通過向上回巡(walk back)調用堆棧,可以獲得完整的調用堆棧以作分析。「堆棧巡視(stack walk)」也可以描述為「堆棧展開(stack unwind)」,而「巡視堆棧」的過程也可以描述為「展開堆棧」。這些術語中的每一個闡明了對該過程的不同比喻。當該過程必須逐步或逐幀地獲得和處理堆棧幀時,該過程可以描述為「巡視」。當該過程必須獲得和處理指向彼此的堆棧幀時,該過程也可以描述為「展開」,而這些指針及其信息必須通過很多指針解除參考(dereference)來「展開」。
堆棧展開遵循中斷時的函數/方法調用順序,並且響應與性能指示符相關聯的指令的執行而生成。調用堆棧是例程加上在程序執行期間進入的例程(即模塊、函數、方法等)內偏移的有序列表。例如,如果例程A調用例程B,然後例程B調用例程C,而處理器正在執行例程C中的指令,則調用堆棧為ABC。當把控制從例程C返回到例程B時,調用堆棧為AB。為了在所生成的報告內表達更簡潔和易於解釋起見,提供例程的名稱而沒有任何偏移信息。偏移可以用於對程序執行更詳細的分析,然而,這裡不進一步考慮偏移。
因此,在通過執行與特定性能指示符關聯的指令而發起的中斷處理期間或後處理時,所生成的基於樣本的剖析信息反映調用堆棧的採樣,而不是如同某些程序計數器採樣技術中一樣僅僅為可能調用堆棧的葉子(leaf)。葉子是分枝末端的節點,即沒有子代的節點。子代是父節點之子,而葉子是無子節點。
現在參照圖27,其是示出根據本發明優選實施例的包含多個堆棧幀的調用堆棧的圖。「堆棧」是保留存儲器區域,其中一個或多個程序存儲狀態數據,如過程和函數調用地址、所傳遞參數,並且有時還有局部變量。「堆棧幀」是線程堆棧的一部分,其表示單個函數調用的局部存儲(參數、返回地址、返回值和局部變量)。每一個活動的執行線程具有為其堆棧空間分配的一部分系統存儲器。線程堆棧由堆棧幀序列組成。線程堆棧上的幀集在任何時候都表示該線程的執行狀態。由於堆棧幀典型地是相互連結的(例如,每個堆棧幀指向前一堆棧幀),因此經常有可能向上往回跟蹤堆棧幀序列,並且形成「調用堆棧」。調用堆棧表示所有尚未完成的函數調用——換句話說,它反映任何時間點的函數調用序列。
調用堆棧2700包括標識正在運行的例程、調用其的例程等等一直到主程序的信息。調用堆棧2700包括多個堆棧幀2702、2704、2706和2708。在所示例子中,堆棧幀2702位於調用堆棧2700的頂部,而堆棧幀2708位於調用堆棧2700的底部。調用堆棧的頂部也稱作「根」。修改(大多數作業系統中所見)的中斷,以獲得被中斷線程的程序計數器值(pcv)以及指向該線程的當前活動堆棧幀的指針。在英特爾架構中,這典型地由寄存器EIP(程序計數器)和EBP(指向堆棧幀的指針)的內容表示。
通過訪問當前活動的堆棧幀,有可能利用(典型的)堆棧幀連結約定,以便將所有幀鏈在一起。標準連結約定的一部分還規定函數返回地址正好放在被調用函數的堆棧幀之上;這可以用來確定被調用函數的地址。雖然本討論採用基於英特爾的架構,但是本例不是限制。大多數架構採用可以類似地由修改的剖析中斷處理程序導航的連結約定。
當發生中斷時,所獲取的第一參數是程序計數器值。下一個值是指向被中斷線程的當前堆棧幀的頂部的指針。在所示例子中,該值將指向堆棧幀2708中的EBP2708a。EBP2708又指向堆棧幀2706中的EBP2706a,而EBP2706a又指向堆棧幀2704中的EBP2704a。該EBP又指向堆棧幀2702中的EBP2702a。標識調用例程的返回地址的EIP2702b-2708b位於堆棧幀2702-2708內。可以根據這些地址來識別這些例程。因此,通過向上或向後巡視堆棧而收集所有返回地址來定義例程。
在某些情況下獲得完整的調用堆棧可能是困難的,因為例如當具有一個調用堆棧的應用程式對具有不同調用堆棧的內核進行調用時,環境可能使跟蹤困難。由本發明的機制提供的硬體支持避免了這些問題中的某些問題。
接下來參照圖28,其示出根據本發明優選實施例的用於識別與調用和返回指令相關聯的事件的過程的流程圖,其中從性能監測器單元收集數據。圖28所示的過程也可以在分析工具如圖22的分析工具2216中實現。
該過程以識別調用和返回指令(步驟2800)開始。調用和返回指令是用於確定何時調用了例程和何時例程完成的感興趣的指令。這可以為中斷、中斷返回、系統調用和從系統調用返回而實現。
接下來,使性能指示符與所識別的調用和返回指令相關聯(步驟2802)。然後執行程序(步驟2804),並且從性能監測器單元收集數據(步驟2806),然後該過程終止。該信息可以通過接口如圖22所示的硬體接口2212來收集,其中,採用API來獲得由處理器中的不同功能單元收集的數據。
利用該數據,可以識別例程的調用者。該信息可以用來產生諸如樹的數據結構來跟蹤和呈現有關程序執行的信息。數據結構的這一生成可以使用類似於在分析工具中提供的過程來實現。
接下來參照圖29,其示出根據本發明優選實施例的用於識別已被執行多於選定次數的例程的過程的流程圖。圖29所示的過程可以在處理器內的功能單元如圖2的指令高速緩存214中實現。該過程用來識別對被執行指令的計數,並且當這些指令出現次數多於某選定次數時產生中斷。
首先,判定是否探測到對選定指令的執行(步驟2900)。通過檢查每條被執行的指令來判定,以查看性能指示符是否與該指令相關聯。這些性能指示符可以通過不同工具如圖15中的編譯器1500或圖22中的分析工具2216與該指令相關聯。
如果沒有識別出對包含性能指示符的指令的執行,則該過程返回到步驟2900,直到探測出選定指令。如果選定指令被識別為正在執行,則為該選定指令遞增具有設定閾值的計數器,以對執行該特定指令的頻度計數(步驟2902)。在這些例子中,為被標識以進行監測的每條指令分配計數器。
接下來,判定是否達到設定閾值(步驟2904)。對於每一個高速緩存級,起初通過使用文檔化高速緩存失敗次數來確定閾值。然而,增加次數用來確定因高速緩存幹擾(來自其它處理器的訪問)引起的問題。可以以不同值重複運行,以識別具有最差性能的區域。
在這些例子中,指令可以與包括要監測對指令的執行並提供計數器的指示的指示符相關聯。此外,可以包括計數標準來識別何時要產生中斷。例如,當指令被執行多於十三次時,可以產生中斷。
如果尚未達到閾值,則該過程返回到如上所述的步驟2900。如果達到了設定閾值,則將中斷發送到監測程序(步驟2906),然後該過程終止。該中斷可以被發送到中斷單元如圖2中的中斷單元250,這將控制傳到適當的程序或進程以處理中斷。
該過程可能對具有很多轉移的例程尤其有用。在這種情況下,將標誌所有轉移指令以進行計數。通過這種計數而獲得的信息可能對通過使轉移最少化或調整所用處理器的指令架構中支持的提示(hint)標誌來識別對編譯器和運行時編譯執行的(JIT,just-in-time)代碼生成的改進有用。
接下來參照圖30,其示出根據本發明優選實施例的用於當特定指令被執行的次數多於某選定次數時檢查調用堆棧並識別例程的調用者的過程的流程圖。圖7所示的過程可以由中斷單元如圖2中的中斷單元250發起。該過程用來識別例程中的調用,並且可以用來遞歸獲得調用者的信息。
首先,檢查調用堆棧,並且識別例程的調用者(步驟3000)。接下來,從指令高速緩存捕獲對被執行指令的計數(步驟3002)。該計數是針對圖29的步驟2902中所用的計數器的。然後將計數器清零(步驟3004),隨後從中斷返回控制(步驟3006)。可以使用在圖30的過程中獲得的信息來識別另外的要監測的例程以遞歸識別例程的調用者。
接下來參照圖31,其是示出根據本發明優選實施例的為進行監測而選擇的指令和數據的範圍的圖。在本例中,程序3100包括指令範圍3102和3104。這些範圍中的每一個均被識別為所要監測的感興趣範圍。這些範圍中的每一個均設在諸如圖2的指令高速緩存214的指令單元內。每個範圍都用來在程序3100的執行期間告訴處理器在一範圍內執行的指令數以及進入一範圍的次數。此外,可以使用範圍寄存器3108來判定是否識別了要執行的選定類型的指令。
使用來自範圍寄存器3108的附加或不同機制來識別一種或多種指令類型。一種機制涉及使用具有指令掩碼的指令匹配寄存器(IMR)。該掩碼用來識別指令中必須匹配特定值的位,或者用來識別其值無關緊要的位。這些位也稱作無關位。另一種方案使用操作碼或指令類型列表。在該實現中,指示符可以用來識別哪些指令要結合範圍寄存器3108使用。
指令高速緩存3106使用範圍寄存器3108來定義指令範圍。這些寄存器可以是現有寄存器,或者可以修改處理器來包括定義指令範圍的寄存器。這些範圍可以基於指令地址。另外,範圍寄存器3108可以由各種調試器程序和性能工具更新。
如果在諸如指令範圍3102或指令範圍3104的範圍內執行指令,則在指令高速緩存3106中遞增計數器。或者,可以發送信號到性能監測器單元如圖2中的性能監測器單元240。在這些例子中,性能監測器單元跟蹤對該範圍內執行的指令數和進入該指令範圍的次數的計數。此外,識別由範圍寄存器3108設置的範圍內選定類型的指令可以導致指令高速緩存3106發送信號到中斷單元。在本例中,中斷單元執行代碼,以執行可能涉及對指令進行計數、識別和分析指令的調用堆棧或者根據需要執行某種其它分析的過程。
數據訪問可以以類似方式監測。例如,數據3112包括數據範圍3114。可以以與指令範圍3102或指令範圍3104內的指令執行類似的方式對數據範圍3114的數據訪問進行計數。這些範圍可以定義在諸如圖2的數據高速緩存216的數據單元內的寄存器中。這些數據範圍可以作為數據的存儲單元範圍定義在寄存器中。
接下來參照圖32,其示出根據本發明優選實施例的用於對設定範圍的訪問次數以及在設定範圍內執行的指令數進行計數的過程的流程圖。圖32所示的過程可以在諸如圖2的指令高速緩存214的指令單元中實現。該過程對識別指令地址範圍內特定或選定類型的指令的執行尤其有用。例如,該過程可以用於處理在一個指令範圍內發生的轉移指令的執行。
首先,識別所要執行的指令(步驟3200)。接下來,判定指令是否為選定類型(步驟3202)。可以通過使用指示符或使用與範圍寄存器分開的寄存器集中的掩碼集來識別指令類型。掩碼或指示符用來判定指令是否為選定類型。該選定類型可以是例如轉移指令。在這些例子中,由於所採取的轉移識別路徑流,因此它們尤其令人感興趣。調用和返回也可以是被識別以進行處理的指令類型,因為這些類型的指令在識別函數和/或子例程方面很有用。可以被識別為選定類型的指令的其它類型的指令是與存儲器訪問相關的指令,特別是重複的指令,如串傳送。
然後,判定指令是否在設定的指令範圍內(步驟3204)。該範圍可以通過檢查定義一個或多個指令範圍的寄存器來識別。在這些例子中,設定的指令範圍可以對應於某代碼編組,例如子例程、庫或軟體模塊。如果指令不在設定的指令範圍內,則該過程返回到如上所述的步驟3200。如果該指令在設定的指令範圍內,則發送信號到中斷單元(步驟3206)。
在步驟3206,本發明提供了一種用於處理指令的方法、設備和計算機指令。響應數據處理系統的處理器內的指令高速緩存中接收到要執行的指令,判定指示符是否與指令相關聯,以及指令是否為指令範圍內的特定類型。如果指示符與指令相關聯並且指令為該指令範圍內的特定類型,則產生中斷。
把控制傳到中斷單元,以執行用於處理以信號通知的中斷的代碼。該代碼可以簡單地對指令的執行進行計數,或者可以獲得和分析指令的調用堆棧信息。然後,當中斷單元完成處理中斷時,處理指令(步驟3208),然後,該過程返回到如上所述的步驟3200。
回到步驟3204,如果指令不在設定範圍內,則該過程返回到步驟3200。在步驟3202,如果指令不為選定類型,則該過程也返回到步驟3200。
可以對數據執行類似的過程。在這種實現中,判定選定類型的數據,例如對未對準(unaligned)數據字的訪問。
因此,本發明提供了一種用於在監測對程序的執行時提供協助的改進方法、設備和計算機指令。本發明的機制包括採用由處理器識別以啟動對與指示符關聯的指令的執行進行計數的指示符。通過該機制啟動如上所述的各種計數。此外,採用通過利用指示符與特定指令的關聯而提供的信息,本發明的機制還提供在監測和分析程序性能中對程序的各種調整。此外,如上所述,可以自動調整程序,以允許監測選定指令乃至例程和模塊而不必修改程序。
值得注意的是,雖然本發明是在完全功能數據處理系統的上下文中描述的,但是本領域的普通技術人員應當理解本發明的過程能夠以指令的計算機可讀介質的形式和各種形式來分發,並且本發明與實際上用來執行分發的信號承載介質的具體類型無關地同等適用。計算機可讀介質的例子包括諸如軟盤、硬碟驅動器、RAM、CD-ROM、DVD-ROM的可記錄型介質和諸如數字和模擬通信鏈路、採用各種傳輸形式例如射頻和光波傳輸的有線或無線通信鏈路的傳輸型介質。計算機可讀介質可以採取為在特定數據處理系統中實際使用而解碼的編碼格式的形式。
本發明的描述是為了示例和描述的目的而提供的,不旨在窮舉或者將本發明限定於所公開的形式。對於本領域的普通技術人員而言,很多修改和變動將是顯然的。例如,代替使用指令中或指令包中的欄位,可以使用新指令或操作碼來指示後續的指令或後續的指令集是被標記指令。此外,在希望在指令的欄位內包括性能指示符的情況下,如果用於性能指示符的空閒欄位不可用,則可以改變處理器的架構來包括附加位。此外,雖然給出了諸如指令執行的事件、執行指令所需時間如時鐘或處理器周期、訪問數據及進入到代碼部分中的時間的例子,但是這些例子並不旨在將本發明限定於可以計數的事件的類型。可以使用本發明的機制對任何與對指令的執行或對存儲單元的訪問有關的事件進行計數。
選擇和描述這些所示實施例是為了最佳地說明本發明的原理、實際應用,並使得本領域的其他普通技術人員能夠理解本發明能有計劃地以具有各種修改的各種實施例來適用於具體應用。
權利要求
1.一種用於處理指令的數據處理系統中的方法,該方法包括響應處理器的指令高速緩存中接收到要執行的指令,判定指示符是否與該指令相關聯以及該指令是否為指令範圍內的特定類型;以及如果指示符與該指令相關聯並且該指令為該指令範圍內的特定類型,則產生中斷。
2.如權利要求1所述的方法,其中所述產生步驟包括從指令高速緩存發送信號到處理器中的中斷單元;以及響應在中斷單元接收到該信號,在中斷單元中處理中斷。
3.如權利要求2所述的方法,其中所述處理步驟包括執行與該中斷相關聯的代碼。
4.如權利要求3所述的方法,其中所述代碼記錄試圖訪問高速緩存中的指令的功能單元的高速緩存失敗。
5.如權利要求3所述的方法,其中所述代碼對特定類型的指令已被執行的次數和所述範圍已被訪問的次數進行計數。
6.如權利要求1所述的方法,其中指示符位於映像存儲器中。
7.如權利要求1所述的方法,其中在指令包中接收指令,並且其中指示符包括指令包內的欄位中的至少一個空閒位。
8.如權利要求1所述的方法,其中指示符位於指令內的欄位中。
9.如權利要求1所述的方法,其中特定類型的指令為轉移指令。
10.如權利要求1所述的方法,其中所述指令範圍覆蓋子例程、庫函數或軟體模塊之一。
11.一種用於處理指令的數據處理系統,該數據處理系統包括判定裝置,用於響應處理器的指令高速緩存中接收到要執行的指令,判定指示符是否與該指令相關聯以及該指令是否為指令範圍內的特定類型;以及產生裝置,用於在指示符與該指令相關聯並且該指令為該指令範圍內的特定類型的情況下,產生中斷。
12.如權利要求11所述的數據處理系統,其中所述產生裝置包括發送裝置,用於從指令高速緩存發送信號到處理器中的中斷單元;以及處理裝置,用於響應在中斷單元接收到該信號,而在中斷單元中處理中斷。
13.如權利要求12所述的數據處理系統,其中所述處理裝置包括執行裝置,用於執行與該中斷相關聯的代碼。
14.如權利要求13所述的數據處理系統,其中所述代碼記錄試圖訪問高速緩存中的指令的功能單元的高速緩存失敗。
15.如權利要求13所述的數據處理系統,其中所述代碼對特定類型的指令已被執行的次數和所述範圍已被訪問的次數進行計數。
16.如權利要求11所述的數據處理系統,其中指示符位於映像存儲器中。
17.一種計算機可讀介質中的電腦程式產品,用於處理指令,該電腦程式產品包括第一指令,用於響應處理器的指令高速緩存中接收到要執行的指令,判定指示符是否與該指令相關聯以及該指令是否為指令範圍內的特定類型;以及第二指令,用於在指示符與該指令相關聯並且該指令為該指令範圍內的特定類型的情況下,產生中斷。
18.如權利要求17所述的電腦程式產品,其中所述第二指令包括第一子指令,用於從指令高速緩存發送信號到處理器中的中斷單元;以及第二子指令,用於響應在中斷單元接收到該信號,而在中斷單元中處理中斷。
19.如權利要求18所述的電腦程式產品,其中所述第四指令包括用於執行與該中斷相關聯的代碼的子指令。
20.如權利要求19所述的電腦程式產品,其中所述代碼記錄試圖訪問高速緩存中的指令的功能單元的高速緩存失敗。
21.如權利要求19所述的電腦程式產品,其中所述代碼對特定類型的指令已被執行的次數和所述範圍已被訪問的次數進行計數。
22.如權利要求17所述的電腦程式產品,其中指示符位於映像存儲器中。
全文摘要
一種用於處理指令的方法、設備和計算機指令。響應數據處理系統的處理器內的指令高速緩存中接收到要執行的指令,判定指示符是否與該指令相關聯以及該指令是否為指令範圍內的特定類型。如果指示符與該指令相關聯並且該指令為該指令範圍內的特定類型,則產生中斷。
文檔編號G06F9/318GK1614570SQ20041008267
公開日2005年5月11日 申請日期2004年9月27日 優先權日2003年11月6日
發明者小吉米·E·德威特, 弗蘭克·E·萊文, 克里斯多福·M·理查森, 羅伯特·J·厄克特 申請人:國際商業機器公司

同类文章

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

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有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-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀