專利名稱:獲取對象級訪存行為的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及程序分析和優(yōu)化,尤其涉及獲取訪存行為的方法。
背景技術(shù):
在進(jìn)行程序行為分析、程序調(diào)試和性能調(diào)優(yōu)時,對象(或變量)級訪存行為分析能夠幫助程序員深入理解程序的性能瓶頸,為程序訪存性能的優(yōu)化提供指導(dǎo),也是進(jìn)行存儲系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和優(yōu)化的基礎(chǔ)。目前獲取或分析對象級訪存行為的方式有模擬器,代碼插樁,性能計(jì)數(shù)器,以及硬件偵聽。模擬器通過靈活控制程序的運(yùn)行并在指定的地方添加代碼或模塊收集所需要的信息,但是模擬器的速度較慢,難以獲取程序完整執(zhí)行的訪存行為,而且模擬器的精度與真實(shí)機(jī)器存在差距。代碼插樁方式使用即時編譯技術(shù)在程序運(yùn)行過程當(dāng)中,重新編排原程序的代碼并在指定的插樁點(diǎn)位置插入收集信息的代碼。但是代碼插樁的擴(kuò)展性不好,無法用于大規(guī)模的應(yīng)用,而且會引入額外的訪存開銷及緩存(Cache)污染,對于細(xì)粒度的代碼插樁,性能開銷也比較大。性能計(jì)數(shù)器是現(xiàn)代處理器提供的用于統(tǒng)計(jì)程序執(zhí)行過程中的豐富的事件信息,可以高效地獲得系統(tǒng)的訪存行為特征。但是性能計(jì)數(shù)器只能獲取一些統(tǒng)計(jì)信息,而無法獲取應(yīng)用完整的訪存序列,無法對應(yīng)用訪存行為做更深入的分析。硬件偵聽工具一般插在總線上偵聽訪存命令,可以得到完整的訪存地址序列(Trace),而且不會帶來訪存干擾和運(yùn)行開銷。但是硬件偵聽方式只能獲取底層的物理地址,不能獲取高層事件信息,無法獲取對象級的訪存行為。
發(fā)明內(nèi)容
因此,本發(fā)明的目的在于解決純軟件方式獲取訪存行為存在的干擾和較大的性能開銷而硬件偵聽方式無法獲取高層語義信息的問題,通過軟硬件結(jié)合方式獲取對象級訪存行為,既能降低開銷又能提高精度。本發(fā)明的目的是通過以下技術(shù)方案實(shí)現(xiàn)的一方面,本發(fā)明提供了一種獲取對象級訪存行為的方法,包括步驟I)通過硬件偵聽的方式捕獲內(nèi)存總線上的所有訪存請求,獲取每個訪存請求中關(guān)于物理地址、讀/寫、到達(dá)時間的信息;步驟2)獲取進(jìn)程頁表信息并實(shí)時監(jiān)控和記錄內(nèi)核更新頁表的操作;步驟3)實(shí)時監(jiān)控進(jìn)程的動態(tài)分配和釋放內(nèi)存的操作,獲取對象的虛擬地址空間信息,所述對象的虛擬地址空間信息包括對象標(biāo)識、對象的起始虛擬地址和對象的大小;步驟4)基于所獲取的物理地址和到達(dá)時間信息、進(jìn)程頁表信息和對象的虛擬地址空間信息來獲得對象的訪存物理地址序列和訪存虛擬地址序列。上述方法中,步驟I)還可以包括將所獲取的物理地址和到達(dá)時間信息發(fā)送并保存到另一計(jì)算裝置的步驟。上述方法中,步驟2)可以包括以下步驟
在該方法開始時獲取初始的進(jìn)程頁表信息,所述進(jìn)程頁表信息包括進(jìn)程標(biāo)識、物理地址、虛擬地址;監(jiān)控內(nèi)核更新頁表的操作,記錄每次頁表更新操作的相關(guān)信息;在檢測到頁表更新操作的同時,將一個訪問特定保留物理地址空間的同步訪存請求發(fā)送到內(nèi)存總線上。上述方法中,在步驟2)可以通過修改操作系統(tǒng)中更新頁表操作的函數(shù)來記錄每次頁表更新操作的相關(guān)信息,該信息包括進(jìn)程標(biāo)識,物理地址,虛擬地址。上述方法中,所述特定保留物理地址空間僅允許所述同步訪存請求進(jìn)行訪問,而不允許操作系統(tǒng)對其進(jìn)行訪問。上述方法中,步驟3)可以通過重載用于分配內(nèi)存和釋放內(nèi)存的相關(guān)動態(tài)庫函數(shù)來將對象的標(biāo)識符、對象的起始地址和對象的大小的信息保存到文件中以獲取對象的虛擬地址空間信息。上述方法中,步驟3)還可以通過分析可執(zhí)行程序的符號表信息來獲得靜態(tài)分配對象及全局對象的虛擬地址空間信息。上述方法中,步驟4)可以包括以下步驟步驟(4-1)根據(jù)所獲取的進(jìn)程頁表信息重新構(gòu)造進(jìn)程頁表;步驟(4-2)依次對于每個物理地址,判斷該物理地址是否屬于為同步訪存請求保留的物理地址空間,如果是,則讀取所記錄的與該同步訪問請求相應(yīng)的頁表更新操作的相關(guān)信息來更新進(jìn)程頁表;否則查詢進(jìn)程頁表,得到該物理地址所對應(yīng)的虛擬地址和進(jìn)程號; 并匹配該虛擬地址落在哪個對象的虛擬地址空間;步驟(4-3)整合得到每個對象的訪存物理地址序列和訪存虛擬地址序列。又一個方面,本發(fā)明提供了一種獲取對象級訪存行為的裝置,該裝置包括硬件偵聽器,用于通過硬件偵聽的方式捕獲內(nèi)存總線上的所有訪存請求,獲取每個訪存請求中關(guān)于物理地址、讀/寫、到達(dá)時間的信息;內(nèi)核監(jiān)控器,用于獲取進(jìn)程頁表信息并實(shí)時監(jiān)控和記錄內(nèi)核更新頁表的操作;進(jìn)程監(jiān)控器,用于實(shí)時監(jiān)控進(jìn)程的動態(tài)分配和釋放內(nèi)存的操作,獲取對象的虛擬地址空間信息,所述對象的虛擬地址空間信息包括對象標(biāo)識、對象的起始虛擬地址和對象的大小;整合器,用于基于所獲取的物理地址和到達(dá)時間信息、進(jìn)程頁表信息和對象的虛擬地址空間信息來獲得對象的訪存物理地址序列和訪存虛擬地址序列。與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于使用硬件偵聽的方式獲取訪存請求中的物理地址,不會對程序的執(zhí)行造成干擾, 不會引入額外開銷。通過修改內(nèi)核,捕獲更新頁表的操作并將頁表信息導(dǎo)出來,能夠準(zhǔn)確地離線重構(gòu)進(jìn)程頁表。同時,在進(jìn)程執(zhí)行過程中采用重載動態(tài)庫的方式捕獲對象的內(nèi)存地址空間信息。通過整合上述信息得到了精確的對象級訪存行為,為程序調(diào)試和性能調(diào)優(yōu)提供豐富的訪存信息。
以下參照附圖對本發(fā)明實(shí)施例作進(jìn)一步說明,其中
圖I為根據(jù)本發(fā)明實(shí)施例的獲取對象級訪存行為的方法的流程示意圖。
具體實(shí)施例方式為了使本發(fā)明的目的,技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖通過具體實(shí)施例對本發(fā)明進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明, 并不用于限定本發(fā)明。在介紹本發(fā)明之前,首先對對象級訪存行為進(jìn)行簡單介紹。通常,通過對訪存行為的分析可以有助于進(jìn)行程序分析和優(yōu)化。例如,通過獲取進(jìn)程執(zhí)行過程中的所有訪存地址序列,可以分析進(jìn)程的訪存行為特征,比如是否連續(xù),或者為固定步長的訪存模式,或者為隨機(jī)的訪存,這可用于指導(dǎo)程序的訪存優(yōu)化。而獲取對象級訪存行為是指獲取進(jìn)程執(zhí)行過程中每個對象的所有訪存地址序列,即每個對象的訪存物理地址序列和訪存虛擬地址序列。通過獲取每個對象的地址空間,可以得到每個訪存請求是由哪個對象發(fā)出的,分析每個對象的訪存行為特征,這可用于更細(xì)粒度的程序優(yōu)化,如將不同訪存模式的對象放到不同的緩存(Cache)空間中,防止隨機(jī)訪存的對象干擾規(guī)律訪存的對象。在本發(fā)明的實(shí)施例中,通過捕獲并解析訪存請求來獲取對象級訪存行為。對于每個訪存請求主要獲取以下信息〈物理地址,讀/寫,到達(dá)時間,進(jìn)程標(biāo)識,虛擬地址,對象標(biāo)識 >,其中物理地址為本次訪存請求訪問的物理地址,讀/寫指示本次訪存是讀請求還是寫請求,到達(dá)時間為訪存請求達(dá)到內(nèi)存命令總線的時間,進(jìn)程標(biāo)識為發(fā)送本次訪存請求的進(jìn)程標(biāo)識(Pid),虛擬地址為本次訪存請求在對應(yīng)進(jìn)程虛擬地址空間中的虛地址,對象標(biāo)識為發(fā)送本次訪存請求的對象標(biāo)識。在下文中也可以將這些信息統(tǒng)稱為訪存信息。在本發(fā)明的一個實(shí)施例中,提出了一種采用軟硬件結(jié)合的方式來獲取對象級訪存行為的方法。該方法在硬件方面通過硬件偵聽器獲取包括操作系統(tǒng),所有進(jìn)程,以及所有其他發(fā)送到內(nèi)存命令總線上的訪存請求。通過這種硬件偵聽方式可以得到每個訪存請求中的關(guān)于物理地址,讀/寫,到達(dá)時間的信息。同時該方法在軟件方面,通過獲取進(jìn)程頁表信息并在內(nèi)核中監(jiān)測對所有進(jìn)程的頁表更新操作;并且在進(jìn)程執(zhí)行過程中,監(jiān)測每個對象的動態(tài)分配/釋放內(nèi)存操作,獲取每個對象的虛擬地址空間信息(例如,每個對象起始地址和大小信息)。然后,離線整合上述所獲取信息來獲得對象級的訪存行為。例如,可以通過根據(jù)進(jìn)程頁表信息重構(gòu)指定進(jìn)程的頁表,使用每個訪存請求中的物理地址查詢重構(gòu)的進(jìn)程頁表,獲取該訪存請求中的關(guān)于進(jìn)程標(biāo)識和虛擬地址的信息;再判斷所獲得的虛擬地址屬于哪個對象的虛擬地址空間,這樣得到訪存請求中的關(guān)于對象標(biāo)識的信息。從而通過該方法可以得到在進(jìn)程執(zhí)行過程中每個對象的訪存地址序列,即每個對象的訪存物理地址序列和訪存虛擬地址序列。圖I給出了根據(jù)本發(fā)明實(shí)施例的獲取對象級訪存行為的方法的流程示意圖。如圖 I所示,該方法主要包括以下步驟步驟I),通過硬件偵聽的方式捕獲所有訪存請求,獲取每個訪存請求中關(guān)于物理地址、讀/寫、到達(dá)時間的信息(10)。在一個實(shí)施例中,可以通過將硬件偵聽器直接插在被監(jiān)測計(jì)算機(jī)主板上的內(nèi)存雙列直插內(nèi)存模塊(DIMM)插槽上,通過監(jiān)測內(nèi)存命令總線上接收到的所有訪存請求信號, 捕獲包括操作系統(tǒng)在內(nèi)的所有進(jìn)程的訪存請求。其中,硬件偵聽器例如可以是專利號為200510008612. 6的一種內(nèi)存監(jiān)測分析裝置。當(dāng)然也可以使用其他現(xiàn)有的硬件偵聽方法來獲得訪存請求中的關(guān)于物理地址、讀/寫,到達(dá)時間的信息。采用這種硬件偵聽方式由于直接偵聽內(nèi)存命令總線,因此可以檢測和捕獲包括CPU,IO外設(shè)等所有發(fā)送到內(nèi)存的請求。從而獲取包括操作系統(tǒng)在內(nèi)的所有進(jìn)程的訪存物理地址序列。而且不需要修改程序,不會對程序的執(zhí)行造成干擾,也不會引入額外開銷。還可以將所捕獲的訪存請求序列發(fā)送到另一臺接收機(jī)并保存到文件中以便離線分析,統(tǒng)計(jì)程序的訪存行為特征。但是硬件偵聽的方式不能區(qū)別訪存請求來自哪個進(jìn)程,也就是其不能獲取訪存請求中關(guān)于進(jìn)程標(biāo)識,虛擬地址,對象標(biāo)識的信息。為了能將來自操作系統(tǒng)及不同進(jìn)程的訪存請求區(qū)分開來,還需要獲取進(jìn)程的頁表信息,通過查詢頁表,就能夠得到每個訪存請求所在進(jìn)程的標(biāo)識(Pid),及訪存請求中的虛擬地址信息。之所以將所捕獲的訪存地址序列發(fā)送到另一臺接收機(jī)上進(jìn)行保存,是因?yàn)檫@樣保存地址序列的過程就不會干擾進(jìn)程的執(zhí)行。步驟2)獲取進(jìn)程頁表信息并實(shí)時監(jiān)控和記錄內(nèi)核更新頁表的操作(20)。進(jìn)程頁表信息包括進(jìn)程標(biāo)識(Pid),物理地址,虛擬地址等信息。在內(nèi)核中,每個進(jìn)程都維護(hù)一張頁表,用于從訪存虛擬地址查詢得到物理地址。首先要獲取初始的進(jìn)程頁表信息,也就是在開始執(zhí)行本申請的方法時,即在開始監(jiān)控時,獲取當(dāng)時內(nèi)核中所有進(jìn)程的頁
表信息。由于進(jìn)程的頁表是動態(tài)變化的,并且由內(nèi)核負(fù)責(zé)更新維護(hù)所有進(jìn)程的頁表信息。 每次頁表更新操作都需要陷入到內(nèi)核態(tài)進(jìn)行。所以需要在進(jìn)程的執(zhí)行過程中監(jiān)控所有對進(jìn)程頁表的更新操作,并記錄對進(jìn)程頁表的所有更新操作的相關(guān)信息,每個更新操作的相關(guān)信息包括對哪個頁表項(xiàng)進(jìn)行更新,屬于哪個進(jìn)程,更新后的物理地址,虛擬地址,以及記錄更新頁表的操作的發(fā)生時間。在一個實(shí)施例中,可以通過修改操作系統(tǒng)內(nèi)核中更新頁表操作的函數(shù),如native_ set_pte_at, native_pte_clear,將每次頁表更新操作中的進(jìn)程標(biāo)識,物理地址,虛擬地址記錄并保存在文件中,用于后續(xù)的離線分析。而且為了提高性能,可以不直接將所捕獲的頁表信息寫到文件中,而是先寫到內(nèi)存緩沖區(qū)(例如,頁表數(shù)據(jù)緩沖區(qū))中,等緩沖區(qū)滿后再一次性寫到文件中。另外,在后續(xù)的離線分析中,為了保證重新動態(tài)構(gòu)建的進(jìn)程頁表與硬件獲取的物理內(nèi)存地址序列在時間上保持同步,還需要記錄每次頁表更新操作發(fā)生的時間。在一個實(shí)施例中,提供了一種利用硬件時鐘進(jìn)行同步的方法。該方法通過硬件偵聽方式來獲取更新操作發(fā)生的時間。也就是在檢測到頁表更新操作的同時,將一個訪問特定保留物理地址空間的訪存請求發(fā)送到內(nèi)存總線上,硬件偵聽器可捕獲該訪存請求并獲得其中的物理地址和時間信息。這個特定的訪存請求也可以稱為同步訪存請求,其不經(jīng)過緩存,直接被發(fā)送到內(nèi)存總線。該同步訪存請求訪問的是特殊預(yù)留的空間,例如,預(yù)留一段很小的物理內(nèi)存空間, 比如4GB的物理內(nèi)存只需要保留64MB的空間,只占總空間的I. 56%,所以不會影響系統(tǒng)及其他程序的執(zhí)行。而且不允許操作系統(tǒng)直接訪問或使用這段預(yù)留的物理地址空間。在操作系統(tǒng)啟動后,將這段空間通過ioremap映射到內(nèi)核空間,并指定為不過緩存(Uncache),以僅用于同步訪存請求的訪問,而不受到其他訪問(比如操作系統(tǒng))的干擾,硬件偵聽器檢測到對這段保留空間的訪存就能識別出該訪存請求為同步訪存請求。也就是說,在硬件偵聽器所捕獲的訪存請求中,只要其中的物理地址屬于這段特殊預(yù)留的空間,就可以判斷出該訪存請求是同步訪存請求,其中的時間信息可以表示頁表更新操作發(fā)生的時間,也就是表示這時發(fā)生了頁表更新操作。在后續(xù)的離線分析中,判斷所獲取的物理地址序列中每個物理地址,如果該物理地址屬于所述特定保留物理地址空間,則讀取一次所記錄的頁表更新操作的相關(guān)信息更新重構(gòu)的進(jìn)程頁表;否則查詢進(jìn)程頁表得到該物理地址對應(yīng)的虛擬地址和進(jìn)程標(biāo)識。步驟3)實(shí)時監(jiān)控進(jìn)程的動態(tài)分配和釋放內(nèi)存的操作,獲取對象的虛擬地址空間信息(30)。對象的虛擬地址空間信息包括對象標(biāo)識符、對象的起始虛擬地址和大小。為了獲取對象的虛擬地址空間信息,可以在每次進(jìn)程分配動態(tài)空間時,將分配的每個對象的起始虛擬地址和大小以及對象標(biāo)識符都記錄下來。在一個實(shí)施例中,可以通過重載內(nèi)存的分配和釋放的相關(guān)動態(tài)庫函數(shù),例如,glibc庫中的malloc, calloc, realloc, free函數(shù),來獲取對象的虛擬地址空間信息。這是因?yàn)閯討B(tài)分配對象的地址空間是通過malloc,calloc, realloc函數(shù)實(shí)現(xiàn)的,調(diào)用這些函數(shù)時需要指定對象的大小,而這些函數(shù)返回對象的起始地址。這樣通過重載這些函數(shù),在每次動態(tài)分配對象的地址空間時,都將對象的起始地址和大小記錄下來并保存到文件中。可以通過設(shè)置Linux系統(tǒng)中的LD_PREL0AD環(huán)境變量在程序運(yùn)行之前將重載過的動態(tài)庫預(yù)先加載到進(jìn)程的地址空間,實(shí)現(xiàn)獲取對象的虛擬地址空間信息。這樣,不會影響其他程序的行為,除非程序在執(zhí)行之前強(qiáng)制優(yōu)先加載重載過的動態(tài)庫, 否則都將使用默認(rèn)的glibc庫。這種方式可以獲取運(yùn)行時動態(tài)分配的對象的虛擬地址空間信息。實(shí)際上較大的對象都是在運(yùn)行時為其動態(tài)分配空間的,而進(jìn)程的主要訪存行為都是由于訪問這些大對象引起的。但是,為了監(jiān)測對象虛擬地址空間的完整性,還可以通過分析可執(zhí)行程序的符號表信息來監(jiān)測靜態(tài)分配對象及全局對象的虛擬地址空間信息。步驟4)基于經(jīng)上述步驟獲得的信息(訪存物理地址序列、進(jìn)程頁面信息和對象的虛擬地址空間信息)來獲取對象級訪存行為。在一個實(shí)施例中,步驟4)可以包括以下步驟步驟(4-1)根據(jù)所獲取的初始的進(jìn)程頁表信息重新構(gòu)造進(jìn)程頁表(40)。步驟(4-2)對于每個物理地址,判斷該物理地址是否屬于為同步訪存請求保留的物理地址空間,如果是,則讀取所記錄的與該同步訪問請求相應(yīng)的頁表更新操作的相關(guān)信息來更新進(jìn)程頁表;否則查詢進(jìn)程頁表,得到該物理地址所對應(yīng)的虛擬地址和進(jìn)程號;并匹配該虛擬地址落在哪個對象的虛擬地址空間(50)。步驟(4-3)整合得到每個對象的訪存物理地址序列和訪存虛擬地址序列(60)。從而根據(jù)所獲得的對象級訪存行為,可以分析每個對象的訪存行為特征,進(jìn)行更細(xì)粒度的程序優(yōu)化,如將不同訪存模式的對象放到不同的緩存(Cache)空間中,防止隨機(jī)訪存的對象干擾規(guī)律訪存的對象等。對于沒有符號表和源碼的程序,通過上述方法仍然可以得到所有動態(tài)分配地址空間的對象(這是程序訪存的主要來源)的訪存序列,只是無法將導(dǎo)致訪問對象的訪存行為精確定位到源碼的位置,對于這種情況,可以通過分析不同代碼區(qū)段(比如,將每個函數(shù)看作一個源碼區(qū)段)的訪存特征(這可以通過反匯編,Pin等工具實(shí)現(xiàn)),然后與獲取的對象訪存行為特征進(jìn)行匹配,這樣就能大概定位出對象訪存行為所在源碼的區(qū)段位置,例如是由哪個函數(shù)發(fā)出來的訪存請求,定位到函數(shù)以后,還可以將函數(shù)代碼區(qū)段進(jìn)一步細(xì)分成基本塊代碼區(qū)段,從而定位出基本塊的代碼區(qū)段??梢?,本發(fā)明的方法使用硬件偵聽的方式獲取訪存請求中的物理地址,不會對程序的執(zhí)行造成干擾,不會引入額外開銷。通過修改內(nèi)核,捕獲更新頁表的操作并將頁表信息導(dǎo)出來,能夠準(zhǔn)確地離線重構(gòu)進(jìn)程頁表。同時,在進(jìn)程執(zhí)行過程中采用重載動態(tài)庫的方式捕獲對象的內(nèi)存地址空間信息。通過整合上述信息得到了精確的對象級訪存行為,為程序調(diào)試和性能調(diào)優(yōu)提供豐富的訪存信息。在本發(fā)明的又一個實(shí)施例中,還提供了一種獲取對象級訪存行為的裝置。該裝置包括硬件偵聽器、內(nèi)核監(jiān)控器、進(jìn)程監(jiān)控器和整合器。其中,硬件偵聽器用于通過硬件偵聽的方式捕獲內(nèi)存總線上的所有訪存請求,獲取每個訪存請求中關(guān)于物理地址、讀/寫、到達(dá)時間的信息。內(nèi)核監(jiān)控器,獲取進(jìn)程頁表信息并實(shí)時監(jiān)控和記錄內(nèi)核更新頁表的操作。進(jìn)程監(jiān)控器實(shí)時監(jiān)控進(jìn)程的動態(tài)分配和釋放內(nèi)存的操作,獲取對象的虛擬地址空間信息。所述對象的虛擬地址空間信息包括對象標(biāo)識、對象的起始虛擬地址和對象的大小。整合器基于所獲取的物理地址和到達(dá)時間信息、進(jìn)程頁表信息和對象的虛擬地址空間信息來獲得對象的訪存物理地址序列和訪存虛擬地址序列。雖然本發(fā)明已經(jīng)通過優(yōu)選實(shí)施例進(jìn)行了描述,然而本發(fā)明并非局限于這里所描述的實(shí)施例,在不脫離本發(fā)明范圍的情況下還包括所作出的各種改變以及變化。
權(quán)利要求
1.一種獲取對象級訪存行為的方法,所述方法包括步驟I)通過硬件偵聽的方式捕獲內(nèi)存總線上的所有訪存請求,獲取每個訪存請求中關(guān)于物理地址、讀/寫、到達(dá)時間的信息;步驟2)獲取進(jìn)程頁表信息并實(shí)時監(jiān)控和記錄內(nèi)核更新頁表的操作;步驟3)實(shí)時監(jiān)控進(jìn)程的動態(tài)分配和釋放內(nèi)存的操作,獲取對象的虛擬地址空間信息, 所述對象的虛擬地址空間信息包括對象標(biāo)識、對象的起始虛擬地址和對象的大??;步驟4)基于所獲取的物理地址和到達(dá)時間信息、進(jìn)程頁表信息和對象的虛擬地址空間信息來獲得對象的訪存物理地址序列和訪存虛擬地址序列。
2.根據(jù)權(quán)利要求I所述的方法,步驟I)還包括將所獲取的物理地址和到達(dá)時間信息發(fā)送并保存到另一計(jì)算裝置的步驟。
3.根據(jù)權(quán)利要求I或2所述的方法,步驟2)包括以下步驟在該方法開始時獲取初始的進(jìn)程頁表信息,所述進(jìn)程頁表信息包括進(jìn)程標(biāo)識、物理地址、虛擬地址;監(jiān)控內(nèi)核更新頁表的操作,記錄每次頁表更新操作的相關(guān)信息;在檢測到頁表更新操作的同時,將一個訪問特定保留物理地址空間的同步訪存請求發(fā)送到內(nèi)存總線上。
4.根據(jù)權(quán)利要求3所述的方法,在步驟2)通過修改操作系統(tǒng)中更新頁表操作的函數(shù)來記錄每次頁表更新操作的相關(guān)信息,該信息包括進(jìn)程標(biāo)識,物理地址,虛擬地址。
5.根據(jù)權(quán)利要求3所述的方法,其中,所述特定保留物理地址空間僅允許所述同步訪存請求進(jìn)行訪問,而不允許操作系統(tǒng)對其進(jìn)行訪問。
6.根據(jù)權(quán)利要求I所述的方法,步驟3)通過重載用于分配內(nèi)存和釋放內(nèi)存的相關(guān)動態(tài)庫函數(shù)來將對象的標(biāo)識符、對象的起始地址和對象的大小的信息保存到文件中以獲取對象的虛擬地址空間信息。
7.根據(jù)權(quán)利要求6所述的方法,步驟3)還包括通過分析可執(zhí)行程序的符號表信息來獲得靜態(tài)分配對象及全局對象的虛擬地址空間信息的步驟。
8.根據(jù)權(quán)利要求3所述的方法,步驟4)包括以下步驟步驟(4-1)根據(jù)所獲取的進(jìn)程頁表信息重新構(gòu)造進(jìn)程頁表;步驟(4-2)依次對于每個物理地址,判斷該物理地址是否屬于為同步訪存請求保留的物理地址空間,如果是,則讀取所記錄的與該同步訪問請求相應(yīng)的頁表更新操作的相關(guān)信息來更新進(jìn)程頁表;否則查詢進(jìn)程頁表,得到該物理地址所對應(yīng)的虛擬地址和進(jìn)程號;并匹配該虛擬地址落在哪個對象的虛擬地址空間;步驟(4-3)整合得到每個對象的訪存物理地址序列和訪存虛擬地址序列。
9.一種獲取對象級訪存行為的裝置,該裝置包括硬件偵聽器,用于通過硬件偵聽的方式捕獲內(nèi)存總線上的所有訪存請求,獲取每個訪存請求中關(guān)于物理地址、讀/寫、到達(dá)時間的信息;內(nèi)核監(jiān)控器,用于獲取進(jìn)程頁表信息并實(shí)時監(jiān)控和記錄內(nèi)核更新頁表的操作;進(jìn)程監(jiān)控器,用于實(shí)時監(jiān)控進(jìn)程的動態(tài)分配和釋放內(nèi)存的操作,獲取對象的虛擬地址空間信息,所述對象的虛擬地址空間信息包括對象標(biāo)識、對象的起始虛擬地址和對象的大整合器,用于基于所獲取的物理地址和到達(dá)時間信息、進(jìn)程頁表信息和對象的虛擬地址空間信息來獲得對象的訪存物理地址序列和訪存虛擬地址序列。
全文摘要
本發(fā)明提供一種軟硬件結(jié)合方式來獲取對象級訪存行為的方法。該方法通過硬件偵聽的方式獲取每個訪存請求中關(guān)于物理地址、讀/寫、到達(dá)時間的信息;獲取進(jìn)程頁表信息,實(shí)時監(jiān)控并記錄內(nèi)核更新頁表的操作;實(shí)時監(jiān)控進(jìn)程的動態(tài)分配和釋放內(nèi)存的操作,獲取對象的虛擬地址空間信息。并通過整合上述信息得到了精確的對象級訪存行為,為程序調(diào)試和性能調(diào)優(yōu)提供豐富的訪存信息。而且該方法不會對程序的執(zhí)行造成干擾,不會引入額外開銷。
文檔編號G06F13/16GK102609254SQ20121001796
公開日2012年7月25日 申請日期2012年1月19日 優(yōu)先權(quán)日2012年1月19日
發(fā)明者包云崗, 崔澤漢, 陳明宇, 陳荔城, 黃永兵 申請人:中國科學(xué)院計(jì)算技術(shù)研究所