專利名稱:軟件監測方法、裝置以及系統的制作方法
技術領域:
本發明涉及計算機技術領域,尤其涉及一種軟件監測方法、裝置以及系統。
背景技術:
在使用并行技術的軟件系統中,例如應用多線程技術以及多核處理技術等軟件系統,軟件系統中程序的串行部分成為整個系統性能的瓶頸因素,而串行部分主要體現在各種鎖程序所保護的臨界區,包括信號量,互斥鎖程序(Mutex),自旋鎖程序(Spinlock),開關中斷,讀寫鎖程序等等。如果能夠詳細、準確地統計串行部分中各種鎖程序的相關信息, 則可以為整個軟件系統的性能優化提供數據依據。在現有技術條件下常見的一種軟件監測方法是通過軟件自身會給鎖程序函數進行插樁替換的方式來統計軟件的鎖程序使用信息。一些軟件軟件監測工具如Valgrind Mutextrace等,普遍使用這種軟件插樁的軟件監測技術,其過程一般為先替換或增加被檢測目標軟件的某段指令(通常為函數的入口和返回)為檢測程序的指令;再強制執行檢測程序,以獲取鎖程序的相關信息。然而,這種軟件監測方式需要修改目標程序并強制執行監測程序,這樣在運行軟件系統的同時增加系統的運行負擔。對于較為大型的軟件系統來說,軟件系統具有數量龐大的臨界區和對應管理臨界區的鎖程序,而利用現有的插樁方式進行軟件分析的話,插樁的數量也是非常龐大的,這樣致使軟件系統通常會在高負荷的環境下進行測試和數據搜集,帶來較大的系統開銷,并嚴重干擾應用程序的正常運行,追蹤導致難以統計出完整而詳細的鎖程序使用信息。
發明內容
本發明實施例提供一種軟件監測方法、裝置以及系統,以解決分析過程中引入過大系統開銷而致使難以統計出完整而詳細的鎖程序使用信息的問題。本發明實施例提供一種軟件監測方法,所述方法在鎖程序被調用或釋放時記錄鎖程序地址以及使用所述鎖程序的線程標識;將所述鎖程序地址以及使用所述鎖程序的線程標識進行編碼轉化為內存地址,并通過所述內存地址訪問內存;偵聽內存總線以識別所述內存地址的訪問內存信號并獲取所述鎖程序的追蹤信息,所述鎖程序的追蹤信息包括所述內存地址以及時間信息;根據所述追蹤信息獲得所述鎖程序的使用信息,所述使用信息包括所述鎖程序地址、使用所述鎖程序的線程標識以及所述線程占用鎖程序的時間。本發明實施例提供一種軟件監測裝置,包括動態庫模塊、通信模塊、偵聽模塊以及數據分析模塊,其中所述動態庫模塊用于記錄鎖程序地址以及使用所述鎖程序的線程標識;所述通信模塊用于將所述鎖程序地址以及使用所述鎖程序的線程標識進行編碼轉化為內存地址并通過所述內存地址訪問內存;所述偵聽模塊用于偵聽內存總線以識別所述內存地址的訪問內存信號并獲取所述鎖程序的追蹤信息,所述鎖程序的追蹤信息包括所述內存地址以及時間信息;所述數據分析模塊用于根據所述追蹤信息獲得所述鎖程序的使用信息,所述使用信息包括所述鎖程序地址、使用所述鎖程序的線程標識以及所述線程占用鎖程序的時間。上述軟件監測方法、裝置以及系統只有鎖程序地址以及線程標識的記錄和編碼轉化地址通過軟件部分實現,而偵聽、存儲以及分析方面均可以利用旁路硬件來實現,例如, 通過在內存接口或插槽上插卡來實現對內存總線的偵聽、存儲以及分析,而旁路硬件無需對目標程序做任何修改,不占用系統的處理資源,也不影響應用程序的運行環境,從而通過這樣軟硬結合的方式可以在不帶來額外的系統開銷的情況下,實現對應系統性能的分析。
圖1所示為本發明一實施例中軟件監測方法的流程示意圖。圖2所示為本發明一實施例中軟件監測方法的一部分流程示意圖。圖3所示為本發明一實施例中軟件監測方法的另一部分流程示意圖。圖4所示為本發明另一實施例中軟件監測裝置的示意圖。
具體實施例方式下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域技術人員所獲得的所有其他實施例,都屬于本發明保護的范圍。本發明一實施例提供一種軟件監測方法,主要對系統串行部分的相關信息進行分析,所述分析方法采用非插樁式分析,不對目標程序做任何修改,也不依賴于具體的軟件或硬件平臺,在分析運行過程中不引入額外的開銷,從而可以充分記錄分析所需的信息。如圖1所示,本發明實施例提供一種軟件監測方法,包括步驟101、記錄鎖程序地址以及線程標識,所述線程標識用于標識使用所述鎖程序的線程;步驟102、根據所述鎖程序地址以及使用所述鎖程序線程標識獲得內存地址,并通過所述內存地址訪問內存;步驟103、偵聽內存總線以識別所述訪問內存的信號并根據所述信號獲取所述鎖程序的追蹤信息,所述鎖程序的追蹤信息包括所述內存地址以及訪問時間信息;步驟104、根據所述追蹤信息獲得所述鎖程序的使用信息,所述使用信息包括所述鎖程序地址、使用所述鎖程序的線程標識以及所述線程占用鎖程序的時間,所述占用鎖程序的時間根據所述訪問時間信息確定。上述步驟101中,所述記錄鎖程序地址以及線程標識是在重載與所述鎖程序相關的函數的過程中進行。通過動態插樁的方式或在程序運行前通過加載自定義的動態連接庫的方式,將與鎖程序相關的函數進行重載,在重載函數中獲取并記錄鎖程序地址以及線程 t示i只,所: ! 可以為 mutex 白勺 pthread_mutex_init>pthread_mutex_lock>pthread_ mutex_unlock> pthread_mutex_trylock 以及 pthread—mutex—destroy 等函數。上述步驟102中,由于Cache (高速緩沖存儲器)的作用,多線程程序中對鎖程序的訪問可能不需要訪問內存而直接被在Cache中命中,而通過對內存總線的偵聽而在內存總線上監控訪問內存操作,沒有辦法捕獲到不訪問內存的鎖程序變量,而在本實施例的軟硬件協同檢測機制中,根據鎖程序的地址以及使用所述鎖程序的線程標識獲得一個內存地址,所述獲取的內存地址的方式可以是映射或者根據自定編碼規則進行編碼轉換,而所述內存地址被設置為不可緩存,這樣通過所述內存地址的訪問內存均都能被總線偵聽模塊捕獲到。當鎖程序被調用或釋放時,便觸發動態庫模塊記錄鎖程序的地址以及占用的線程標識,再由通信模塊將所述鎖程序地址以及占用鎖程序的線程標識轉化為內存地址,以在所述鎖程序被調用的時候通過所述內存地址進行訪問內存,所述內存地址為內存上的物理地址。其中,將所述鎖程序地址以及使用所述鎖程序的線程標識通過編碼轉化為內存地址也是主要映射表來實現的,其中具體的編碼如下
ReservedThread IDLock AddrLock FlagReserved其中字段表示的含義為Thread ID 線程標識在線程映射表中的偏移;Lock Addr 鎖程序地址在鎖程序地址映射表中的偏移;Lock Flag 加鎖程序或解鎖程序的標志;Reservedl 保留域,指向預留物理內存區域的首地址;Reserved2 保留域,內存控制器將物理內存地址的低3位屏蔽。如圖2所述上述步驟103中,偵聽內存總線并獲取所述內存總線中訪問地址為所述內存地址的訪問信息的步驟進一步包括步驟201、預留物理地址空間,以將對所述鎖程序地址以及使用所述鎖程序的線程標識編碼轉化的內存地址的訪問內存映射為對所述物理地址空間的訪問內存;步驟202、偵聽所述內存總線中的訪問地址并判斷所述訪問地址是否映射在所述物理地址空間內;步驟203、根據判斷結果,將映射在所述物理地址空間內的訪問內存地址以及時間信息封裝成追蹤信息;步驟204、傳輸所述追蹤信息。上述步驟201中,由被檢測主機預留所述物理地址空間,用于作為在偵聽過程中所述內存地址的訪問內存信號捕獲的映射空間,所述物理地址空間由若干段段物理地址組成,在本實施例中所述物理地址空間為兩段段物理地址。上述步驟202和203中,通過映射表識別出內存總線中訪問地址為所述鎖程序地址以及使用所述鎖程序的線程標識編碼轉化的內存地址,也就是對所述編碼轉化的內存地址的訪問內存映射為對所述物理地址空間的訪問內存,具體過程是,如果所述訪問內存地址通過映射表的映射在所述所述物理地址空間內,則所述訪問內存地址為所述編碼轉化的內存地址,則捕獲所述訪問內存地址并記錄時間信息進行封裝。所述線程的ID以及鎖程序編碼轉化的內存地址。上述識別所述鎖程序地址以及使用所述鎖程序的線程標識編碼轉化的內存地址的步驟在其它實施例中也可以通過注冊表來實現,所述注冊表儲存有所有所述鎖程序地址以及使用所述鎖程序的線程標識編碼轉化的內存地址,通過逐一遍歷比對來識別當前訪問內存地址是否為由所述鎖程序相關信息編碼轉換的地址。所述映射在所述物理地址空間內的訪問內存地址為鎖程序地址以及使用所述鎖程序的線程標識的編碼結果,因此所述映射在所述物理地址空間內的訪問內存地址可以反解碼為鎖程序地址以及線程標識。所述追蹤信息還包括序列號(SN)與讀寫信息(RW),所述時間信息為時間戳(TS),所述追蹤信息可采用如下格式
權利要求
1.一種軟件監測方法,其特征在于,所述方法包括記錄鎖程序地址以及線程標識,所述線程標識用于標識使用所述鎖程序的線程; 根據所述鎖程序地址以及所述線程標識獲得內存地址,并通過所述內存地址訪問內存;偵聽內存總線以識別所述訪問內存的信號并根據所述信號獲取所述鎖程序的追蹤信息,所述鎖程序的追蹤信息包括所述內存地址以及訪問時間信息;根據所述追蹤信息獲得所述鎖程序的使用信息,所述使用信息包括所述鎖程序地址、 使用所述鎖程序的線程標識以及所述線程占用鎖程序的時間,所述占用鎖程序的時間根據所述訪問時間信息確定。
2.根據權利要求1所述的方法,其特征在于,所述偵聽內存總線以識別所述內存地址的訪問內存信號并獲取所述鎖程序的追蹤信息的步驟中,通過映射表識別出內存總線中訪問地址為所述鎖程序地址以及使用所述鎖程序的線程標識所轉化的內存地址的訪問內存信號。
3.根據權利要求2所述的方法,其特征在于,所述偵聽內存總線以識別所述內存地址的訪問內存信號并獲取所述鎖程序的追蹤信息包括預留物理地址空間,通過所述映射表建立所述鎖程序地址以及使用所述鎖程序的線程標識編碼轉化的內存地址與所述物理地址空間之間的映射關系;偵聽所述內存總線中的訪問地址并判斷所述訪問地址是否映射在所述物理地址空間內;根據判斷結果,將映射在所述物理地址空間內的訪問內存地址以及時間信息封裝成追 fe^fn 息;傳輸所述追蹤信息。
4.根據權利要求3項所述的方法,其特征在于,所述物理地址空間為兩段段物理地址, 所述鎖程序以及使用所述鎖程序的線程標識編碼轉化的內存地址通過映射表映射為所述兩段段物理地址區間內的物理地址。
5.根據權利要求3所述的方法,其特征在于,在所述根據所述追蹤信息獲得所述鎖程序的使用信息的步驟之前還包括接收并存儲所述追蹤信息,以供離線分析。
6.根據權利要求1所述的方法,其特征在于,根據所述鎖程序地址以及所述線程標識獲得內存地址包括將所述鎖程序地址以及所述線程標識編碼轉化或者映射為內存地址。
7.根據權利要求1至6任一項所述的方法,其特征在于,所述追蹤信息中的時間信息包括調用和釋放鎖程序的時間戳。
8.根據權利要求7所述的方法,其特征在于,所述調用和釋放鎖程序的時間戳是通過時鐘記錄偵聽到所述鎖程序因被調用或釋放而被編碼轉化為內存地址并訪問內存的時間。
9.根據權利要求7所述的方法,其特征在于,所述追蹤信息還包括 序列號,用于在分析的時候檢測有沒有丟失;讀寫信息,用于標識此次訪問內存是讀或者寫。
10.根據權利要求9所述的方法,其特征在于,所述追蹤信息主要由所述鎖程序以及使用所述鎖程序的線程標識編碼轉化的內存地址、所述時間信息、序列號以及讀寫信息封裝而成。
11.根據權利要求1至6任一項所述的方法,其特征在于,所述記錄鎖程序地址以及線程標識包括通過所述鎖程序被調用時重載與鎖程序相關的函數中記錄所述鎖程序地址以及使用所述鎖程序的線程標識。
12.根據權利要求11所述的方法,其特征在于,所述與所述鎖程序相關的函數通過動態插樁的方式或者在程序運行前加載自定義的動態連接庫的方式進行重載。
13.根據權利要求1至6任一項所述的方法,其特征在于,所述根據所述追蹤信息獲得所述鎖程序的使用信息包括根據所述追蹤信息獲得所述內存地址以及所述鎖程序的時間信息;將所述內存地址反解碼為鎖程序地址以及使用所述鎖程序的線程標識,獲得所述鎖程序地址、使用所述鎖程序的線程標識以及所述線程占用鎖程序的時間信息。
14.一種軟件監測裝置,其特征在于,所述裝置包括動態庫模塊,記錄鎖程序地址以及線程標識,所述線程標識用于標識使用所述鎖程序的線程;通信模塊,根據所述鎖程序地址以及所述線程標識獲得內存地址,并通過所述內存地址訪問內存;偵聽模塊,偵聽內存總線以識別所述訪問內存的信號并根據所述信號獲取所述鎖程序的追蹤信息,所述鎖程序的追蹤信息包括所述內存地址以及訪問時間信息;數據分析模塊,根據所述追蹤信息獲得所述鎖程序的使用信息,所述使用信息包括所述鎖程序地址、使用所述鎖程序的線程標識以及所述線程占用鎖程序的時間,所述占用鎖程序的時間根據所述訪問時間信息確定。
15.根據權利要求14所述的裝置,其特征在于,所述偵聽模塊包括一映射表,通過所述映射表識別出內存總線中訪問地址為所述鎖程序地址以及使用所述鎖程序的線程標識所轉化的內存地址。
16.根據權利要求15所述的裝置,其特征在于,所述偵聽模塊在偵聽內存總線以識別所述內存地址的訪問內存信號并獲取所述鎖程序的追蹤信息的過程中包括先由被監測主機預留物理地址空間,以通過所述映射表將所述鎖程序地址以及使用所述鎖程序的線程標識編碼轉化的內存地址映射到所述物理地址空間內;再通過偵聽來識別內存總線中映射在所述物理地址空間內的訪問地址,并將所述訪問地址以及時間信息封裝成追蹤信息;最后向數據分析模塊發送所述追蹤信息。
17.根據權利要求16所述的裝置,其特征在于,所述物理地址空間為兩段段物理地址, 所述線程的ID以及鎖程序編碼轉化的內存地址通過映射表映射為所述兩段段物理地址區間內的物理地址。
18.根據權利要求14所述的裝置,其特征在于,還包括一數據存儲模塊,用于接受并存儲所述偵聽模塊產生的所述追蹤信息。
19.根據權利要求14至18任一項所述的裝置,其特征在于,所述追蹤信息中的時間信息包括調用和釋放鎖程序的時間戳。
20.根據權利要求19所述的裝置,其特征在于,所述偵聽模塊還包括一時鐘,以通過時鐘校準記錄捕獲所述鎖程序因被調用或釋放時被編碼轉化為內存地址進行訪問內存而產生訪問內存信號的時間,從而獲得所述鎖程序被調用或釋放的時間戳。
21.根據權利要求14至18任一項所述的裝置,其特征在于,所述動態庫模塊通過所述鎖程序被調用時重載與鎖程序相關的函數中記錄所述鎖程序地址以及使用所述鎖程序的線程標識。
22.根據權利要求20所述的裝置,其特征在于,所述與所述鎖程序相關的函數通過動態插樁的方式或在程序運行前加載自定義的動態連接庫的方式進行重載。
23.根據權利要求14至18任一項所述的裝置,其特征在于,所述數據分析模塊根據所述追蹤信息獲得所述內存地址以及所述鎖程序的時間信息,再將所述內存地址反解碼為鎖程序地址以及使用所述鎖程序的線程標識,從而獲得所述鎖程序地址、使用所述鎖程序的線程標識以及所述線程占用鎖程序的時間信息。
24.一種軟件監測系統,包括一軟件檢測裝置以及軟件執行主體,所述軟件執行主體用于執行一軟件程序,其特征在于,所述軟件檢測裝置用于記錄所述軟件程序的鎖程序地址以及線程標識,所述線程標識用于標識使用所述鎖程序的線程;根據所述鎖程序地址以及所述線程標識獲得內存地址,并通過所述內存地址訪問內存;偵聽內存總線以識別所述訪問內存的信號并根據所述信號獲取所述鎖程序的追蹤信息,所述鎖程序的追蹤信息包括所述內存地址以及訪問時間信息;根據所述追蹤信息獲得所述鎖程序的使用信息,所述使用信息包括所述鎖程序地址、使用所述鎖程序的線程標識以及所述線程占用鎖程序的時間, 所述占用鎖程序的時間根據所述訪問時間信息確定。
全文摘要
一種軟件監測方法、裝置以及系統,在鎖程序被調用或釋放時記錄鎖程序地址以及線程標識,所述線程標識用于標識使用所述鎖程序的線程;根據所述鎖程序地址以及所述線程標識獲得內存地址,并通過所述內存地址訪問內存;偵聽內存總線以識別所述訪問內存的信號并根據所述信號獲取所述鎖程序的追蹤信息,所述鎖程序的追蹤信息包括所述內存地址以及訪問時間信息;根據所述追蹤信息獲得所述鎖程序的使用信息,所述使用信息包括所述鎖程序地址、使用所述鎖程序的線程標識以及所述線程占用鎖程序的時間,所述占用鎖程序的時間根據所述訪問時間信息確定。
文檔編號G06F11/36GK102301343SQ201180001455
公開日2011年12月28日 申請日期2011年6月14日 優先權日2011年6月14日
發明者余加強, 崔澤漢, 張文力, 王超, 陳明宇, 黃永兵 申請人:華為技術有限公司