TWI521438B - 於多執行緒應用程式中偵測潛在存取錯誤之技術 - Google Patents
於多執行緒應用程式中偵測潛在存取錯誤之技術 Download PDFInfo
- Publication number
- TWI521438B TWI521438B TW100147973A TW100147973A TWI521438B TW I521438 B TWI521438 B TW I521438B TW 100147973 A TW100147973 A TW 100147973A TW 100147973 A TW100147973 A TW 100147973A TW I521438 B TWI521438 B TW I521438B
- Authority
- TW
- Taiwan
- Prior art keywords
- thread
- vector clock
- access
- memory
- clock
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3632—Software debugging of specific synchronisation aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Description
本發明係有關於於多執行緒應用程式中偵測潛在存取錯誤之技術。
隨著電腦技術的進展,愈來愈多系統被體現為可能包括多於一個處理器的多處理器系統或包括多個核心之單一處理器。為了利用此等優點,軟體開發師寫成所謂的多執行緒應用程式。於此等多執行緒應用程式中,產生多個個別執行緒,用來獨立地執行工作單元而利用現代電腦系統的多處理器本質。
雖然如此改良效能且更完整地利用多處理器系統中的可用資源,但因多個執行緒間的衝突可能引致困難。舉例言之,不同的執行緒可能尋求存取相同記憶體元件。或在一個記憶體元件藉另一執行緒初始化之前(或在另一執行緒已經解除該記憶體元件之配置之後),一個執行緒可能尋求使用該記憶體元件。程式也可能有潛在衝突,衝突的是否發生係取決於不同執行緒的特定排程。如此,依據該應用程式的某個排程可能發生衝突,而另一排程則否。由於此種不確定性,可資利用的代碼檢測工具通常無法決定潛在記憶體存取錯誤的存在。
依據本發明之一實施例,係特地提出一種方法包含針對在一處理系統上執行的一多執行緒應用程式之多個執行緒,於該處理系統之一第一儲存裝置中維持一執行緒向量時鐘;針對該多執行緒應用程式之多個同步物件,於該處理系統之一第二儲存裝置中維持一同步向量時鐘;針對在該多執行緒程式執行期間,產生一存取日誌;及至少部分基於一第一執行緒之一執行緒向量時鐘及與一第一記憶體元件相聯結的一存取日誌,於該處理系統中,針對該多執行緒應用程式之一不同排程,決定藉該多執行緒程式之該第一執行緒存取該第一記憶體元件是否為一潛在無效存取。
第1圖為依據本發明之一實施例於多執行緒代碼分析工具中執行的多項操作之高階視圖之流程圖。
第2圖為流程圖顯示依據本發明之一實施例代碼分析操作之進一步細節。
第3至7圖為流程圖顯示依據本發明之一實施例分析多執行緒應用程式中可執行的特定操作。
第8圖為依據本發明之一實施例儲存單元之方塊圖。
第9圖為依據本發明之一實施例系統之方塊圖。
於多個實施例中,潛在記憶體存取錯誤包括於多執行緒程式中之未經初始化的記憶體存取錯誤及無效記憶體存取錯誤可經檢測,即便此等潛在錯誤本身並不表現在程式的追蹤執行亦復如此。實施例可監視多執行緒程式的給定回合的執行(追蹤執行)及分析程式的某些關注事件。於一個實施例中,可監視與分析的程式事件包括執行緒產生、執行緒存在、同步化、記憶體配置及解除配置(例如成堆、成堆疊、或靜態)、記憶體負擔及儲存裝置。當然於其它實施例中,也可監視額外事件諸如函式呼叫驅動器及回送。
考慮在多執行緒應用程式中為可能的下表1中之代碼實例。
於此代碼中,存在有兩個執行緒亦即work1及work2,二者係藉主執行緒產生。主執行緒配置一個記憶體元件,第一執行緒係寫至該記憶體元件,而第二執行緒係讀取自該記憶體元件(及隨後主執行緒解除該記憶體元件之配置)。於本實例中有兩個潛在記憶體存取錯誤:無效存取及未經初始化讀取。但如依據藉作業系統(OS)排程器的給定程式回合執行,取決於下列事件的交插,錯誤可能或可能不會實際上發生。
本實例程式執行通常包括下列操作:
work1: p[0]=0;
work2: return p[0];
main: free(p).
如此此等事件初始化一記憶體元件(透過第一執行緒work1),讀取存取該記憶體元件(透過第二執行緒work2),及釋出該記憶體元件(透過主執行緒)。
有六個可能的排序或交插,亦即S1至S6:
S1: work1: p[0]=0;work2: return p[0];main: free(p);
S2: work2: return p[0];work1: p[0]=0;main: free(p);
S3: work1: p[0]=0;main: free(p);work2: return p[0];
S4: main: free(p);work1: p[0]=0;work2: return p[0];
S5: work2: return p[0];main: free(p);work1: p[0]=0;
S6: main: free(p);work2: return p[0];work1: p[0]=0;
各個排序中的實際錯誤是:
S1:未出現實際錯誤;
S2:未經初始化讀取。work2係在work1初始化之前讀取p[0];
S3:無效存取。work2係在p[0]釋出後讀取p[0];
S4:無效存取。work1寫入p[0],而work2係在p[0]釋出後讀取p[0];
S5:未經初始化讀取及無效存取。work2係在初始化之前讀取p[0],及work1係在p[0]釋出後寫入p[0];
S6:無效存取及未經初始化讀取。work2讀取p[0]及work1寫入p[0]係在p[0]釋出後,而work2係在初始化之前讀取p[0]。
依據本發明之一實施例,即便在程式回合未實際上發生錯誤(但未來回合可能發生)時,分析工具可檢測記憶體存取錯誤。因此,此種工具可檢測潛在未經初始化記憶體讀取及無效存取,即便於本實例中執行緒係依據排序S1交叉亦復如此。換言之,記憶體存取錯誤乃實際的或潛在的係取決於執行緒排程。一個特定回合的潛在錯誤可能是不同回合的實際錯誤,反之亦然。
針對接受分析程式之各個執行緒,依據本發明之一實施例,,分析工具可提供獨一無二的識別符及向量時鐘。執行緒識別符可以是非負數。舉例言之,數字0可用來識別初始執行緒,數字1可用來識別下個初始化執行緒等。執行緒向量時鐘(TVC)乃配置給具有多個元件之一給定執行緒的向量。更明確言之,各個元件可以是具有數值相對應於邏輯時間戳記的整數,於該處向量中的各個元件係相對應於在接受分析程式中所產生的一個執行緒。如此於執行緒向量時鐘內的元件總數係相當於程式內曾經產生的執行緒總數。標示法TVCj=[0,1,0,...]可用於此處來標示執行緒j的向量時鐘,其中0係用於執行緒0,1係用於執行緒1,及0係用於執行緒2,等。標示法TVCj係用來標示執行緒j的向量時鐘內用於執行緒i的元件。於一個實施例中,各個元件可儲存相對應於執行緒的邏輯時間戳記之相對應值,於該處各值可因程式執行結果而獨立地更新,容後詳述。注意一給定執行緒向量時鐘的邏輯時間戳記可能不會準確地反映出任何其它執行緒的時間戳記。換言之,容後詳述,唯有當相對應執行緒係涉及同步操作時,更新資訊才發送至TVC。如同,相對於各個執行緒(存在於相對應執行緒的向量時鐘)之目前邏輯時間戳記,TVC可維持於非同調狀態,反映出執行緒部分知曉其它執行緒的事件順序。
除了各個記憶體存取外,接受分析程式也可產生同步物件(例如臨界區段、互斥機構(mutexes)諸如給定閂鎖類型等)來使得執行緒彼此同步化。類似前文針對執行緒描述的識別符及向量時鐘,實施例可更進一步提供針對各個同步物件獨一無二的識別符及同步向量時鐘(SVC)。如此,SVC同樣地包括針對該程式之各個執行緒之一元件,及如此於同步向量時鐘內的元件總數係相當於執行緒總數,各個元件再度可以是執行緒的邏輯時間戳記,於該處各個元件值可因程式執行結果而獨立地更新,容後詳述。標示法(SVC)m=[0,1,0,...]可用於此處來標示同步物件m的向量時鐘,其中0係用於執行緒0,1係用於執行緒1,及0係用於執行緒2,等。標示法(SVC)m[n]係用來標示同步物件m的向量時鐘內的執行緒n之元件。
注意於各個實施例中,可有兩個不同同步情況可使用分析工具追蹤:張貼同步及接受同步。舉例言之,釋出mutex乃張貼同步,而獲得mutex乃接受同步。容後詳述,同步物件之向量時鐘係用來將邏輯時間戳記從執行張貼同步的執行緒傳播至在相同同步物件上執行接受同步的另一個執行緒。
至於記憶體存取,針對程式中在位置或位走x的任何記憶體元件,於任何時間記憶體元件可以在三態中之一者:無效、未經初始化、或經初始化。一個記憶體位置之初始態為無效,然後在配置時為未經初始化,及其次在初次寫入時為經初始化,及最後當釋出時,該位置可回到無效態。可提供資料結構來儲存各個記憶體元件之狀態。於程式之執行期間,狀態係經更新及維持。
為了決定潛在(及實際)錯誤,實施例可針對用在程式的各個記憶體元件x維持初始化日誌及存取日誌。當記憶體位置x經初始化時,可產生初始化日誌,包括初始化執行緒之識別符及初始化之邏輯時間(藉由參考儲存於初始化執行緒的向量時鐘之該元件相對應於初始化時的初始化執行緒之值)。於一個實施例中,可存在有單一初始化日誌,各個記憶體元件有一個分開分錄。或於其它實施例中,各個記憶體元件可有其本身的初始化日誌。
於程式執行(包括於其初始化)期間,當存取x時存取日誌可經更新,包括存取執行緒之識別符及存取之邏輯時間(藉由參考儲存於存取執行緒的向量時鐘之該元件相對應於存取時的存取執行緒之值)。於一個實施例中,可存在有單一存取日誌,各個記憶體元件有一個分開分錄。或於其它實施例中,各個記憶體元件可有其本身的存取日誌。
現在參考第1圖,顯示依據本發明之一實施例於多執行緒代碼分析工具中執行各項操作之高階視圖之流程圖。如第1圖所示,方法100可於多執行緒應用程式在系統單一執行期間進行。於此單一執行期間,工具可決定程式之執行排程(如藉OS排程器決定)的實際存取違反,以及該程式之不同排程的潛在存取違反。
如於第1圖可知,方法100可包括針對該應用程式之各個執行緒維持一執行緒向量時鐘(方塊110)。此外,針對該應用程式之各個同步物件維持一同步向量時鐘(方塊120)。此外針對該應用程式執行期間的任何接觸記憶體,可產生一初始化日誌及一存取日誌(方塊130)。又,於執行期間當存取記憶體元件時可更新存取日誌。注意雖然於第1圖之實施例顯示此一特定操作順序,但須瞭解本發明之範圍並非囿限於此一方面。此外,瞭解於不同實施例中,可能出現維持此等執行緒及同步向量時鐘以及產生與更新存取日誌及初始化日誌的多種方式。如此描述之此等操作可能出現於遍及多執行緒程式之執行期間。此外,不同時鐘的維持可包括各項操作,諸如時鐘傳播、比較、更新等,全部操作皆可回應於程式執行期間某些事件的發生而迭代重複執行。
又更參考第1圖,針對給定記憶體存取,可決定藉給定執行緒之存取是否為實際錯誤存取或潛在錯誤存取,諸如針對追蹤執行的實際錯誤存取,或針對具有不同排序的應用程式另一次執行的潛在無效及/或未經初始化存取(菱形140)。若是,則控制從菱形140送至方塊150,於該處可報告實際錯誤存取或潛在錯誤存取。否則,有關該特定記憶體存取,未採取任何額外動作。控制從菱形140及方塊150送至菱形155,於該處決定是否欲分析額外記憶體存取。若是則控制送回如前述菱形140。當然須瞭解於維持、產生與更新的各項操作中,可能出現執行緒向量時鐘、同步向量時鐘、及存取日誌及初始化日誌。如此第1圖顯示分析工具之極高階操作而非該工具之任何實際執行。
現在參考第2圖,顯示流程圖例示說明依據本發明之一實施例操作之進一步細節。如第2圖所示,依據本發明之一實施例,分析工具可以是並行代碼檢測工具可執行方法200來產生及更新執行緒向量時鐘、同步向量時鐘、及初始化日誌及存取日誌。此外,針對接受分析應用程式之任何記憶體存取,可決定是否存在有實際違反或潛在違反。
如第2圖可知,方法200可始於針對初始程式執行緒產生一執行緒向量時鐘(方塊210)。於一個實施例中,針對該程式之多個執行緒各自,此一執行緒向量時鐘可設定於零值。當一執行緒繁衍一新執行緒時,繁衍執行緒的向量時鐘可傳播給被繁衍的執行緒(方塊220)。注意此一傳播執行緒向量時鐘可相對應於在該新執行緒產生時該繁衍執行緒的向量時鐘之值。針對任何同步物件的產生可執行相似的傳播。據此,於方塊230,當執行緒產生同步物件時,執行緒的向量時鐘可傳播來產生一同步向量時鐘。注意此一傳播同步向量時鐘可相對應於在該同步物件產生時該產生執行緒的向量時鐘之值。
仍然參考第2圖,於方塊240,執行緒向量時鐘及/或同步向量時鐘可於同步獲得及/或釋出時更新。換言之,當張貼(釋出)一同步物件時,相聯結的執行緒及同步物件二者的向量時鐘可經更新。當接收(獲得)一同步物件時,只有執行緒向量時鐘可經更新。容後詳述,於各個實施例中不同型別的更新皆屬可能。其次於方塊250,針對一記憶體元件皆可對該記憶體元件之配置上產生及初始化一初始化日誌及一存取日誌二者。初始化日誌及存取日誌可對該記憶體元件之配置上產生及初始化(例如資料結構歸零)。然後在初次寫至該記憶體元件時,可寫入初始化日誌(方塊260)。更明確言之,在藉執行緒初次寫至該記憶體元件的時間,有關該初始化執行緒及初始化時間之資訊係寫至該初始化日誌。然後於方塊270,當存取記憶體元件(使用存取執行緒識別符及存取時間)時可更新存取日誌。
注意雖然於第2圖之實施例中係以此線性流程及特定順序顯示,但須瞭解本發明之範圍並非囿限於此一方面,及前述各項操作大致上可以任何順序執行(但典型地第一操作將係針對初始程式執行緒產生一執行緒向量時鐘)。如此,前述各項操作可於程式執行之分析期間,依據程式之給定排程例如藉作業系統排程器之排程而執行。所產生與更新的各項資訊包括向量時鐘、存取日誌及初始化日誌可儲存於一或多個不同緩衝器。
然後於方塊280,針對欲存取的記憶體元件,基於得自存取執行緒的向量時鐘及存取日誌及初始化日誌之資訊,可決定是否出現實際存取違反或潛在存取違反。若決定此種實際違反或潛在違反,則可於方塊280報告,例如藉於一報告日誌中產生一分錄而報告,該分錄可儲存於記憶體或其它緩衝器及/或透過顯示器而顯示給使用者。雖然於第2圖之實施例中係以此高階顯示,但須瞭解本發明之範圍並非囿限於此一方面,及於各個實施例中,可以異步方式而非如第2圖顯示之線性流程執行特定操作。
現在合併參考第3至7圖,顯示流程圖例示說明依據本發明之一實施例,在分析多執行緒應用程式中可執行的特定操作。更明確言之,第3至7圖例示說明可用來執行各項操作之分析工具之代碼,包括基於分析多執行緒應用程式的單一排程,執行緒向量時鐘及同步向量時鐘之產生及更新、存取日誌及初始化日誌之產生及更新、及是否出現實際或潛在記憶體存取違反之決定。注意雖然於第3-7圖之實施例中係以特定順序顯示,但須瞭解本發明之範圍並非囿限於此一方式,於不同實施例中執行操作可以不同順序出現。
首先參考第3圖,顯示依據本發明之一實施例多執行緒應用程式分析之一部分300。第3-7圖之各項操作當分析工具剖析多執行緒應用程式之執行時可於分析工具之代碼體現。如第3圖所示,部分300可始於針對第一執行緒初始化一執行緒向量時鐘(方塊310)。此一初始程式執行緒可具有其執行緒向量時鐘設定為初始值,具有全部元件設定為零值。其次,可在菱形320決定執行緒是否繁衍新執行緒。若是,則控制送至方塊330,於該處可遞增於其本身向量時鐘的繁衍執行緒的元件。此外,於方塊340,藉將繁衍執行緒的向量時鐘拷貝至此一新執行緒的向量時鐘可產生被繁衍執行緒的向量時鐘。如此於本實施例中,繁衍執行緒的向量時鐘可傳播給被繁衍執行緒來初始化其執行緒向量時鐘。
仍然參考第3圖,於菱形350,可決定一執行緒是否產生一同步物件。若是,則控制送至方塊360,於該處產生執行緒的元件於其本身的向量時鐘遞增,及藉拷貝產生執行緒的向量時鐘可針對該同步物件產生一同步向量時鐘。換言之,於第3圖之實施例中,對如此拷貝產生執行緒的向量時鐘可執行另一項傳播操作來針對該同步物件設定同步向量時鐘之初始態。
如於第3圖可知,其次控制送至菱形370,於該處可決定執行緒是否釋出同步物件。若是,則執行緒的向量時鐘可經更新(方塊380)。更明確言之,可遞增在該執行緒的向量時鐘中相對應於該釋出執行緒的元件值。其次控制送至方塊390,於該處可更新同步向量時鐘之各個元件。更明確言之,各個元件可設定為針對該相對應元件之同步向量時鐘值(換言之,未做改變)或釋出執行緒的向量時鐘值中之較高者。
流程繼續至第4圖,該圖為依據本發明之一實施例多執行緒應用程式分析之又一部分400。如第4圖所示,於菱形410可決定在一同步物件上一執行緒是否獲得閂鎖。若是則控制送至方塊420,於該處可執行對存取執行緒的向量時鐘之更新來將各個向量時鐘元件值設定為針對該元件之同步向量時鐘元件值或所獲得的執行緒的相對應執行緒向量時鐘值中之較高者。
其次控制送至菱形430,於該處可決定一執行緒是否配置一記憶體元件X。若是,則可決定X是否於無效態(菱形440)。若否,則控制送至方塊450,於該處X可報告如先前配置及如此報告為實際錯誤。控制從菱形440及方塊450二者送至方塊460,於該處X之狀態可設定為未經初始化。然後控制送至方塊470,於該處可產生針對X的初始化日誌及存取日誌。容後詳述,於一個實施例中,後來在藉由儲存該記憶體元件之一分錄於一初始化日誌,該分錄包括初始化執行緒之識別符及於該初始化執行緒的向量時鐘中針對該執行緒之該元件的相對應值,該記憶體元件之初始化時可產生初始化日誌。相同資訊可儲存於該存取日誌之一相對應分錄。
流程繼續至第5圖,該圖為依據本發明之一實施例多執行緒應用程式之又一部分500。於菱形510可決定執行緒是否具有解除配置之記憶體X。若是,則控制送至菱形520來決定X是否已經在失效態。若是,則控制送至方塊530,於該處X可被報告為先前解除配置為實際違反。其次,可執行一串列操作來決定是否存在有無效存取潛在錯誤。更明確言之,於方塊550,可獲得前次存取解除配置執行緒的向量時鐘中之執行緒時間及得自存取日誌之存取時間(相對應於該記憶體元件之前次存取)。然後控制送至菱形560,於該處可決定在該解除配置執行緒的向量時鐘中該存取執行緒之邏輯時間戳記元件係小於或等於得自存取日誌之存取時間。若是,則於該應用程式之某個排程中可能出現潛在無效存取,原因在於前次存取可能在解除配置後潛在發生,於是可報告此一潛在無效存取(方塊570)。報告可呈不同形式;但於某些實施例中,有關此一潛在無效存取的資訊可儲存於錯誤日誌。此外,資訊可提供給例如使用者介面,諸如圖形用戶介面來允許使用者觀看此一資訊。其次控制送至方塊580,於該處X可設定為無效狀態,可捨棄初始化日誌及存取日誌例如來減少記憶體的耗用。
流程繼續至第6圖,該圖為依據本發明之一實施例多執行緒應用程式之又一部分600。於菱形610可決定執行緒是否讀取記憶體元件X。若是,則控制送至菱形620,於該處可決定X是否未經初始化。若是,則控制送至方塊630,於該處可報告未經初始化存取。然後於菱形640,可決定X是否於無效態。若是,則可報告無效存取(方塊650)。然後控制送至方塊660,於該處可獲得在讀數執行緒向量時鐘內的初始化執行緒時間及得自初始化日誌之初始化時間。然後於菱形670,使用此一資訊可決定初始化執行緒之邏輯時間戳記是否小於或等於得自初始化日誌之初始化時間。若是,則在該程式之某個排程可出現潛在未經初始化讀取,如此於方塊680,可報告此一潛在未經初始化讀取。然後控制送至方塊690,於該處該執行緒及針對該讀取存取執行緒之執行緒向量時鐘元件可記錄在針對記憶體元件X之存取日誌,如此指示存取執行緒及時間。
流程繼續至第7圖,該圖為依據本發明之一實施例多執行緒應用程式之又一部分700。如第7圖所示,藉決定執行緒是否寫至記憶體元件X可開始部分700(菱形710)。若是,則控制送至菱形720,於該處可決定X是否於無效態。若是則可報告無效存取(方塊730)。然後可決定X是否於未經初始化態(菱形740)。若是,則控制送至方塊750,於該處該執行緒以及來自其執行緒向量時鐘之針對寫入執行緒的執行緒向量時鐘元件,可被記錄在初始化日誌作為初始化執行緒及時間。
然後控制送至方塊760,於該處X可設定為初始化態及然後,得自該執行緒之相同資訊亦即其識別符及其相對應執行緒向量時鐘元件可記錄在存取日誌作為存取執行緒及時間(方塊770)。如圖可知,此時於此處描述之分析相關的多執行緒應用程式執行期間發生的各個可能事件已經經過處理。於是控制可前進返回第3圖,前文討論是否仍有事件有待分析(如於菱形775決定),否則方法結束。雖然係以第3-7圖所示順序顯示此等特定操作,但須瞭解本發明之範圍並非囿限於此一方式,於其它實施例中,可執行此等操作之不同排程及發生。此外,須瞭解可於應用程式本身執行後進行決定,原因在於實施例可緩衝向量時鐘資訊、同步向量時鐘資訊、及初始化日誌及存取日誌,因而可於應用程式執行完成後進行分析。
下表2顯示依據本發明之一實施例,檢測潛在未經初始化記憶體存取或無效記憶體存取錯誤之記憶體檢查演算法之虛擬代碼實例。
注意各個向量時鐘、初始化日誌及存取日誌可儲存於系統內部不同位置。舉例言之,依據本發明之一實施例,各個緩衝器諸如存在於處理器、系統記憶體等的快取記憶體之緩衝器可用來儲存於分析工具執行期間所產生的資訊。但須瞭解緩衝器或其它儲存設施的實際形式可各異。
作為針對使用分析工具所產生、更新、及分析的資料之儲存機構之一個實例,第8圖顯示儲存單元800之方塊圖。如第8圖可知,可於快取記憶體、系統記憶體等體現的儲存單元800包括各個區劃包括執行緒向量時鐘區劃810、同步向量時鐘區劃820、記憶體狀態區劃830來儲存記憶體狀態表835(可包括針對各個記憶體元件,一給定狀態之指示例如無效、未經初始化、或經初始化)、初始化日誌區劃840、及存取日誌區劃850。如於執行緒向量時鐘區劃810可見,可存在有多個執行緒向量時鐘8150-815n。同理,於同步向量時鐘區劃820中可存在多個同步向量時鐘8250-825m。於第8圖所示實施例中,初始化區劃840可包括初始化日誌845,初始化日誌可包括多個分錄,各自用以儲存針對記憶體元件之初始化的初始化資料。舉例言之,各個分錄可儲存在初始化時得自其執行緒向量時鐘的該初始化執行緒之一識別符及其邏輯時間戳記。又於第8圖所示實施例中,存取區劃850可包括存取日誌855,於一個實施例中,可包括各自聯結一特定記憶體元件之多個分錄。
為了於此一區劃中保留空間,於一個實施例中,唯有最晚近存取記憶體元件之資訊可儲存於相對應分錄。如此,於此一實施例中,在第二次存取記憶體元件時,剛存取的執行緒之資訊可覆寫儲存於相對應分錄的資訊。於一個實施例中,儲存於各個分錄的資訊可相對應於在存取時得自其執行緒向量時鐘的用以存取執行緒之一識別符及其邏輯時間戳記。但於其它實施例中,例如於該處空間並非考慮因素,瞭解多個存取日誌分錄可與各個記憶體元件相聯結,於該處各個分錄儲存一特定存取資訊。注意如此處使用,「存取日誌」及「初始化日誌」等詞可集合識別全部記憶體元件之全部此等分錄,或者也可用來針對只有一給定記憶體元件識別此等分錄,及進一步注意存取日誌及初始化日誌為全部執行緒所通用。雖然於第8圖之實施例中係以此特定體現顯示,但須瞭解本發明之範圍並非囿限於此一方面,依據本發明之一實施例,可獲得額外的或不同的資訊來執行記憶體存取檢查。
如此實施例可基於事件型別,從程式之起始直至其完成,監視程式事件及採取適當動作。由此執行緒同步事件之監視及分析,可決定潛在事件排程,及初始化日誌及存取日誌轉而可用來檢測潛在錯誤。
實施例可以異步方式或為了效能以批次模式,可更進一步處理記憶體讀/寫事件,原因在於演算法並不仰賴實際執行緒交插。舉例言之,當執行緒之記憶體讀/寫事件係經觀察且後來當緩衝器滿時以塊狀處理,執行緒之記憶體讀/寫事件可在執行緒私用緩衝器內緩衝用以獲得更佳快取記憶體利用及效能。如此實施例可針對不同排程的程式回合,分析單一程式回合及檢測潛在未經初始化之記憶體存取或無效記憶體存取錯誤。
如此實施例可提供在多執行緒程式檢測潛在未經初始化之記憶體存取或無效記憶體存取錯誤的功能及能力,可在記憶體檢查工具體現。使用此一功能,並行檢測工具可找到在代碼中的隱藏錯誤,該代碼中的隱藏錯誤唯有在代碼送出後,在終端使用者的環境中才觸發。藉此方式,可實現並列程式之改良可靠性。
實施例可以多個不同系統型別體現。現在參考第9圖,顯示依據本發明之一實施例系統之方塊圖。如第9圖所示,多處理器系統900是個點對點互連體系統,包括透過點對點互連體950而耦接的第一處理器970及第二處理器980。如第9圖所示,處理器970及980各自可以是多核心處理器,包括第一及第二處理器核心(亦即處理器核心974a及974b及處理器核心984a及984b),但潛在地可有更多個核心存在於處理器。各個核心可包括快取記憶體,具有緩衝器來儲存如前述之各項執行緒分析元資料。
仍係參考第9圖,第一處理器970更包括記憶體控制器中樞器(MCH) 972及點對點(P-P)介面976及978。同理,第二處理器980包括MCH 982及P-P介面986及988。如第9圖所示,MCH 972及982耦接處理器至個別記憶體,亦即記憶體932及記憶體934,其可以是本地附接至個別處理器的主記憶體(例如動態隨機存取記憶體(DRAM))之一部分。第一處理器970及第二處理器980可分別地透過P-P互連體952及954而耦接至晶片組990。如第9圖所示,晶片組990包括P-P介面994及998。
此外,晶片組990可包括介面992來藉P-P互連體939而耦接晶片組990與高效能圖形引擎938。晶片組990轉而可透過介面996而耦接至第一匯流排916。如第9圖所示,各個輸入/輸出(I/O)裝置914可耦接至第一匯流排916,連同匯流排橋接器918耦接第一匯流排916至第二匯流排920。各個裝置可耦接至第二匯流排920,包括例如鍵盤/滑鼠922、通訊裝置926、及資料儲存單元928,諸如磁碟機或其它大容量儲存裝置其可包括代碼930,例如來執行依據本發明之一實施例多執行緒代碼之記憶體檢查分析。又,音訊I/O 924可耦接至第二匯流排920。
實施例可以代碼體現且可儲存在儲存媒體上,該儲存媒體其上儲存有指令用來規劃系統而執行指令。儲存媒體可包括但非限於任一型非暫態儲存媒體,諸如碟片包括軟碟、光碟、固態驅動裝置(SSD)、光碟-唯讀記憶體(CD-ROM)、光碟可覆寫式(CD-RW)及磁光碟;半導體裝置諸如唯讀記憶體(ROM)、隨機存取記憶體(RAM)諸如動態隨機存取記憶體(DRAM)、靜態隨機存取記憶體(SRAM)、可抹除可規劃唯讀記憶體(EPROM)、快閃記憶體、可電氣抹除可規劃唯讀記憶體(EEPROM)、磁卡或光卡、或任何其它型別之適合用以儲存電子指令之媒體。
雖然已經就有限數目之實施例描述本發明,但熟諳技藝人士將瞭解得自其中之多項修改及變化。意圖隨附之申請專利範圍涵蓋落入於本發明之精髓及範圍內的全部此等修改及變化。
100、200...方法
110-155、210-290、310-390、410-470、510-580、610-690、710-775...處理方塊
300、400、500、600、700...部分
800...儲存單元
810...執行緒向量時鐘區劃
8150-n...執行緒向量時鐘
820...同步向量時鐘區劃
8250-m...同步向量時鐘
830...記憶體狀態區劃
835...記憶體狀態表
840...初始化日誌區劃
845...初始化日誌
850...存取日誌區劃
855...存取日誌
900...多處理器系統
914...I/O裝置
916、920...匯流排
918...匯流排橋接器
922...鍵盤/滑鼠
924...音訊I/O
926...通訊裝置
928...資料儲存單元
930...代碼
932、934...記憶體
938...高效能圖形引擎
939、950、952、954...點對點互連體
970、980...處理器
972、982...記憶體控制器中樞器(MCH)
974a-b、984a-b...處理器核心
976、978、986、988、994、998...點對點(P-P)介面
990...晶片組
992、996...介面(I/F)
第1圖為依據本發明之一實施例於多執行緒代碼分析工具中執行的多項操作之高階視圖之流程圖。
第2圖為流程圖顯示依據本發明之一實施例代碼分析操作之進一步細節。
第3至7圖為流程圖顯示依據本發明之一實施例分析多執行緒應用程式中可執行的特定操作。
第8圖為依據本發明之一實施例儲存單元之方塊圖。
第9圖為依據本發明之一實施例系統之方塊圖。
100...方法
110-155...處理方塊
Claims (21)
- 一種方法,其係包含:針對在一處理系統上執行的一多執行緒應用程式之多個執行緒,於該處理系統之一第一儲存裝置中維持一執行緒向量時鐘;針對該多執行緒應用程式之多個同步物件,於該處理系統之一第二儲存裝置中維持一同步向量時鐘;針對在該多執行緒程式執行期間所發生的記憶體存取,產生一存取日誌;及至少部分基於一第一執行緒之一執行緒向量時鐘及與一第一記憶體元件相聯結的一存取日誌,於該處理系統中針對該多執行緒應用程式之一不同排程,決定藉該多執行緒程式之該第一執行緒存取該第一記憶體元件是否為一潛在無效存取。
- 如申請專利範圍第1項之方法,其係進一步包含報告該潛在無效存取。
- 如申請專利範圍第1項之方法,其係進一步包含針對該多執行緒程式之一初始執行緒而產生一第一執行緒向量時鐘,及針對藉該第一執行緒繁衍的一第二執行緒而傳播該第一執行緒向量時鐘給一第二執行緒向量時鐘。
- 如申請專利範圍第3項之方法,其係進一步包含更新該第一執行緒向量時鐘,及當該第一執行緒產生一第一同步物件時,傳播該被更新的第一執行緒向量時鐘來產生一第一同步向量時鐘。
- 如申請專利範圍第4項之方法,其係進一步包含當該第一執行緒釋出該第一同步物件時,更新該被更新的第一執行緒向量時鐘及該第一同步向量時鐘。
- 如申請專利範圍第5項之方法,其係進一步包含當該第二執行緒獲得該第一同步物件時,更新該第二執行緒向量時鐘。
- 如申請專利範圍第6項之方法,其中更新該第二執行緒向量時鐘包含透過該第一同步向量時鐘而傳播得自該第一執行緒向量時鐘之資訊給該第二執行緒向量時鐘。
- 如申請專利範圍第1項之方法,其係進一步包含回應於該第一記憶體元件的配置而產生與該第一記憶體元件相聯結的該存取日誌。
- 如申請專利範圍第1項之方法,其係進一步包含基於比較得自該第一執行緒向量時鐘之該第一執行緒之一時間戳記及與該第一記憶體元件相聯結的一初始化日誌之一時間戳記,而決定藉該第一執行緒存取該第一記憶體元件為一潛在錯誤的未經初始化存取。
- 如申請專利範圍第1項之方法,其係進一步包含基於比較得自該第一執行緒向量時鐘之該第一執行緒之一時間戳記及與該第一記憶體元件相聯結的一初始化日誌之一時間戳記,而決定藉該第一執行緒存取該第一記憶體元件為一潛在錯誤無效存取。
- 一種物件包含一非過渡機器可存取儲存媒體,該媒體係包括指令,該等指令當執行時使得一系統:針對一多執行緒應用程式之一第一執行緒,產生一第一執行緒向量時鐘;當該第一執行緒產生一第一同步物件時,產生針對該第一同步物件之一第一同步向量時鐘;當該第一執行緒釋出該第一同步物件時,更新該第一執行緒向量時鐘及該第一同步向量時鐘;當該記憶體元件被配置時,針對一記憶體元件產生一初始化日誌分錄及一存取日誌分錄,及當該記憶體元件被存取時更新該存取日誌分錄;及至少部分基於該第一執行緒向量時鐘及該存取日誌分錄,針對該多執行緒應用程式之一不同排程,決定藉該第一執行緒存取該記憶體元件是否為一潛在錯誤存取。
- 如申請專利範圍第11項之物件,其係進一步包含指令,該等指令當執行時使得該系統透過該第一執行緒向量時鐘之傳播而產生該第一同步向量時鐘。
- 如申請專利範圍第12項之物件,其係進一步包含指令,該等指令當執行時使得該系統進一步基於該初始化日誌分錄而決定該存取是否為一潛在錯誤存取,其中當該記憶體元件係首次被寫入時,該初始化日誌分錄係經更新。
- 如申請專利範圍第12項之物件,其係進一步包含指令,該等指令當執行時使得該系統針對藉該第一執行緒繁衍的一第二執行緒而傳播該第一執行緒向量時鐘給一第二執行緒向量時鐘。
- 如申請專利範圍第14項之物件,其係進一步包含指令,該等指令當執行時使得該系統當該第一執行緒釋出該第一同步物件時,更新該第一執行緒向量時鐘及該第一同步向量時鐘。
- 如申請專利範圍第15項之物件,其係進一步包含指令,該等指令當執行時使得該系統當該第二執行緒獲得該第一同步物件時,藉由透過該第一同步向量時鐘而傳播得自該第一執行緒向量時鐘之資訊給該第二執行緒向量時鐘來更新該第二執行緒向量時鐘。
- 一種系統,其係包含:一處理器來執行具有多個執行緒之一多執行緒應用程式;耦接至該處理器來儲存執行緒分析元資料之一儲存裝置包括:多個執行緒向量時鐘,各自係聯結該等多個執行緒中之一者且具有多個元件各自係相對應於該等多個執行緒中之一執行緒之一邏輯時間戳記;多個同步向量時鐘,各自係聯結該多執行緒程式之一同步物件且具有多個元件各自係相對應於該等多個執行緒中之一執行緒之一邏輯時間戳記;及具有多個分錄之一存取日誌,各個分錄係聯結該多執行緒程式之一記憶體元件來儲存該記憶體元件之存取資訊。
- 如申請專利範圍第17項之系統,其中該儲存裝置係更進一步儲存具有多個分錄之一初始化日誌,各個分錄係聯結該多執行緒程式之一記憶體元件來儲存該記憶體元件之初始化資訊。
- 如申請專利範圍第17項之系統,其中一第一執行緒向量時鐘之該等邏輯時間戳記就至少另一個執行緒向量時鐘而言係非同調性地被維持於該第一執行緒向量時鐘中。
- 如申請專利範圍第18項之系統,其中該記憶體元件之該初始化資訊係包含首次寫至該記憶體元件之一執行緒之一識別符,及於一初始化時間針對該初始化執行緒之一邏輯時間戳記,該邏輯時間戳記係得自該初始化執行緒之該執行緒向量時鐘。
- 如申請專利範圍第17項之系統,其中該記憶體元件之該存取資訊係包含存取該記憶體元件之一執行緒之一識別符,及於一存取時間針對該存取執行緒之一邏輯時間戳記,該邏輯時間戳記係得自該存取執行緒之該執行緒向量時鐘。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/117,526 US9081628B2 (en) | 2011-05-27 | 2011-05-27 | Detecting potential access errors in a multi-threaded application |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201248503A TW201248503A (en) | 2012-12-01 |
TWI521438B true TWI521438B (zh) | 2016-02-11 |
Family
ID=47220055
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW100147973A TWI521438B (zh) | 2011-05-27 | 2011-12-22 | 於多執行緒應用程式中偵測潛在存取錯誤之技術 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9081628B2 (zh) |
TW (1) | TWI521438B (zh) |
WO (1) | WO2012166208A1 (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8825848B1 (en) * | 2012-03-20 | 2014-09-02 | Emc Corporation | Ordering of event records in an electronic system for forensic analysis |
EP2972878B1 (en) * | 2013-03-15 | 2018-09-26 | Intel Corporation | Mechanism for facilitating dynamic and efficient management of instruction atomicity violations in software programs at computing systems |
US9256512B1 (en) | 2013-12-13 | 2016-02-09 | Toyota Jidosha Kabushiki Kaisha | Quality analysis for embedded software code |
US10275333B2 (en) * | 2014-06-16 | 2019-04-30 | Toyota Jidosha Kabushiki Kaisha | Risk analysis of codebase using static analysis and performance data |
US9465686B2 (en) | 2015-02-10 | 2016-10-11 | International Business Machines Corporation | Detecting uninitialized memory references |
US9430357B1 (en) | 2015-02-10 | 2016-08-30 | International Business Machines Corporation | Detecting uninitialized memory references |
US11137919B2 (en) * | 2017-10-30 | 2021-10-05 | Arm Ltd. | Initialisation of a storage device |
CN109766131B (zh) * | 2017-11-06 | 2022-04-01 | 上海宝信软件股份有限公司 | 基于多线程技术实现软件智能化自动升级的系统及方法 |
CN108205476A (zh) * | 2017-12-27 | 2018-06-26 | 郑州云海信息技术有限公司 | 一种多线程日志输出的方法及装置 |
US11354130B1 (en) * | 2020-03-19 | 2022-06-07 | Amazon Technologies, Inc. | Efficient race-condition detection |
CN112486703B (zh) * | 2020-11-27 | 2024-02-06 | 中船重工(武汉)凌久电子有限责任公司 | 基于多核多处理器并行系统的全局数据存储器管理方法 |
FR3131644A1 (fr) * | 2021-12-30 | 2023-07-07 | Thales | Système et procédé de surveillance du fonctionnement d'un calculateur |
US20240152429A1 (en) * | 2022-11-04 | 2024-05-09 | Microsoft Technology Licensing, Llc | Recoverable Processes |
CN116049115B (zh) * | 2023-01-13 | 2023-12-01 | 深圳安科百腾科技有限公司 | 一种软件日志处理方法 |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6920634B1 (en) | 1998-08-03 | 2005-07-19 | International Business Machines Corporation | Detecting and causing unsafe latent accesses to a resource in multi-threaded programs |
US6701528B1 (en) | 2000-01-26 | 2004-03-02 | Hughes Electronics Corporation | Virtual video on demand using multiple encrypted video segments |
EP1202172A1 (en) * | 2000-10-31 | 2002-05-02 | Universiteit Gent | Topological, on-the-fly classification of objects into a global set and local sets |
US6502170B2 (en) | 2000-12-15 | 2002-12-31 | Intel Corporation | Memory-to-memory compare/exchange instructions to support non-blocking synchronization schemes |
US7516446B2 (en) * | 2002-06-25 | 2009-04-07 | International Business Machines Corporation | Method and apparatus for efficient and precise datarace detection for multithreaded object-oriented programs |
US7093262B2 (en) | 2002-07-30 | 2006-08-15 | Intel Corporation | Detecting deadlocks in multithreaded programs |
CA2435148A1 (en) | 2003-07-15 | 2005-01-15 | Robert J. Blainey | System and method for lock caching for compound atomic operations on shared memory |
US20050038806A1 (en) * | 2003-08-12 | 2005-02-17 | Zhiqiang Ma | Methods and apparatus for detecting data race conditions in message-based multi-threaded programs |
US7711931B2 (en) | 2003-08-28 | 2010-05-04 | Mips Technologies, Inc. | Synchronized storage providing multiple synchronization semantics |
US7849297B2 (en) | 2003-08-28 | 2010-12-07 | Mips Technologies, Inc. | Software emulation of directed exceptions in a multithreading processor |
US7549150B2 (en) | 2004-03-24 | 2009-06-16 | Microsoft Corporation | Method and system for detecting potential races in multithreaded programs |
US7716645B2 (en) | 2005-06-10 | 2010-05-11 | International Business Machines Corporation | Using atomic sets of memory locations |
US7844971B2 (en) | 2005-09-28 | 2010-11-30 | Intel Corporation | Method and apparatus for detecting cross-thread stack access in multithreaded programs |
US7962912B2 (en) * | 2006-05-12 | 2011-06-14 | Microsoft Corporation | One-time initialization |
US7673181B1 (en) | 2006-06-07 | 2010-03-02 | Replay Solutions, Inc. | Detecting race conditions in computer programs |
US7840849B2 (en) * | 2006-12-21 | 2010-11-23 | Novell, Inc. | Methods and apparatus for debugging software including divisions of an execution history of a debuggee program |
US8533681B2 (en) | 2007-03-07 | 2013-09-10 | The Board Of Trustees Of The University Of Illinois | Atomicity violation detection using access interleaving invariants |
US7861118B2 (en) | 2007-03-30 | 2010-12-28 | Microsoft Corporation | Machine instruction level race condition detection |
EP2043015B1 (en) * | 2007-09-27 | 2014-04-23 | Sap Ag | Secure logical vector clocks |
US7539979B1 (en) | 2008-03-31 | 2009-05-26 | International Business Machines Corporation | Method and system for forcing context-switch during mid-access to non-atomic variables |
US8732142B2 (en) * | 2008-03-31 | 2014-05-20 | Intel Corporation | Generation of suggestions to correct data race errors |
US8032706B2 (en) | 2008-08-05 | 2011-10-04 | Intel Corporation | Method and apparatus for detecting a data access violation |
US8418146B2 (en) | 2008-11-26 | 2013-04-09 | Microsoft Corporation | Sampling techniques for dynamic data-race detection |
-
2011
- 2011-05-27 US US13/117,526 patent/US9081628B2/en not_active Expired - Fee Related
- 2011-12-22 TW TW100147973A patent/TWI521438B/zh not_active IP Right Cessation
- 2011-12-29 WO PCT/US2011/067989 patent/WO2012166208A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
US20120303910A1 (en) | 2012-11-29 |
TW201248503A (en) | 2012-12-01 |
WO2012166208A1 (en) | 2012-12-06 |
US9081628B2 (en) | 2015-07-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI521438B (zh) | 於多執行緒應用程式中偵測潛在存取錯誤之技術 | |
EP3526673B1 (en) | Systems, methods, and devices for vertically integrated instrumentation and trace reconstruction | |
Xu et al. | A serializability violation detector for shared-memory server programs | |
EP1856612B1 (en) | Method for counting instructions for logging and replay of a deterministic sequence of events | |
US6539500B1 (en) | System and method for tracing | |
US7636870B2 (en) | Semiconductor integrated circuit device, and debugging system and method for the semiconductor integrated circuit device | |
US7840787B2 (en) | Method and apparatus for non-deterministic incremental program replay using checkpoints and syndrome tracking | |
US9454460B2 (en) | Methods, systems, and media for providing determinism in multithreaded programs | |
EP1842132B1 (en) | Method for optimising the logging and replay of multi-task applications in a mono-processor or multi-processor computer system | |
CN104541244A (zh) | 用于进行重放执行的方法和系统 | |
EP3021224B1 (en) | Method and apparatus for producing a benchmark application for performance testing | |
US20140365833A1 (en) | Capturing trace information using annotated trace output | |
GB2500085A (en) | Determining whether a standby database is synchronized with a primary database | |
US20140215483A1 (en) | Resource-usage totalizing method, and resource-usage totalizing device | |
Sridharan et al. | Using pvf traces to accelerate avf modeling | |
US8392891B2 (en) | Technique for finding relaxed memory model vulnerabilities | |
Toslali et al. | Automating instrumentation choices for performance problems in distributed applications with VAIF | |
US10949330B2 (en) | Binary instrumentation to trace graphics processor code | |
Tchamgoue et al. | A framework for on-the-fly race healing in ARINC-653 applications | |
US9092333B2 (en) | Fault isolation with abstracted objects | |
Chen et al. | MSRP-FT: Reliable resource sharing on multiprocessor mixed-criticality systems | |
Machado et al. | Minha: Large-scale distributed systems testing made practical | |
Pokam et al. | HARDWARE AND SOFTWARE APPROACHES FOR DETERMINISTIC MULTI-PROCESSOR REPLAY OF CONCURRENT PROGRAMS. | |
US20160092341A1 (en) | Using hardware performance counters to detect stale memory objects | |
US10540254B2 (en) | Technologies for analyzing persistent memory programs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
MM4A | Annulment or lapse of patent due to non-payment of fees |