帶有事務(wù)功能以及報告事務(wù)操作的日志記錄電路的處理器的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明的領(lǐng)域涉及計算科學,更具體而言,涉及帶有事務(wù)功能以及報告事務(wù)操作的日志記錄電路的處理器。
【背景技術(shù)】
[0002]多核處理器和/或處理核內(nèi)的多線程指令執(zhí)行流水線導致軟件程序員開發(fā)多線程軟件程序(而不是單個線程軟件程序)。由于并行地執(zhí)行的不同的進程,多線程軟件必然復雜。然而,由于按其執(zhí)行的方式的“非確定性”的方面,多線程軟件更難以調(diào)試。具體而言,多線程軟件程序可以跨兩個不同的運行時以不同的方式執(zhí)行,即使程序從相同的輸入狀態(tài)開始。
[0003]由于這些原因,使用“日志記錄”來記錄多線程軟件程序的執(zhí)行中的某些緊要關(guān)頭。處理器目前設(shè)計有日志記錄電路,日志記錄電路觀察處理器的軟件的執(zhí)行,并記錄電路被設(shè)計為檢測的某些關(guān)鍵事件。如果軟件程序崩潰,則分析日志記錄以研宄導致崩潰的程序的執(zhí)行。
[0004]附圖簡述
[0005]本發(fā)明是通過示例說明的,而不僅局限于各個附圖的圖示,在附圖中,類似的參考標號表示類似的元件,其中:
[0006]圖1 (現(xiàn)有技術(shù))示出了處理器;
[0007]圖2示出了改善的處理器;
[0008]圖3a示出了可以由所述處理器執(zhí)行的第一方法;
[0009]圖3b示出了可以由所述處理器執(zhí)行的第二方法;
[0010]圖3c示出了可以由所述處理器執(zhí)行的第三方法;
[0011]圖3d示出了可以由所述處理器執(zhí)行的第四方法;
[0012]圖4示出了分組結(jié)構(gòu);
[0013]圖5示出計算系統(tǒng)。
[0014]詳細描述
[0015]圖1示出了在半導體芯片上實現(xiàn)的現(xiàn)有技術(shù)處理器100,具有日志記錄電路101_1到101_N,用于跟蹤多線程程序流的特定的方面,并且從外部記錄來自處理器100的這樣的方面,以便以后研宄并理解程序的執(zhí)行。在一種實現(xiàn)中,處理器日志記錄電路101_1到101_N的每一個實例被設(shè)計成監(jiān)視其本地處理核的每一個線程(當其在“塊”中執(zhí)行時),其中,某些,特定的被監(jiān)視的事件結(jié)束塊。通過將每一個線程的塊序列存儲到諸如系統(tǒng)存儲器103之類的存儲位置,可以詳盡地分析或許跨所有核105_1到105_X執(zhí)行線程的較大的多線程程序的多線程執(zhí)行。
[0016]給日志記錄電路的每一個實例指定了系統(tǒng)存儲器103要在其中存儲其相應(yīng)的塊的特定的區(qū)域。給由特定核執(zhí)行的每一個硬件線程分配了分配給日志記錄電路的系統(tǒng)存儲器區(qū)域內(nèi)的其自己的相應(yīng)的空間。這里,如在本領(lǐng)域內(nèi)已知的,單指令執(zhí)行流水線可以并行地執(zhí)行多個硬件線程(例如,8個硬件線程)。此外,每一個處理核都可以包含一個以上的指令執(zhí)行流水線(例如,圖1示出了每一個核具有兩個指令執(zhí)行流水線106)。
[0017]硬件線程被理解為在指令執(zhí)行流水線內(nèi)被積極地執(zhí)行的線程。指令執(zhí)行流水線通常被設(shè)計為并行地執(zhí)行最大/有限數(shù)量的硬件線程,其中,最大/極限是由流水線的硬件設(shè)計設(shè)置的。軟件線程被理解為程序代碼指令的單個流。由一個處理器支持的軟件線程的數(shù)量可以大大地超出硬件線程的數(shù)量。當線程的狀態(tài)/上下文信息被切換到指令執(zhí)行流水線時,軟件線程也被認為是硬件線程。當其狀態(tài)/上下文從指令執(zhí)行流水線切換走時,軟件線程喪失其硬件線程狀態(tài)。在一個實施例中,每個硬件線程,有日志記錄電路的一個實例(為簡明起見,圖1只示出了每個核,一個日志記錄電路)。
[0018]在一種實現(xiàn)中,日志記錄電路實例(例如,實例101_1)被設(shè)計成在下列條件中的任何一個條件下結(jié)束線程的塊:1)存儲器競爭狀況;2)線程從有效狀態(tài)切換到休眠狀態(tài);3)轉(zhuǎn)換后援緩沖器(TLB)失效;4)線程過渡到超出為其配置的特權(quán)級別外面(例如,響應(yīng)于中斷或異常,線程從“用戶”特權(quán)級別過渡到“內(nèi)核”特權(quán)級別);5)線程試圖訪問不可緩存的存儲器區(qū)域。這里,上文所描述的事件中的任何一個都對多線程程序的執(zhí)行的非確定的方式有貢獻。
[0019]圖1還示出了特定線程的塊的分組的現(xiàn)有技術(shù)結(jié)構(gòu)的插圖120。如在插圖120中觀察到的,分組包括:1)分組格式標識符(FMT) ;2)塊的結(jié)束原因(CTR) ;3)差分時間戳(此分組和前一塊的分組之間的時間)(TSD) ;4)在線程的前一塊的結(jié)束和該塊的結(jié)束之間由該塊執(zhí)行的指令的數(shù)量(CS) ;5)對于該塊的未完成的寫入的數(shù)量(即,退役但還沒有全局可見的(提交的)存儲操作的數(shù)量)(RSW) ;6)最老的還沒有退役的宏指令的退役的加載/存儲操作的數(shù)量(NTB)。在一個實施例中,由軟件層添加核ID和線程ID,它們兩者都可以基于塊被存儲在系統(tǒng)存儲器103中的位置來確定。
[0020]這里,每一個日志記錄電路實例101_1到101_N都耦合到處理器的其相應(yīng)的處理核105_1到105_N中的“掛鉤”104_1到104_N(例如,在執(zhí)行各種軟件線程的相應(yīng)的指令流的指令執(zhí)行流水線106_1到106_N附近),“掛鉤”104_1到104_N被設(shè)計為檢測被監(jiān)視的塊結(jié)束事件。在特定線程的執(zhí)行過程中,各種掛鉤檢測線程的塊結(jié)束事件,并將事件報告給日志記錄電路101。作為響應(yīng),日志記錄電路101根據(jù)插圖120的結(jié)構(gòu),形成分組,并導致分組被寫入到外部存儲器103。
[0021]每一個核內(nèi)的這些掛鉤中的一個耦合到存儲器競爭檢測電路107_1到107_N。如在圖1中觀察到的,對于在核的LI緩存108_1到108_N附近耦合的每一個處理核,有一個存儲器競爭檢測電路。每一個存儲器競爭電路107_1到107_N都被設(shè)計成在其相關(guān)聯(lián)的LI緩存中檢測存儲器競爭。
[0022]當兩個不同的軟件進程(例如,兩個不同的線程)試圖訪問同一個存儲器位置時,發(fā)生存儲器競爭。這里,每一個線程都記住當前塊的所有存儲器訪問(地址)。當檢測到與當前塊記住的地址之一沖突時(不管此訪問在過去有多長),結(jié)束一個塊,創(chuàng)建新的塊。
[0023]值得注意的是,當同一核上兩個不同的線程試圖訪問相同存儲器位置或當兩個不同的核上的兩個不同的線程試圖訪問相同存儲器位置時,會導致競爭。在后一種情況下,第一核將監(jiān)聽第二核的LI緩存。這里,互連網(wǎng)絡(luò)109被用來傳輸這樣的監(jiān)聽。
[0024]每一個存儲器競爭檢測電路107_1到107_N都跟蹤最近的讀取操作和最近的寫入操作(被稱為“讀取集”和“寫入集”),并將它們與傳入的讀取請求和傳入的寫入請求進行比較。無論何時存儲器競爭電路檢測到指向相同存儲器地址的并行“寫后讀”(RAW)、“寫后寫”(WAW)或“讀后寫”(WAR)操作,它都將檢測到存儲器競爭狀況。在各實施例中,相互沖突的地址的身份可以可任選地被包括在被記錄了存儲器競爭的塊中(取決于希望較大的還是較小的塊)。
[0025]圖2示出了對圖1的現(xiàn)有技術(shù)處理器的改善。這里,在一個實施例中,圖2的改善的處理器假設(shè)上文參考圖1所描述的全部功能加上緊鄰下面所描述的額外的改善。
[0026]如在圖2中觀察到的,處理器的單個核205_1到205_N包括執(zhí)行“