專利名稱:多核架構(gòu)中的調(diào)試的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及在多核架構(gòu)中進(jìn)行調(diào)試的方法和設(shè)備。
背景技術(shù):
近年來(lái),為了使硅效率(即,“應(yīng)用可實(shí)現(xiàn)的”ΜΙΡ/mm2或ΜΙΡ/mW)最大化,出現(xiàn)了一種制造包含多個(gè)核的處理器的趨勢(shì)。這種多核架構(gòu)理想地適于運(yùn)行基于線程的應(yīng)用,因?yàn)榫€程定義了包含執(zhí)行狀態(tài)、指令流和數(shù)據(jù)組的自主工作包,該線程通過(guò)定義可以與其他線程并行執(zhí)行。然而,這種并行執(zhí)行對(duì)在這些多核架構(gòu)上使用的軟件調(diào)試進(jìn)程引入了另外的問(wèn)題。軟件調(diào)試是對(duì)計(jì)算機(jī)應(yīng)用的執(zhí)行中的錯(cuò)誤進(jìn)行定位和改正的總稱。軟件調(diào)試所面臨的關(guān)鍵問(wèn)題之一是海森堡臭蟲(Heisenberg bug)(也稱為“探針效應(yīng)(probe effect)”)。出于調(diào)試目的(例如,為了提高系統(tǒng)診斷的級(jí)別)而添加的任意代碼都可能稍微改變同時(shí)和/或并行執(zhí)行的線程的定時(shí)。這帶來(lái)了程序缺陷(bug)被掩飾的風(fēng)險(xiǎn),這些程序缺陷在同一應(yīng)用的發(fā)行版本中可能會(huì)被發(fā)現(xiàn)。另外,難以在生成中存在很多調(diào)試代碼時(shí)提取有意義的性能測(cè)量值和測(cè)定值(instrumentation)。這是因?yàn)槿绺咚倬彺婧突ミB性能的二級(jí)效應(yīng)可能會(huì)受到附加代碼的影響,并且對(duì)代碼大小有更明顯的影響。另外,由于其開發(fā)中使用了很多資源,所以對(duì)于提高為這種多核架構(gòu)開發(fā)的軟件的可重用性存在不斷增長(zhǎng)的需求。過(guò)去,用于多核架構(gòu)的應(yīng)用是在定制的基礎(chǔ)上編寫的,從而開發(fā)出可移植性很差的硬件專用應(yīng)用。另外,這些應(yīng)用的調(diào)試也非常特殊。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的第一方面,提供了一種對(duì)多核處理器架構(gòu)中的線程執(zhí)行進(jìn)行監(jiān)測(cè)的方法,該多核處理器架構(gòu)包括用于處理這些線程的多個(gè)互連的處理器元件,該方法包括接收多個(gè)線程參數(shù)指示符,這些線程參數(shù)指示符表示與一個(gè)或多個(gè)線程的功能和/或標(biāo)識(shí)有關(guān)的多個(gè)參數(shù);將這些線程參數(shù)指示符中的至少一些與第一多個(gè)預(yù)定標(biāo)準(zhǔn)進(jìn)行比較,每一個(gè)預(yù)定標(biāo)準(zhǔn)都代表了感興趣的指示符;以及根據(jù)作為所述比較的結(jié)果被識(shí)別為感興趣的線程參數(shù)指示符來(lái)生成輸出。這提供了以下的能力在線程級(jí)別對(duì)在多核處理器架構(gòu)上運(yùn)行的應(yīng)用進(jìn)行調(diào)試和跟蹤,而無(wú)需出于線程級(jí)別調(diào)試的目的而專門添加代碼。另外,還提供了以下的優(yōu)點(diǎn)使得能夠?qū)Χ嗪思軜?gòu)應(yīng)用進(jìn)行調(diào)試,而不需要引入附加代碼而因此引入探針效應(yīng)。根據(jù)本發(fā)明的另一方面,提供了一種用于多核處理器架構(gòu)的線程級(jí)別軟件調(diào)試控制器,該多核處理器架構(gòu)具有多個(gè)互連的處理器元件,每一個(gè)元件都提供用于處理線程的資源,所述調(diào)試控制器與所述處理器元件中的每一個(gè)進(jìn)行通信,并且包括用于對(duì)該多核處理器架構(gòu)中的線程的分配和執(zhí)行進(jìn)行監(jiān)測(cè)的監(jiān)測(cè)器邏輯。
本發(fā)明可以按照多種方式來(lái)實(shí)現(xiàn),下面將參照附圖并通過(guò)示例的方式來(lái)描述某些實(shí)施例,在附圖中圖1示出了典型的多核處理器架構(gòu)系統(tǒng)的邏輯布局的示意性框圖;圖2示出了圖1的邏輯布局的一種示例性實(shí)現(xiàn)的示意性框圖,其中線程管理和分配控制器與專用存儲(chǔ)器設(shè)備和控制器客戶端(client) —起結(jié)合在通用多核處理器架構(gòu)中;圖3再次以框圖的形式示出了結(jié)合有圖2的元件的基于現(xiàn)有的片上系統(tǒng)(SoC)總線的架構(gòu)的示例;圖4示出了圖1、2和3的控制器的外部連接的更詳細(xì)視圖;圖5示出了圖2和3的存儲(chǔ)器設(shè)備的更詳細(xì)視圖;圖6示出了圖2、3和4的控制器的內(nèi)部構(gòu)成的更詳細(xì)視圖;圖7示出了如圖2和3所示的控制器客戶端的示意性框圖;圖7B示出了在單個(gè)控制器客戶端用作用于多個(gè)處理資源的代理的情況下該系統(tǒng)的示意性框圖;圖8示出了硬件控制器客戶端的更詳細(xì)示意性框圖;圖9示出了線程描述符、控制器、處理資源和共享系統(tǒng)存儲(chǔ)器之間的典型關(guān)系;圖10示出了根據(jù)本發(fā)明實(shí)施例的結(jié)合有調(diào)試架構(gòu)的典型多核處理器架構(gòu)系統(tǒng)的邏輯布局的一種示例性實(shí)現(xiàn)的示意性框圖。在圖10中,控制器用作用于調(diào)試控制的中心仲裁器;圖IOb示出了根據(jù)本發(fā)明實(shí)施例的結(jié)合有調(diào)試架構(gòu)的典型多核處理器架構(gòu)系統(tǒng)的邏輯布局的另一示例性實(shí)現(xiàn)的示意性框圖。在圖IOb中,不是本發(fā)明的一部分的附加組件提供了包括控制器的多核處理器架構(gòu)內(nèi)的所有核之間的調(diào)試事件集合;圖11示出了圖10和IOb的線程調(diào)試控制器的外部連接的更詳細(xì)視圖;圖12a示出了圖10和IOb的線程調(diào)試控制器的跟蹤緩沖器的外部連接的更詳細(xì)視圖;圖12b示出了圖12a的跟蹤緩沖器的典型輸出的時(shí)序圖;圖13示出了圖10和IOb的線程調(diào)試控制器的外部連接的另一詳細(xì)視圖,包括到圖2的控制器的多個(gè)子塊的連接;圖14示出了圖11的線程調(diào)試管理器的內(nèi)部構(gòu)成的功能框圖;圖15示出了圖14的調(diào)試機(jī)之一的邏輯框圖;圖16示出了圖14的調(diào)試機(jī)之一的物理框圖;圖17示出了圖14的調(diào)試機(jī)的級(jí)聯(lián)(concatenation)能力的示例;圖18示出了在單字EventWatch情況下調(diào)試機(jī)內(nèi)的指令數(shù)據(jù)流;圖19示出了在雙字EventWatch情況下調(diào)試機(jī)內(nèi)的指令數(shù)據(jù)流;圖20示出了圖14的示例性靜態(tài)事件過(guò)濾器模塊的功能框圖;圖21示出了圖20的靜態(tài)事件過(guò)濾器模塊中的事件過(guò)濾器掩碼(mask)的示例性分配;以及
圖22示出了圖14的跟蹤數(shù)據(jù)格式化器/壓縮器模塊的示例的框圖。
具體實(shí)施例方式圖1示出了典型的多核處理器架構(gòu)的示例的系統(tǒng)框架的邏輯視圖。該框架包括多個(gè)處理資源150,每個(gè)處理資源都可以與該多核架構(gòu)中的其他處理資源150相似或不相似。 處理資源150可以是能夠執(zhí)行指令的任意形式的硬件或其等價(jià)物,因此可以包括通用處理資源150,或者具有有效限制指令集的處理資源150,例如輸入輸出設(shè)備。該系統(tǒng)框架還包括集中線程管理和分配系統(tǒng),該集中線程管理和分配系統(tǒng)包括線程管理和分配控制器130以及經(jīng)由存儲(chǔ)器接口 180連接至該控制器的專用緊密連接的存儲(chǔ)器190。每個(gè)處理資源150都能夠通過(guò)互連115來(lái)訪問(wèn)控制器130。應(yīng)該理解,圖1的結(jié)構(gòu)的實(shí)現(xiàn)不需要任何特定的互連策略(即,控制器130與各個(gè)處理資源150進(jìn)行通信或者各個(gè)處理資源150與控制器130進(jìn)行通信所用的結(jié)構(gòu),以及各個(gè)處理資源150與系統(tǒng)資源,例如存儲(chǔ)器140,進(jìn)行通信所用的結(jié)構(gòu));具體地說(shuō),同樣可以采用點(diǎn)對(duì)點(diǎn)鏈接、中央系統(tǒng)總線或者甚至是管道架構(gòu),只要處理資源150中的每一個(gè)都應(yīng)當(dāng)能夠直接或間接(即,通過(guò)其他處理資源150或其他方式)與控制器130進(jìn)行通信。圖2再次僅以示例的方式示出了實(shí)現(xiàn)圖1的邏輯結(jié)構(gòu)的多核處理器。圖2的多核處理器采用了多個(gè)處理資源150,每一個(gè)處理資源都通過(guò)系統(tǒng)互連160而連接。系統(tǒng)互連 160進(jìn)而通過(guò)輸入接口 100和輸出接口 110與控制器130進(jìn)行通信。在圖3的示例中,系統(tǒng)互連160被布置為傳統(tǒng)的中央總線,該中央總線將處理資源150中的每一個(gè)彼此連接并將處理資源150中的每一個(gè)與控制器130連接,還將處理資源150中的每一個(gè)與諸如系統(tǒng)存儲(chǔ)器的共享系統(tǒng)資源140連接??梢酝ㄟ^(guò)多種目前可用的接口技術(shù)中的任意一種來(lái)實(shí)現(xiàn)與共享系統(tǒng)資源140的連接。存儲(chǔ)器可以由目前可用的中央計(jì)算機(jī)存儲(chǔ)器技術(shù)中的任意一種來(lái)構(gòu)成,例如靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM),或者雙倍數(shù)據(jù)速率隨機(jī)存取存儲(chǔ)器(DDR RAM)。如圖2所示,多個(gè)處理資源150中的每一個(gè)都具有被構(gòu)造用于從中央控制器130 接收控制信息,并根據(jù)所接收的控制信息來(lái)管理處理資源150的相關(guān)聯(lián)的控制器客戶端 120。下面更詳細(xì)地描述控制器客戶端120的功能和用途。每個(gè)處理資源150還具有用于通過(guò)系統(tǒng)互連160與控制器130進(jìn)行通信的相關(guān)聯(lián)的互連代理170?;ミB代理170為控制器客戶端120提供普通接口,該接口獨(dú)立于系統(tǒng)互連160上使用的基本互連協(xié)議,即,該接口提供了系統(tǒng)互連160上使用的通信協(xié)議與控制器客戶端120所使用的通信協(xié)議之間的協(xié)議翻譯。由于使用了互連代理170,本發(fā)明實(shí)施例的控制器客戶端120可以應(yīng)用于目前可用的任意系統(tǒng)互連協(xié)議。實(shí)際上,控制器客戶端120與控制器130進(jìn)行通信所通過(guò)的接口協(xié)議115可以與接口協(xié)議160中的任意一個(gè)或全部在物理上不同并且具有不同的特性,所述接口協(xié)議160被用來(lái)使得能夠在處理資源150和共享系統(tǒng)資源140(例如,系統(tǒng)存儲(chǔ)器)之間進(jìn)行通信。作為整體,多核處理器10被構(gòu)造用于執(zhí)行目標(biāo)應(yīng)用,該目標(biāo)應(yīng)用可以分為多個(gè)單獨(dú)的任務(wù)(稱為線程)。每個(gè)處理資源150都由控制器130分配了適當(dāng)?shù)木€程。該分配是根據(jù)多個(gè)參數(shù)來(lái)執(zhí)行的,這些參數(shù)包括但并不限于所關(guān)注線程的優(yōu)先級(jí)、每個(gè)處理資源150 的可用性以及特定處理資源150對(duì)于特定線程的執(zhí)行的適合性。
然而,應(yīng)該理解的是,添加控制器130及其專用存儲(chǔ)器190并不需要對(duì)處理器10 的布局進(jìn)行重新設(shè)計(jì)。圖3中示出了一種具體結(jié)構(gòu),圖3以框圖的形式示出了典型的片上系統(tǒng)(SoC)架構(gòu),并且示出了可能在實(shí)際應(yīng)用中被置于控制器130的控制之下的各種處理資源150。應(yīng)該注意,處理資源150實(shí)際上可以具有相對(duì)普通的能力,例如DSP,或者可以具有相對(duì)有限的功能,例如外圍10。圖4示出了控制器130及其相關(guān)聯(lián)的輸入接口組100、輸出接口組110,以及兩個(gè)雙向接口組160和180,每個(gè)組都位于控制器130的外圍。系統(tǒng)控制組102包括確??刂破?30的正確操作所需的各種信號(hào)。這些信號(hào)包括系統(tǒng)時(shí)鐘、實(shí)時(shí)時(shí)鐘和重置信號(hào)(RST)。來(lái)自控制器130的所有輸出信號(hào)對(duì)于系統(tǒng)時(shí)鐘都是同步的,盡管它們可能根據(jù)系統(tǒng)的需要而被重新同步為其他時(shí)鐘域。對(duì)于控制器130的所有輸入信號(hào)在處理之前對(duì)于系統(tǒng)時(shí)鐘都是同步的。RST輸入是用于重置控制器130的同步
重置信號(hào)。外部中斷組101由源自線程管理和分配系統(tǒng)外部的一組外部中斷構(gòu)成。外部中斷組101中的信號(hào)例如可以通過(guò)與外界的輸入接口來(lái)驅(qū)動(dòng),或者通過(guò)引腳直接從多核處理器的外部進(jìn)行驅(qū)動(dòng)。外部中斷輸入的數(shù)量可以在多核處理器10的設(shè)計(jì)階段來(lái)限定。內(nèi)部控制組111由針對(duì)每個(gè)控制器客戶端120及其相關(guān)聯(lián)的處理資源150的同步中斷構(gòu)成。因此,信號(hào)的數(shù)量通常與系統(tǒng)內(nèi)的處理資源150的數(shù)量相對(duì)應(yīng),并且將在多核處理器10的設(shè)計(jì)階段進(jìn)行限定。內(nèi)部中斷信號(hào)是表示線程準(zhǔn)備執(zhí)行的內(nèi)部線程就緒中斷信號(hào),并被分配給與該控制器客戶端120相關(guān)聯(lián)的特定處理資源150。調(diào)試接口組112由以下子組構(gòu)成1、輔助調(diào)試接口,其使得外部調(diào)試代理能夠?qū)刂破?30以及作為整體的系統(tǒng)進(jìn)行調(diào)試訪問(wèn)。通過(guò)該接口,可以內(nèi)部和外部地設(shè)定斷點(diǎn)和觀察點(diǎn),并且可以讀取系統(tǒng)狀態(tài)信肩、ο2、跟蹤緩沖器輸出,其是根據(jù)一組預(yù)先配置的過(guò)濾方針并在調(diào)試管理器400的最終控制下提供運(yùn)行時(shí)系統(tǒng)狀態(tài)的流式輸出。3、外部調(diào)試使能信號(hào),其可以按照它們自己的名稱(right)用作斷點(diǎn)信號(hào),或者可以與處理資源特定使能信號(hào)進(jìn)行組合。下面將更詳細(xì)地描述該特定格式、結(jié)構(gòu)和以上調(diào)試接口組的使用。緊密連接的存儲(chǔ)器接口組180將控制器130連接至其專用的緊密連接的存儲(chǔ)器資源 190。圖5示出了該專用的緊密連接的存儲(chǔ)器190的典型結(jié)構(gòu)。地址路徑和數(shù)據(jù)路徑的寬度在多核處理器10的設(shè)計(jì)階段進(jìn)行限定。專用的緊密連接的存儲(chǔ)器接口 180包括存儲(chǔ)器地址總線191、存儲(chǔ)器讀取數(shù)據(jù)總線192、存儲(chǔ)器寫入數(shù)據(jù)總線193以及寫入使能信號(hào)194 和讀取使能信號(hào)196。假定所附加的存儲(chǔ)器是同步SRAM設(shè)備。根據(jù)目標(biāo)應(yīng)用的需要,專用的緊密連接的存儲(chǔ)器190如在多核處理器10的設(shè)計(jì)階段所限定的,包含整數(shù)個(gè)控制器存儲(chǔ)器元件195。 在當(dāng)前優(yōu)選的實(shí)施例中,每個(gè)控制器存儲(chǔ)器元件195都消耗256位的存儲(chǔ)器空間。另外,在當(dāng)前優(yōu)選的實(shí)施例中,該控制器支持最多65536個(gè)控制器存儲(chǔ)器元件(即,16Mb存儲(chǔ)器)。盡管如稍后所述,隊(duì)列描述符消耗了控制器存儲(chǔ)器元件195,但是在典型系統(tǒng)中,所需的控制器存儲(chǔ)器元件195的數(shù)量將由線程支持要求來(lái)控制。例如,能夠在控制器130內(nèi)同時(shí)支持400個(gè)線程的系統(tǒng)將需要大約1 的附加存儲(chǔ)器。圖4的互連接口組160遵從所選擇的互連協(xié)議或者多核處理器10中使用的協(xié)議以及互連代理170,互連代理170是在多核處理器的設(shè)計(jì)階段限定的。在存在多個(gè)不同的互連結(jié)構(gòu)的情況下,互連接口組160可以由多個(gè)可能不同的接口構(gòu)成。在所示的實(shí)施例中,使用了總線接口。然而,應(yīng)該明白的是,如前面所提及的,同樣可以采用各種其他形式的接口??刂破髯訅K描沭和功能圖6示出了控制器130的主要邏輯組件。控制器130的功能被分為四個(gè)主要內(nèi)部并行處理子塊,分別執(zhí)行以下功能1、線程輸入管理器(TSIM)200,其被構(gòu)造用于維持專用的緊密連接的存儲(chǔ)器190 中的空閑控制器存儲(chǔ)器元件195的列表,并且檢查控制器存儲(chǔ)器元件195的恢復(fù)。2、線程同步管理器(TSPM)210,其被構(gòu)造用于根據(jù)需要維持在專用的緊密連接的存儲(chǔ)器190中的等候(pending)列表和定時(shí)器隊(duì)列,并在線程之間進(jìn)行同步,并將線程提升 (promotion)為在專用的緊密連接的存儲(chǔ)器190中的就緒隊(duì)列結(jié)構(gòu)。線程同步管理器210 通過(guò)在專用的緊密連接的存儲(chǔ)器190中插入或提取等候線程描述符來(lái)維持等候和定時(shí)器隊(duì)列結(jié)構(gòu)的完整性。3、線程輸出管理器(TS0M)220,其被構(gòu)造用于維持專用的緊密連接的存儲(chǔ)器190 中的就緒隊(duì)列結(jié)構(gòu),并維持在專用的緊密連接的存儲(chǔ)器190中的用于各個(gè)處理資源150的調(diào)度隊(duì)列(dispatch queue)。線程輸出管理器(TSOM) 220還被構(gòu)造用于生成被發(fā)送到控制器客戶端120的中斷110。就緒隊(duì)列結(jié)構(gòu)的完整性的維持是通過(guò)在專用的緊密連接的存儲(chǔ)器190中插入和提取保存在控制器存儲(chǔ)器元件195中的線程描述符來(lái)進(jìn)行的。4、線程調(diào)度管理器(TSSM) 230,其被構(gòu)造用于為設(shè)置在專用的緊密連接的存儲(chǔ)器 190中的就緒隊(duì)列結(jié)構(gòu)內(nèi)的各個(gè)處理資源150提供調(diào)度決定。另外,多個(gè)二級(jí)處理子塊提供了以下支持功能5、線程存儲(chǔ)器管理器(TSMM) M0,其被構(gòu)造用于提供對(duì)所附加的專用的緊密連接的存儲(chǔ)器190的集中訪問(wèn),包括互相排斥和鎖定。6、中斷管理器(TSIC) 250,其被構(gòu)造用于將輸入外部系統(tǒng)中斷轉(zhuǎn)換為內(nèi)部同步原語(yǔ)(primitive)。7、時(shí)間管理器(TSTC)沈0,其被構(gòu)造用于為每個(gè)處理資源150提供用于同步目的的定時(shí)器功能以及監(jiān)視定時(shí)器功能。8、系統(tǒng)接口(TSIF)觀0,其被構(gòu)造用于提供互連接口和構(gòu)造以及對(duì)多核處理資源 150和控制器130內(nèi)的各個(gè)子塊的運(yùn)行時(shí)訪問(wèn)。9、服務(wù)器墊片(shim) (TSSS)四0,其被構(gòu)造用于提供控制器130與多核處理資源 150之間的物理接口 115。以上列出的主要和二級(jí)子塊中的每一個(gè)還包括調(diào)試輸出,該調(diào)試輸出構(gòu)成調(diào)試接口 112的一部分,用于向本發(fā)明的調(diào)試控制器400通知在與該信號(hào)相對(duì)應(yīng)的各個(gè)子塊內(nèi)發(fā)生的事件。在命令可能通過(guò)特定條件完成的情況下,在子塊內(nèi)對(duì)狀態(tài)標(biāo)志進(jìn)行管理。總的來(lái)說(shuō),控制器130通過(guò)維持專用的控制器存儲(chǔ)器190內(nèi)的多個(gè)隊(duì)列結(jié)構(gòu)來(lái)管理線程。這些隊(duì)列結(jié)構(gòu)包括等候、就緒、定時(shí)器和調(diào)度隊(duì)列。在這些隊(duì)列中的一個(gè)或更多個(gè)中保存有正在等待執(zhí)行的線程,并在這些線程就緒時(shí)被將這些線程分配給適當(dāng)?shù)奶幚碣Y源 150。這些隊(duì)列中的線程的控制主要使用push(壓入)、pop (彈出)和sort (排序)操作來(lái)進(jìn)行。在共同未決的美國(guó)專利申請(qǐng)No. 10/308, 895中描述了控制器130的操作的全部細(xì)節(jié),在此通過(guò)引用并入其全部?jī)?nèi)容。下面是對(duì)控制器130內(nèi)的上述主要和二級(jí)處理子塊的交互的詳細(xì)描述。每個(gè)子塊都為其他子塊提供一組函數(shù)(function),使得每個(gè)子塊都能夠指示其同一層次的功能單元(peer)在專用的緊密連接的存儲(chǔ)器190內(nèi)對(duì)它們各自維持的結(jié)構(gòu)進(jìn)行控制。當(dāng)接收到在控制器軟件應(yīng)用程序接口(API)處接收的相似命令時(shí),由特定子塊來(lái)調(diào)用函數(shù)。線稈輸入管理器函數(shù)線程輸入管理器200為控制器130內(nèi)的其他子塊提供了三個(gè)公共函數(shù)。FreeListStatus函數(shù)返回控制器存儲(chǔ)器元件195空閑列表內(nèi)的頭指針和元素的數(shù)量。該空閑列表是當(dāng)前未使用的控制器存儲(chǔ)器元件195的列表。該函數(shù)僅可以由系統(tǒng)接口 280在控制器130軟件API處接收到相似命令時(shí)調(diào)用。PushFreeIndex函數(shù)用于將被釋放的控制器存儲(chǔ)器元件195的索引壓入回到空閑列表中。該函數(shù)僅可以由線程調(diào)度管理器230調(diào)用。PopFreeIndex函數(shù)用于從空閑列表中彈出空閑控制器存儲(chǔ)器元件195的索引。其通常在系統(tǒng)接口觀0內(nèi)的API調(diào)用服務(wù)例程中調(diào)用。線程同步管理器函數(shù)線程同步管理器210為控制器130內(nèi)的其他子塊提供了七個(gè)公共函數(shù)。以下五個(gè)函數(shù)僅可以由系統(tǒng)接口 280響應(yīng)于控制器130軟件API所接收的相似命令來(lái)調(diào)用。PushPendingDescriptor函數(shù)在啟動(dòng)過(guò)程中使用,以向等候隊(duì)列描述符的列表中添加等候隊(duì)列描述符。PushThread函數(shù)在運(yùn)行時(shí)使用,以向給定等候隊(duì)列中添加從屬線程。GetTimerStatus函數(shù)返回定時(shí)器隊(duì)列中的頭指針和元素的數(shù)量。ktTimei^tatus函數(shù)設(shè)定該定時(shí)器隊(duì)列中的頭指針和元素的數(shù)量。SetPendingStatus函數(shù)設(shè)定等候隊(duì)列描述符列表的狀態(tài)。GetPendingStatus函數(shù)返回等候描述符隊(duì)列中的頭指針和元素的數(shù)量。SyncEvent函數(shù)用于向給定的等候隊(duì)列發(fā)出同步原語(yǔ)。該函數(shù)由線程中斷管理器 250或系統(tǒng)接口 280調(diào)用。TimeEvent函數(shù)用于向定時(shí)器隊(duì)列發(fā)出基于定時(shí)器的同步原語(yǔ)。該函數(shù)僅由時(shí)間管理器260調(diào)用。線程輸出管理器函數(shù)線程輸出管理器220為控制器130內(nèi)的其他子塊提供了五個(gè)公共函數(shù)。Push函數(shù)將線程描述符設(shè)置在就緒隊(duì)列結(jié)構(gòu)中。該方法可以由系統(tǒng)接口 280或線程同步管理器210調(diào)用,并且其可以以高優(yōu)先級(jí)被調(diào)用從而提高處理速度(例如,處理中斷)。
在線程是獨(dú)立(剛剛就緒)的情況下,將從系統(tǒng)接口 280進(jìn)行調(diào)用,而在線程描述符最初具有依賴性時(shí),從線程同步管理器210進(jìn)行調(diào)用。以下函數(shù)僅可以由系統(tǒng)接口 280響應(yīng)于在控制器130的軟件API處接收到相似命令而調(diào)用。GetDispatchQueueStatus函數(shù)返回調(diào)度隊(duì)列列表內(nèi)的頭指針和元素的數(shù)量。SetDispatchQueueStatus函數(shù)設(shè)定調(diào)度隊(duì)列列表內(nèi)的頭指針和元素的數(shù)量。DispatchQueueSetMetrics函數(shù)設(shè)定當(dāng)前正在執(zhí)行的線程的量度(metrics),從而可以進(jìn)行所通知的占先決定。DispatchQueueEvent函數(shù)將調(diào)度事件從就緒隊(duì)列結(jié)構(gòu)傳播到由線程輸出管理器 (TSOM) 220管理的調(diào)度隊(duì)列。該函數(shù)僅由線程調(diào)度管理器(TSSM) 223調(diào)用。DispatchQueuePop函數(shù)從調(diào)度隊(duì)列的頭部中彈出線程描述符。DispatchfforkQueuePush函數(shù)將調(diào)度隊(duì)列壓入到線程輸出管理器220的工作隊(duì)列中。該函數(shù)僅可以由線程調(diào)度管理器230調(diào)用,線程調(diào)度管理器230利用該函數(shù)來(lái)通知輸出管理器220作為調(diào)度更新的結(jié)果的調(diào)度隊(duì)列內(nèi)所需的改變。線稈調(diào)度管理器函數(shù)線程調(diào)度管理器230為控制器130內(nèi)的線程輸出管理器220和系統(tǒng)接口 280提供了三個(gè)公共函數(shù)。PushPushfforkEvent函數(shù)由線程輸出管理器220在其將線程描述符添加到就緒隊(duì)列結(jié)構(gòu)中后立即調(diào)用。PushPopfforkEvent函數(shù)由線程輸出管理器220在其將線程描述符從就緒隊(duì)列結(jié)構(gòu)中去除后立即調(diào)用。FreeIndex函數(shù)使得控制器存儲(chǔ)器元件195的釋放能夠與線程調(diào)度管理器230內(nèi)的正在進(jìn)行的調(diào)度行為適當(dāng)?shù)赝???梢栽诳刂破?30的軟件API處接收到相似命令,或者作為線程輸出管理器220內(nèi)的pop操作的結(jié)果來(lái)發(fā)出該調(diào)用??刂破骺蛻舳巳缜八?,術(shù)語(yǔ)處理資源150適用于可以執(zhí)行指令的任意資源,而不管該指令可能會(huì)多么基本。因此,還包括了諸如輸入/輸出模塊的具有固定功能的資源。根據(jù)處理資源150的類型,系統(tǒng)互連160與處理資源50之間經(jīng)由控制器客戶端120的連接可以是單向的或雙向的。圖7示出了用于控制器130的控制器客戶端120的示例圖。對(duì)于適當(dāng)?shù)奶幚碣Y源150,例如通用處理器或數(shù)字信號(hào)處理器,控制器客戶端120 通常以軟件形式實(shí)現(xiàn)。然而,當(dāng)處理資源150功能有限時(shí),控制器客戶端120可能需要硬件組件。在系統(tǒng)互連160與處理資源150之間使用了硬件組件的情況下,控制器客戶端120 仍然使用相同的接口與處理資源150相連。也就是說(shuō),控制器客戶端120為互連代理170 提供了與處理資源150對(duì)控制器客戶端120相同的接口。在某些情況下,例如在輸入/輸出設(shè)備的情況下,將進(jìn)入處理資源150的數(shù)據(jù)路徑視為與離開處理資源150的數(shù)據(jù)路徑不同。除了主接口之外,控制器客戶端120還提供頻帶外接口(out of band interface)作為用于運(yùn)行時(shí)和調(diào)試事件的輸出。在使用軟件控制器客戶端120的情況下,使用標(biāo)準(zhǔn)中斷來(lái)提供這些接口,以調(diào)用適當(dāng)?shù)姆?wù)例程,或形成對(duì)處理資源150的特定調(diào)試和跟蹤單元151的輸入。控制器客戶端的操作樽式每個(gè)控制器客戶端120都被完全中斷驅(qū)動(dòng)。當(dāng)從控制器130接收到內(nèi)部中斷時(shí), 控制器客戶端120從與特定處理資源150相關(guān)聯(lián)的調(diào)度隊(duì)列的頭部中彈出線程描述符,該調(diào)度隊(duì)列保存在專用的緊密連接的存儲(chǔ)器190中。然后使用該線程描述符中的該唯一引用 (reference)從主存儲(chǔ)器資源140讀取進(jìn)一步的線程控制信息(線程控制塊(TCB))。該 TCB中所包含的信息可以是以下的任意一種1、控制器客戶端120的構(gòu)造內(nèi)容。該信息可用于構(gòu)造控制器客戶端120的系統(tǒng)資源使用監(jiān)控(policing)、地址或數(shù)據(jù)總線觸發(fā)器構(gòu)造(用于調(diào)試)、數(shù)據(jù)呈現(xiàn)模式等。2、處理資源150的構(gòu)造內(nèi)容。這是使處理資源150準(zhǔn)備執(zhí)行特定線程所需的信息。 其可以包括從該線程的之前的部分執(zhí)行或?qū)iT的硬件加速器(例如,音頻CODEC)的構(gòu)造中恢復(fù)。3、指令內(nèi)容。在固定功能硬件加速器的情況下,“指令”將在目標(biāo)硬件處理資源 150中暗示,例如在處理資源150是輸出模塊時(shí)的輸出指令,并且任意所需的特殊化或配置都將容納在配置信息中。在軟件控制器客戶端120的上下文中,這通常是對(duì)于與線程相關(guān)聯(lián)的函數(shù)代碼的指針。4、數(shù)據(jù)內(nèi)容。該內(nèi)容可以限定系統(tǒng)存儲(chǔ)器140中的起始地址或多個(gè)地址以及線程可以操作的數(shù)據(jù)的范圍。5、控制器客戶端120后處理內(nèi)容。該內(nèi)容確定了控制器客戶端120在完成線程執(zhí)行之后的動(dòng)作??刂破骺蛻舳?20的操作有三個(gè)不同階段。1、配置階段,其中準(zhǔn)備處理資源150和控制器客戶端120以執(zhí)行特定線程。在最簡(jiǎn)單的情況下,該配置階段為空。2、執(zhí)行階段,其中執(zhí)行線程,并且控制器客戶端120可以提供數(shù)據(jù)或監(jiān)測(cè)資源利用。3、完成階段。處理的完成可能導(dǎo)致無(wú)動(dòng)作、創(chuàng)建另一線程、發(fā)出同步原語(yǔ)、或者線程創(chuàng)建和同步的組合。此外,控制器客戶端120還可能需要設(shè)定或更新調(diào)度機(jī)的量度并終止線程。在執(zhí)行線程的過(guò)程中需要其他存儲(chǔ)器來(lái)存儲(chǔ)結(jié)果的情況下,控制器客戶端120還必須執(zhí)行該服務(wù)器方法。在各個(gè)硬件控制器客戶端120b在有效周期期間充分利用可用的系統(tǒng)互連160的帶寬的情況下,優(yōu)化方案將使得控制器客戶端120b能夠作為針對(duì)多個(gè)硬件處理資源150的代理來(lái)操作。圖7B中示出了這種結(jié)構(gòu)。與前面的情況相同,代理控制器客戶端120b被中斷驅(qū)動(dòng),然而,盡管在前面的示例中,僅從控制器130路由單個(gè)中斷,但是在代理控制器客戶端模型中,每個(gè)處理資源150都有中斷。根據(jù)從控制器130接收的中斷的索引,代理控制器客戶端120b對(duì)所識(shí)別的處理資源150執(zhí)行相同的步驟。在代理控制器客戶端模型中,如果需要系統(tǒng)互連160的使用監(jiān)控,則硬件適配器120c將保留在處理資源150和系統(tǒng)互連160 之間。
如前所述,控制器客戶端120可以實(shí)現(xiàn)為軟件。在此情況下,控制器客戶端120的某些功能(例如,共享資源使用監(jiān)控)通常會(huì)利用可能已經(jīng)存在于處理資源150硬件中的現(xiàn)有硬件組件(例如,存儲(chǔ)器管理單元(MMU))。結(jié)果,軟件控制器客戶端120架構(gòu)和實(shí)現(xiàn)對(duì)于處理資源150是部分特定的。根據(jù)相關(guān)處理資源150的特性,硬件控制器客戶端120可以還具有特殊要求。以下部分說(shuō)明了在大多數(shù)情況下適用的一般架構(gòu)。硬件控制器客戶端的一般示例圖8中示出了硬件控制器客戶端120的基本結(jié)構(gòu)。該設(shè)計(jì)的功能核心是控制器客戶端有限狀態(tài)機(jī)(FSM) 300。該有限狀態(tài)機(jī)(FSM) 300可以在所有三個(gè)階段中都有效??刂破骺蛻舳薋SM 300由來(lái)自控制器130的中斷111啟動(dòng)。首先,控制器客戶端FSM 300對(duì)系統(tǒng)互連160進(jìn)行管理,以從共享存儲(chǔ)器資源140 中讀取TCB,該TCB包含了對(duì)其本身指令的引用。在配置階段中,控制器客戶端120可以管理處理資源接口、解釋配置命令并將它們翻譯為發(fā)送至處理資源150的寫入循環(huán)。此外,控制器客戶端120對(duì)其自身的資源監(jiān)控進(jìn)行配置。從配置狀態(tài)過(guò)渡到執(zhí)行狀態(tài)的方式對(duì)于處理資源150是特定的,但是可以通過(guò)顯式執(zhí)行原語(yǔ)或僅通過(guò)進(jìn)入數(shù)據(jù)傳遞狀態(tài)來(lái)進(jìn)行標(biāo)記。從控制器客戶端120的角度可以看出,最簡(jiǎn)單的架構(gòu)對(duì)于處理資源150和系統(tǒng)側(cè)具有相同的接口協(xié)議。在此情況下,在執(zhí)行階段中,通過(guò)檢查適當(dāng)?shù)那闆r,將處理資源150 的讀取和寫入循環(huán)簡(jiǎn)單地映射到系統(tǒng)接口。最簡(jiǎn)單的控制器客戶端120的實(shí)現(xiàn)在系統(tǒng)到處理資源的路徑310和處理資源到系統(tǒng)的路徑320上都需要FIFO型接口。在具有該特性的控制器客戶端120的執(zhí)行階段中,可以通過(guò)消息模式或流模式將數(shù)據(jù)提供給處理資源150。消息模式(其中在處理之前,整個(gè)數(shù)據(jù)集本地累積在控制器客戶端120中)造成更粗放的可靠的(coarse grained blocky)互連行為,這便于更復(fù)雜的互連仲裁器。流模式(其中數(shù)據(jù)直接從系統(tǒng)存儲(chǔ)器140流傳輸?shù)教幚碣Y源150中)提供了硅效率更高的方案,該方案需要更仔細(xì)地考慮硬件握手,并且展示了精細(xì)互連交易和對(duì)互連性能的緊密結(jié)合。從執(zhí)行階段到完成階段的過(guò)渡可以通過(guò)測(cè)量對(duì)處理資源150的數(shù)據(jù)提供來(lái)推斷出,或者由處理資源150本身顯式地告知。在完成階段中,控制器客戶端120再一次根據(jù)原始線程控制塊所提供的指令集來(lái)執(zhí)行。注意,在某些情況下,適于將進(jìn)入處理資源150 (例如,輸入/輸出設(shè)備)的數(shù)據(jù)路徑和離開處理資源150的數(shù)據(jù)路徑視為不同。相比而言,在某些情況(例如,諸如DSP的算術(shù)加速器)下,將數(shù)據(jù)的消費(fèi)者和產(chǎn)生者結(jié)合在同一控制器客戶端120框架中是很自然的。為了提供處理資源150與其他系統(tǒng)資源之間的分離(decoupling)級(jí)別,還可以由控制器客戶端120提供多個(gè)附加功能(facility)a)可以針對(duì)由基本地址和偏移定義限定的預(yù)期行為,通過(guò)使用比較器330和比較地址寄存器340對(duì)處理資源150產(chǎn)生的地址進(jìn)行檢查。b)可以使用減法器350和偏移地址寄存器360對(duì)處理資源150產(chǎn)生的地址進(jìn)行偏移,使得處理資源150能夠?qū)τ谌我饨o定的線程具有歸一化的地址映射圖,通常為歸一化 il^FJ&tli (around address) 0x0。
c)在處理資源功能有限并且因此不包括其自身的指令級(jí)調(diào)試硬件的情況下,可以包括調(diào)試監(jiān)視寄存器。于是這種寄存器可用于監(jiān)測(cè)地址使用,使得其他缺少固定功能的硬件資源150能夠具有指令級(jí)的調(diào)試能力。對(duì)象控制器130中使用的數(shù)據(jù)類型的示例分為公共可見(可以通過(guò)系統(tǒng)詳盡地看到并控制)和私有可見(僅在控制器130內(nèi)可見,并僅受控制器130子塊的控制)。為了確保該設(shè)計(jì)在多端應(yīng)用上的可移植性,將所有線程、隊(duì)列和集合隊(duì)列的描述符存儲(chǔ)在使用公共基本類的專用的緊密連接的存儲(chǔ)器190、控制器存儲(chǔ)器元件195中。控制器存儲(chǔ)器元件每個(gè)控制器存儲(chǔ)器元件195都可以表示10種描述符類型中的任意一種1、空閑列表元素。該元素是空閑的,而可以由其他描述符類型中的任意一種使用。 無(wú)需用戶初始化或運(yùn)行時(shí)控制。2、線程描述符(TD)。這是表示應(yīng)用/管理線程的數(shù)據(jù)結(jié)構(gòu)。該描述符可能存在于專用的緊密連接的存儲(chǔ)器190內(nèi)的等候隊(duì)列、就緒隊(duì)列或調(diào)度隊(duì)列中。無(wú)需用戶初始化,但是需要運(yùn)行時(shí)控制。3、調(diào)度機(jī)根描述符(SRD)。這是調(diào)度機(jī)等級(jí)的最高級(jí)描述符。需要用戶初始化, 但是不需要運(yùn)行時(shí)控制。該根描述符沒有父描述符,但是子描述符可以是SSTD、DSTD或TD 中的任意一個(gè)。4、靜態(tài)調(diào)度機(jī)等級(jí)(Tier)描述符(SSTD)。這是靜態(tài)調(diào)度機(jī)等級(jí)描述符,其父描述符可以是SRD或另一 SSTD。SSTD的子描述符可以是另一 SSTD、DSTD或TD中的任意一個(gè)。5、動(dòng)態(tài)調(diào)度機(jī)等級(jí)描述符(DSTD)。這是動(dòng)態(tài)調(diào)度機(jī)等級(jí)描述符。不需要用戶初始化,但是需要運(yùn)行時(shí)控制。DSTD的父描述符可以是SRD或SSTD,但是DSTD可以僅具有TD 子描述符。6、調(diào)度隊(duì)列描述符。該類描述符描述了正在等待來(lái)自相關(guān)處理資源150的彈出操作的線程描述符的列表。需要用戶初始化,但是不需要運(yùn)行時(shí)控制。7、等候隊(duì)列描述符。該類描述符描述了正在等待同步事件的線程描述符的列表。 需要用戶初始化,但是不需要運(yùn)行時(shí)控制。8、池(pool)附接節(jié)點(diǎn)(PAN)。PAN用于將調(diào)度機(jī)根等級(jí)附接到處理資源150池根等級(jí)。需要用戶初始化,但是不需要運(yùn)行時(shí)控制。9、池靜態(tài)節(jié)點(diǎn)(PSN)。PSN用于將調(diào)度機(jī)根等級(jí)附接到處理資源150池根等級(jí)。需要用戶初始化,但是不需要運(yùn)行時(shí)控制。10、池根節(jié)點(diǎn)(PRN)。對(duì)于每個(gè)處理資源150池,存在單個(gè)PRN。需要用戶初始化, 但是不需要運(yùn)行時(shí)控制。圖9示出了線程描述符、控制器130、處理資源150和共享系統(tǒng)存儲(chǔ)器140之間的典型關(guān)系。每個(gè)線程原語(yǔ)都包含唯一的引用,pReference。該引用不能由控制器130解釋或修改。pReference提供了對(duì)于系統(tǒng)存儲(chǔ)器140中的限定了要執(zhí)行的任務(wù)的數(shù)據(jù)結(jié)構(gòu)的指針。通常這會(huì)是控制器客戶端控制塊125,并且將包含至少以下元素函數(shù)指針(在圖 9中被表示為處理資源指令塊14 、堆棧指針和變量指針(在圖9中一起被表示為數(shù)據(jù)塊 135)。
1
可以定義另外的字段,這些字段提供帶內(nèi)配置或共享系統(tǒng)資源的安全性。然而,根據(jù)應(yīng)用和/或目標(biāo)處理資源150,控制器客戶端控制塊125的復(fù)雜度會(huì)改變。特別要注意,可以包括其他間接級(jí)別,這些間接級(jí)別在給定適當(dāng)?shù)摹翱刂啤敝噶畲a和相應(yīng)的“數(shù)據(jù)路徑”代碼的情況下,可以使得完全不同的處理資源150能夠在特定環(huán)境下對(duì)相同數(shù)據(jù)執(zhí)行相同的功能。在這種情況下,與不同處理資源150所要求的特定指令流相對(duì)應(yīng)地存在針對(duì)各種類型的處理資源150的指針。允許不同處理資源執(zhí)行相同線程的能力還使得能夠?qū)Χ嗪思軜?gòu)內(nèi)的所有可用處理資源進(jìn)行載荷平衡。此外,可以將處理資源集中 (pool)在一起。處理器資源池使得能夠?qū)⑻囟ㄌ幚碣Y源150的實(shí)例集中在單個(gè)分配節(jié)點(diǎn)中。該分配節(jié)點(diǎn)于是可以對(duì)屬于特定處理資源池的各個(gè)處理資源150提供載荷平衡、智能占先和電
力管理。圖10和IOb示出了結(jié)合有根據(jù)本發(fā)明實(shí)施例的特征的調(diào)試系統(tǒng)框架的基本示意性布局。在圖10中,本發(fā)明提供了一種針對(duì)系統(tǒng)范圍調(diào)試控制的集中點(diǎn),而在圖IOb中,本發(fā)明按照與所有其他調(diào)試和跟蹤單元類似的方式連接至外部集中調(diào)試控制集合組件。通常,每個(gè)處理資源150都提供指令級(jí)調(diào)試和跟蹤單元151,以在指令級(jí)使用,或者等效地僅對(duì)于相關(guān)處理資源150是本地的。這些對(duì)于處理資源150是特定的,然而操作使用相同或相似的數(shù)據(jù)。廣義來(lái)講,調(diào)試的方法可以分為兩種靜態(tài)操作,其中系統(tǒng)在提取調(diào)試信息的過(guò)程中暫停;以及動(dòng)態(tài)操作,其中信息在運(yùn)行時(shí)被收集、監(jiān)測(cè)和分配。靜態(tài)操作包括除此之外的斷點(diǎn)和觀察點(diǎn)的設(shè)定配置、暫停和單步的管理、系統(tǒng)狀態(tài)和存儲(chǔ)器負(fù)載的快照、觀察和分析。動(dòng)態(tài)操作包括除此之外的處理器循環(huán)的監(jiān)測(cè)、高速緩存操作、處理器間通信和系統(tǒng)互連(例如,總線)事務(wù)。這種類型的監(jiān)測(cè)總稱為跟蹤,并且在系統(tǒng)行為的“概評(píng) (profiling)”中使用。動(dòng)態(tài)調(diào)試(或者跟蹤)信息通常由所嵌入系統(tǒng)的組件自主地生成。本地指令級(jí)調(diào)試和跟蹤單元151包含使得相關(guān)處理資源150內(nèi)的指令的處理在某種預(yù)定情況下暫停的嵌入“觸發(fā)器”邏輯,但是還可以用于發(fā)起或終止跟蹤信息的累積或者某些其他功能。觸發(fā)器通常是表示已經(jīng)觀察到預(yù)定“觸發(fā)器序列”的事件位。作為最低要求,這種觸發(fā)器邏輯通常包括在遇到給定指令時(shí)向本地處理資源150 發(fā)出中斷(觸發(fā)器)的斷點(diǎn)邏輯。包含在這些單元中的功能的量對(duì)于處理資源150是特定的,然而,如前所述,在需要的情況下,控制器客戶端120可以包括調(diào)試觀察寄存器,以提供最小級(jí)別的指令級(jí)調(diào)試和跟蹤能力。當(dāng)處理資源150功能有限(例如,專用音頻CODEC)時(shí)需要這樣。指令級(jí)調(diào)試和跟蹤單元151中的每一個(gè)都具有連接至調(diào)試訪問(wèn)端口 141的雙向接口 155和經(jīng)由一個(gè)或更多個(gè)可選的本地跟蹤緩沖器152、跟蹤集中點(diǎn)142和可選的統(tǒng)一跟蹤緩沖器143連接至跟蹤端口 144的跟蹤輸出接口 105。 調(diào)試訪問(wèn)端口 141使得外部“調(diào)試主機(jī)”能夠控制并訪問(wèn)調(diào)試進(jìn)程。通常,這些主機(jī)通過(guò)串行端口或者其他類似的低速連接接口協(xié)議進(jìn)行連接。 跟蹤端口 144向外部設(shè)備提供對(duì)跟蹤數(shù)據(jù)的訪問(wèn)。這使得對(duì)跟蹤數(shù)據(jù)的觀察可以作為軟件調(diào)試進(jìn)程的一部分出現(xiàn)。
可選的本地跟蹤緩沖器152和統(tǒng)一跟蹤緩沖器143用于在輸出之前臨時(shí)存儲(chǔ)跟蹤數(shù)據(jù)。這使得可以存儲(chǔ)系統(tǒng)的運(yùn)行“快照”,然后通過(guò)跟蹤端口 144隨后讀出。這樣,假設(shè)調(diào)試數(shù)據(jù)實(shí)時(shí)地輸出,則跟蹤端口 144不必具有所要求的潛在高傳輸速度。這就不需要(至少部分地)專用于調(diào)試數(shù)據(jù)輸出的大量輸出引腳。這是非常重要的,因?yàn)榕c功能邏輯本身的尺寸相反,目前可以裝配到任意特定集成電路(IC)小片(die)上的輸入/輸出焊盤的數(shù)量限制了 IC小片的尺寸。跟蹤集中點(diǎn)142僅用于將從本地調(diào)試和跟蹤單元151輸出的多個(gè)調(diào)試跟蹤流105 復(fù)用到單個(gè)輸出流中,以備存儲(chǔ)在統(tǒng)一跟蹤緩沖器143中,或者僅用于在沒有統(tǒng)一跟蹤緩沖器143的情況下通過(guò)跟蹤端口接口 144輸出。在圖10中,本發(fā)明的線程調(diào)試控制器400連接至本地調(diào)試和跟蹤單元151中的每一個(gè)。該線程調(diào)試控制器400還再次經(jīng)由一個(gè)或更多個(gè)可選的本地和統(tǒng)一的跟蹤緩沖器連接至控制器130、調(diào)試訪問(wèn)端口 141和跟蹤輸出端口 144。在圖10的調(diào)試框架中,控制器 130向各個(gè)DTU 151提供初始調(diào)試使能信號(hào)450,該控制器130建議了最初根據(jù)在控制器內(nèi)觀察到的事件得到的調(diào)試策略。在圖IOb中,指令級(jí)調(diào)試和跟蹤單元151中的每一個(gè)都從調(diào)試控制集中單元接收調(diào)試使能信號(hào),該信號(hào)作為對(duì)預(yù)定事件序列(可以包括本發(fā)明所生成的事件)進(jìn)行觀察的結(jié)果實(shí)現(xiàn)這種使能。圖IOb的框架使得能夠?qū)崿F(xiàn)可以由本地調(diào)試和跟蹤單元151或者本發(fā)明發(fā)起的調(diào)試策略。圖11示出了本發(fā)明實(shí)施例的線程調(diào)試控制器400的具體輸入和輸出。控制器130的子塊200至280中的每一個(gè)都具有用于將信號(hào)傳送到線程調(diào)試控制器400中的調(diào)試接口 410。當(dāng)這些子塊進(jìn)行交互以管理并在各個(gè)處理資源150之間分配各個(gè)線程時(shí),這些輸入信號(hào)將控制器130的相應(yīng)子塊的每一個(gè)中發(fā)生的事件通知給線程調(diào)試控制器400。該線程調(diào)試控制器400還可以對(duì)用于跟蹤和觸發(fā)器信息的子塊事件進(jìn)行過(guò)濾。控制器130的各個(gè)子塊內(nèi)的命令執(zhí)行導(dǎo)致向線程調(diào)試控制器400發(fā)送EventID字段和EventData字段。各個(gè)事件所相關(guān)的子塊由這些字段通過(guò)哪個(gè)接口發(fā)送來(lái)確定,因?yàn)槊總€(gè)子塊都具有其自身對(duì)于線程調(diào)試控制器400專用的接口 440。EventID字段可以由用戶來(lái)定義,因此長(zhǎng)度可以為N位,然而在本發(fā)明的優(yōu)選實(shí)施例中,EventID的長(zhǎng)度為4位。每個(gè)單獨(dú)的EventID字段都識(shí)別在特定子塊200到觀0中發(fā)生的各個(gè)事件。子塊內(nèi)可能發(fā)生的事件的示例包括將線程壓入到隊(duì)列中/從隊(duì)列中彈出線程、對(duì)控制器存儲(chǔ)器元件195的讀取/寫入訪問(wèn)、產(chǎn)生同步事件和在處理資源150與控制器130 之間提供低級(jí)通信形式的事件。在當(dāng)前優(yōu)選實(shí)施例中,伴隨每個(gè)EventID的EventData字段的長(zhǎng)度為32位。該字段包含了由當(dāng)前正在執(zhí)行的事件使用的主要數(shù)據(jù)。通常,其包含控制器存儲(chǔ)器元件195的 32位長(zhǎng)pReference字段,然而,它還可以包括多種其他數(shù)據(jù)類型中的任意一種,或者當(dāng)每個(gè)數(shù)據(jù)類型的長(zhǎng)度都小于32位時(shí),包含這些數(shù)據(jù)類型的組合。這些其他數(shù)據(jù)類型的示例包括控制器存儲(chǔ)器元件195索引、中斷掩碼、定時(shí)器值和子模塊ID。線程調(diào)試控制器400還具有時(shí)間接口 420。該接口提供32位時(shí)間表示,當(dāng)線程調(diào)試控制器400經(jīng)由子塊輸入接口 410從控制器130的各個(gè)單獨(dú)子塊接收到所有記錄的事件時(shí),線程調(diào)試控制器400使用該32位時(shí)間表示來(lái)對(duì)所有記錄的事件加上時(shí)間戳。
輔助調(diào)試接口 430是用于使得標(biāo)準(zhǔn)外部軟件調(diào)試及系統(tǒng)可視化和控制工具可以訪問(wèn)線程調(diào)試控制器400的雙向接口。這些外部軟件調(diào)試工具用于設(shè)定與系統(tǒng)初始化相關(guān)的調(diào)試參數(shù),并且采集和顯示所得到的跟蹤數(shù)據(jù)。所支持的接口的示例包括IEEE1149. 1 JTAG接口和能力更強(qiáng)的IEEE Nexus 5001 AUX端口接口。最初,旨在用于對(duì)芯片設(shè)備的邊界掃描的JTAG是基于包括串行鏈路和低速時(shí)鐘策略的4線接口的技術(shù),JTAG現(xiàn)在擴(kuò)展用于多核架構(gòu)中,以使得能夠?qū)?shù)據(jù)訪問(wèn)進(jìn)行調(diào)試。 由于其帶寬限制以及接口由調(diào)試主機(jī)通過(guò)低速串行鏈路來(lái)管理的事實(shí),JTAG的應(yīng)用通常限于靜態(tài)操作。然而,由于其相對(duì)廉價(jià)(在硅面積和芯片I/O方面)且易于實(shí)現(xiàn),所以JTAG 已經(jīng)成為用于芯片上調(diào)試(on-chip debug)的標(biāo)準(zhǔn)物理層。Nexus 5001 AUX端口接口提供了更豐富的一組調(diào)試能力,包括擴(kuò)展動(dòng)態(tài)動(dòng)作,例如對(duì)線程調(diào)試控制器400內(nèi)部的調(diào)試寄存器的動(dòng)態(tài)訪問(wèn)。跟蹤緩沖器接口 440被設(shè)計(jì)成利用了任意當(dāng)前可用的緩沖器技術(shù)。在該特定實(shí)施例中,跟蹤數(shù)據(jù)是通過(guò)簡(jiǎn)單的字節(jié)寬度的先進(jìn)先出接口輸出的。圖1 示出了字節(jié)寬度的接口及其相關(guān)控制信號(hào),而圖12b示出了形成這些數(shù)據(jù)并控制輸入/輸出的電信號(hào)的定時(shí)。 盡管示出了單字節(jié)寬度的接口,但是本領(lǐng)域技術(shù)人員應(yīng)該理解,本發(fā)明并不因此而范圍受限。再次參照?qǐng)D11,在圖10所描述的框架中,外部調(diào)試使能信號(hào)組450都是本地調(diào)試和跟蹤單元151使能信號(hào)。對(duì)多核架構(gòu)10內(nèi)存在的每個(gè)本地調(diào)試和跟蹤單元151設(shè)置了一個(gè)使能信號(hào),因此在設(shè)計(jì)階段設(shè)定了精確數(shù)量。這些信號(hào)中的每一個(gè)都可以在檢測(cè)到觸發(fā)器事件時(shí)使能特定的本地調(diào)試和跟蹤單元151。通過(guò)使用這種本地調(diào)試和跟蹤單元151 使能信號(hào),并且由于控制器130的操作的固有線程級(jí)抽象(abstraction),線程調(diào)試控制器400提供了可以利用本地指令(微觀架構(gòu))級(jí)別的本地調(diào)試和跟蹤單元151進(jìn)行門控 (gated)的線程(即,宏觀架構(gòu))級(jí)別調(diào)試能力。這為軟件工程師提供了基于粗放線程的調(diào)試和基于較精細(xì)指令的調(diào)試,從而便于調(diào)試過(guò)程,而無(wú)需引入另外的調(diào)試軟件,該另外的調(diào)試軟件會(huì)導(dǎo)致探針效應(yīng)。再次參照?qǐng)D11,在圖IOb所描述的框架中,外部調(diào)試使能信號(hào)組450是用于將所有本地調(diào)試和跟蹤單元151使能信號(hào)集中在調(diào)試控制集中塊中的使能信號(hào)。這種信號(hào)的精確數(shù)量是由系統(tǒng)設(shè)計(jì)者希望傳送至調(diào)試控制集中塊的離散事件的數(shù)量來(lái)確定的。于是,調(diào)試控制集中塊的責(zé)任就是過(guò)濾所有調(diào)試使能源并在檢測(cè)到觸發(fā)器事件時(shí)確定適當(dāng)?shù)谋镜卣{(diào)試和跟蹤單元151。如上所述,通過(guò)使用這種本地調(diào)試和跟蹤單元151使能信號(hào),并且由于控制器130的操作的固有線程級(jí)別抽象,線程調(diào)試控制器400提供了可以利用本地指令 (微觀架構(gòu))級(jí)別的本地調(diào)試和跟蹤單元151來(lái)進(jìn)行門控的線程(S卩,宏觀架構(gòu))級(jí)別調(diào)試能力。然而,在這種情況下,觸發(fā)器序列可以不由控制器發(fā)起。應(yīng)該注意,線程調(diào)試控制器400還為構(gòu)成任務(wù)分配控制器130的子塊提供了多種精細(xì)調(diào)試能力。下面將結(jié)合圖13對(duì)此進(jìn)行更加詳細(xì)的說(shuō)明。內(nèi)部調(diào)試使能信號(hào)組460包括由線程調(diào)試控制器400發(fā)送給構(gòu)成任務(wù)分配控制器 130的每個(gè)子塊(200480)的信號(hào)。這些信號(hào)用于根據(jù)線程調(diào)試控制器400的配置,使得線程調(diào)試控制器400能夠使每個(gè)子塊單步執(zhí)行其下一指令,或者使該子塊完全暫停。線程調(diào)試控制器中斷信號(hào)組470包括2個(gè)信號(hào)。它們使得對(duì)來(lái)自線程調(diào)試控制器
15400的中斷的反饋能夠回到控制器130。按照與對(duì)控制器130的所有其他外部中斷相同的方式處理這些中斷。這些信號(hào)的使用完全是可編程的,但是它們的應(yīng)用的典型示例包括對(duì)應(yīng)用中的需要關(guān)注的事件的統(tǒng)計(jì)的收集,以及特定處理資源150中的調(diào)試監(jiān)測(cè)線程的啟動(dòng)。TSIF系統(tǒng)接口 412使得可以在控制器130的接口管理子模塊280與線程調(diào)試控制器400之間進(jìn)行通信。該接口包括SubBlockCmd從輸入接口 490和GenericReg主輸出接口 480。TSIF子塊和位于多核處理器內(nèi)的所有處理資源150都可以通過(guò)SubBlockCmd從輸入接口 490訪問(wèn)線程調(diào)試控制器400,從而進(jìn)行正常和調(diào)試操作,例如,在運(yùn)行應(yīng)用時(shí)對(duì)調(diào)試參數(shù)進(jìn)行編程。同樣,可以允許線程調(diào)試控制器400通過(guò)GenericReg主輸出接口 480完全訪問(wèn)控制器130的所有內(nèi)部子塊。圖13示出了控制器130的每個(gè)子塊與線程調(diào)試控制器400之間連接的更詳細(xì)的圖。線程調(diào)試控制器400通過(guò)接口管理器(觀0)利用一般寄存器(GenericReg)接口 480 對(duì)控制器130的每個(gè)子塊內(nèi)的資源進(jìn)行訪問(wèn)。該接口還使得線程調(diào)試控制器400能夠獨(dú)立地對(duì)每個(gè)子塊進(jìn)行調(diào)試和執(zhí)行單個(gè)步驟。線程調(diào)試控制器400還提供了多種系統(tǒng)范圍的閉環(huán)調(diào)試能力。首先,中斷管理器 (TSIC) 250具有另外的線程調(diào)試控制器400反饋中斷470。線程調(diào)試控制器400使用這些中斷來(lái)表示被觀察的一組特定的用戶可定義事件已經(jīng)發(fā)生。該中斷隨后可用于使中斷管理器(TSIC) 250生成SyncEvent來(lái)釋放正在等待該特定SyncEvent的系統(tǒng)管理線程。這樣, 調(diào)試系統(tǒng)就可以在檢測(cè)到特定系統(tǒng)事件時(shí)觸發(fā)系統(tǒng)管理線程。其次,專用TSIF系統(tǒng)接口 280命令可以生成能夠保存32位數(shù)據(jù)的TSIF DebugEvent。隨后這些TSIF DebugEvent可用于創(chuàng)建事件,以例如表示處理狀態(tài)的改變,或者作為主機(jī)調(diào)試器和每個(gè)處理資源150之間的低比特率通信信道。圖14示出了線程調(diào)試控制器400的內(nèi)部功能實(shí)現(xiàn)。動(dòng)態(tài)調(diào)試接口 540用于對(duì)線程調(diào)試控制器400的動(dòng)態(tài)操作的細(xì)節(jié)(例如,線程調(diào)試控制器400要尋找什么系統(tǒng)管理和分配事件,以及當(dāng)觀察到特定事件時(shí)線程調(diào)試控制器 400要執(zhí)行什么動(dòng)作)進(jìn)行控制。靜態(tài)調(diào)試接口 530用于對(duì)線程調(diào)試控制器400的靜態(tài)操作的細(xì)節(jié)(例如靜態(tài)事件過(guò)濾器)進(jìn)行控制。SubBlockCmd接口 490使得控制器130的接口管理器280可以訪問(wèn)動(dòng)態(tài)調(diào)試接口 5400專門設(shè)計(jì)的復(fù)用器560僅使得可以從SubBlockCmd接口 490訪問(wèn)動(dòng)態(tài)調(diào)試接口 M0。 Nexus協(xié)議轉(zhuǎn)換器435將來(lái)自使用IEEE Nexus 5001協(xié)議標(biāo)準(zhǔn)的外部調(diào)試主機(jī)的信號(hào)轉(zhuǎn)換為適于控制線程調(diào)試控制器400的調(diào)試操作的內(nèi)部信號(hào)。這樣,轉(zhuǎn)換器435還提供了 Nexus 推薦寄存器的子集。允許外部調(diào)試主機(jī)經(jīng)由復(fù)用器560來(lái)訪問(wèn)動(dòng)態(tài)調(diào)試接口 540和靜態(tài)調(diào)試接口 530。還允許外部調(diào)試主機(jī)經(jīng)由接口管理器280 —般接口來(lái)訪問(wèn)控制器130的所有內(nèi)部子塊200-280。圖15示出了調(diào)試機(jī)500中的一個(gè)的邏輯圖。調(diào)試機(jī)500的數(shù)量是任意的,并且在設(shè)計(jì)時(shí)設(shè)定。調(diào)試機(jī)500提供了一種靈活且用戶可配置的設(shè)定多個(gè)斷點(diǎn)或觀察點(diǎn)、以及針對(duì)處理資源150的任意個(gè)體、池或任意組的復(fù)雜觸發(fā)器場(chǎng)景(scenario)的方法。作為觀察到出現(xiàn)觸發(fā)器場(chǎng)景的結(jié)果,一個(gè)或多個(gè)調(diào)試機(jī)500還可以使能/禁能內(nèi)部跟蹤記錄模塊和靜態(tài)事件過(guò)濾器600。每個(gè)調(diào)試機(jī)500都包括=EventWatchInst先進(jìn)先出(FIFO)寄存器510,用于存儲(chǔ)要由該調(diào)試機(jī)500監(jiān)視的事件;以及ActionListhst FIFO寄存器515,用于存儲(chǔ)在檢測(cè)到來(lái)自EventWatchInst FIFO 510的特定事件時(shí)要執(zhí)行的動(dòng)作。通過(guò)動(dòng)態(tài)調(diào)試接口 540使用這些寄存器各自的指令對(duì)這些寄存器進(jìn)行編程。每個(gè)調(diào)試機(jī)500還包括事件服務(wù)模塊520, 該事件服務(wù)模塊520獲取來(lái)自EventWatchInst和ActionLisWnst寄存器二者的輸出,并將它們與從控制器130的各個(gè)子塊輸入的系統(tǒng)管理和分配事件進(jìn)行比較。該事件服務(wù)模塊隨后輸出以下信號(hào)中的一個(gè)或更多個(gè)=DebugEnable信號(hào)450,用于使能相應(yīng)處理資源150 的本地調(diào)試和跟蹤單元151 ;TraceEnable/Disable 550,用于使得靜態(tài)事件過(guò)濾器600能夠(或不能夠)將跟蹤信息輸出給跟蹤緩沖器440 ;SynEnable信號(hào)555,用于控制與當(dāng)前調(diào)試機(jī)500連接在一起的其他調(diào)試機(jī)。調(diào)試機(jī)500還具有調(diào)試編程的來(lái)自動(dòng)態(tài)調(diào)試接口 MO 的輸入。圖16示出了此處描述的發(fā)明的具體實(shí)施例中的調(diào)試機(jī)500的物理實(shí)現(xiàn)。在該實(shí)施例中,EventWatcMnst FIFO 510a 和 ActionListInst FIFO 515a 實(shí)際上被實(shí)現(xiàn)為在所有調(diào)試機(jī)500之間共享的兩個(gè)指令寄存器文件。經(jīng)由讀取506和寫入505控制邏輯系統(tǒng)來(lái)訪問(wèn)這些作為邏輯上獨(dú)立的FIFO的統(tǒng)一的寄存器文件510a和515a。這種實(shí)現(xiàn)使得可以將針對(duì)每個(gè)調(diào)試機(jī)500的FIFO深度分別配置得適于用戶的特定實(shí)現(xiàn)。圖17示出了調(diào)試機(jī)500的連接能力。這提供了對(duì)多個(gè)復(fù)雜邏輯觸發(fā)器組合進(jìn)行編程的能力。使用調(diào)試機(jī)500的SyncEnable信號(hào)555來(lái)創(chuàng)建這些復(fù)雜觸發(fā)器組合。在所示的觸發(fā)器場(chǎng)景中,各個(gè)觸發(fā)器事件的單個(gè)序列之后必須是三個(gè)觸發(fā)器序列的組合,這三個(gè)觸發(fā)器序列的組合之后進(jìn)而必須是動(dòng)作被執(zhí)行之前的另一單個(gè)觸發(fā)器序列。由于提供了多個(gè)調(diào)試機(jī)500,所以可以同時(shí)評(píng)估組合觸發(fā)器關(guān)系。EventWatch指令用于捕獲來(lái)自控制器130內(nèi)的特定子塊200-280的單個(gè)事件??刂聘鱾€(gè)調(diào)試機(jī)500的有限狀態(tài)機(jī)(FSM)會(huì)查找EventWatch指令中指定的子塊事件,并執(zhí)行相關(guān)ActionList指令中限定的動(dòng)作(例如,斷點(diǎn)使能等)。每個(gè)EventWatch指令都為44位寬。有兩種主要類型的EventWatch指令單字和雙字 EventWatch 指令。雙字 EventWatch 指令為 88 位長(zhǎng),并占據(jù) EventWatcMnst FIF0510 內(nèi)的兩個(gè)條目。下面示出了這兩種類型單字EventWatch指令格式
權(quán)利要求
1.一種使用調(diào)試控制器(400)對(duì)多核處理器架構(gòu)中的線程執(zhí)行進(jìn)行監(jiān)測(cè)的方法,該多核處理器架構(gòu)包括處理器控制器;以及用于處理線程的多個(gè)互連的處理器單元(150),所述處理器控制器包括多個(gè)互連的單獨(dú)子單元,所述調(diào)試控制器包括監(jiān)測(cè)器邏輯單元,該監(jiān)測(cè)器邏輯單元包括多個(gè)調(diào)試機(jī)(500),該多個(gè)調(diào)試機(jī)與所述多個(gè)互連的處理器單元在邏輯上分離,該方法包括以下步驟在所述處理器控制器的所述多個(gè)子單元處,生成多個(gè)線程參數(shù)指示符,這些線程參數(shù)指示符表示與至少一個(gè)線程的功能和/或標(biāo)識(shí)和/或執(zhí)行位置有關(guān)的多個(gè)參數(shù);以及在所述多個(gè)調(diào)試機(jī)中的每一個(gè)處,在這些線程參數(shù)指示符中的至少一個(gè)與第一多個(gè)預(yù)定標(biāo)準(zhǔn)之間進(jìn)行第一比較,該第一多個(gè)預(yù)定標(biāo)準(zhǔn)中的每一個(gè)都代表了感興趣的指示符。
2.根據(jù)權(quán)利要求1所述的方法,該方法還包括以下步驟根據(jù)作為所述第一比較的結(jié)果而被識(shí)別為感興趣的線程參數(shù)指示符來(lái)生成輸出。
3.根據(jù)權(quán)利要求2所述的方法,其中,生成輸出的所述步驟包括生成用于控制所述多個(gè)互連的處理器單元(150)中的一個(gè)或更多個(gè)的控制信號(hào)。
4.根據(jù)權(quán)利要求3所述的方法,其中,所述互連的處理器單元還包括本地指令級(jí)調(diào)試邏輯單元,并且該方法還包括使得所述指令級(jí)調(diào)試邏輯單元能夠使用所述處理器單元控制信號(hào)。
5.根據(jù)權(quán)利要求2所述的方法,其中,生成輸出的所述步驟包括生成用于控制所述處理器控制器的所述單獨(dú)子單元中的一個(gè)或更多個(gè)的控制信號(hào)。
6.根據(jù)權(quán)利要求5所述的方法,其中,所述子單元控制信號(hào)包括使所述處理器控制器的所述子單元中的一個(gè)或更多個(gè)暫停的信號(hào)。
7.根據(jù)權(quán)利要求6所述的方法,其中,所述子單元控制信號(hào)包括用于使所述處理器控制器的所述子單元中的一個(gè)或更多個(gè)進(jìn)行到下一操作的信號(hào),該信號(hào)是在所述處理器單元 (150)之間管理和分配線程所需的。
8.根據(jù)權(quán)利要求2所述的方法,其中,生成輸出的所述步驟包括生成包括在所述第一比較之后出現(xiàn)的多個(gè)線程參數(shù)指示符的列表的輸出。
9.根據(jù)權(quán)利要求8所述的方法,其中,生成包括在所述第一比較之后出現(xiàn)的多個(gè)線程參數(shù)指示符的列表的輸出的所述步驟根據(jù)所述第一比較的結(jié)果而開始。
全文摘要
本發(fā)明提供了多核架構(gòu)中的調(diào)試。一種對(duì)多核處理器架構(gòu)內(nèi)的線程執(zhí)行進(jìn)行監(jiān)測(cè)的方法,該多核處理器架構(gòu)包括用于處理線程的多個(gè)互連的處理器單元,該方法包括接收多個(gè)線程參數(shù)指示符,這些線程參數(shù)指示符表示與一個(gè)或多個(gè)線程的功能和/或標(biāo)識(shí)和/或執(zhí)行位置有關(guān)的多個(gè)參數(shù);將這些線程參數(shù)指示符中的至少一個(gè)與第一多個(gè)預(yù)定標(biāo)準(zhǔn)進(jìn)行比較,該第一多個(gè)預(yù)定標(biāo)準(zhǔn)中的每一個(gè)都代表了感興趣的指示符;以及根據(jù)作為所述比較的結(jié)果而被識(shí)別為感興趣的線程參數(shù)指示符來(lái)生成輸出。
文檔編號(hào)G06F11/36GK102508781SQ20121000418
公開日2012年6月20日 申請(qǐng)日期2005年9月13日 優(yōu)先權(quán)日2004年9月14日
發(fā)明者阿耶溫·翁, 馬克·大衛(wèi)·李佩特 申請(qǐng)人:富士通半導(dǎo)體股份有限公司, 科威爾公司