a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > EDA/PCB > 設計應用 > 多內核和多線程SoC帶來新的調試挑戰

多內核和多線程SoC帶來新的調試挑戰

——
作者:MIPS 公司高級軟件工程師 Earl Mitchell 時間:2007-02-12 來源:電子產品世界 收藏

2005 年, MIPS收購了 FS2,滿足客戶有關調試支持要求 FS2 作為MIPS 科技的一個部門其先的系統級測試、調試和跟蹤能力。FS2的在線儀技術為內部工作提供深入系統級可視性這是保證設計成功和加快上市時間的關鍵。兩公司合開發了 PDtrace?(程序和數據蹤)和蹤,用于MIPS32 4KE24K24KE以及最新的 34K 處理器系列。除了 PDtrace 技術,FS2為開發及調試提供系統導航( System Navigator)。FS2還為先處理器總線系統級分析IP 和工具。

有經驗的開發人員都知道,好的工具支持對于嵌入式產品的實現、調試和維護的成功至關重要。 設計對好的工具支持提出了一系列重要的挑戰。一些問題可以歸結為 設計中使用的元件的可存取性及可視性的本質上的下降;另一些則是因為軟硬件不斷增加的復雜性。尤其是,SoC 設計中更多使用的并發將帶來現有工具無法進行調試的問題。這些并發技術并不新,但是在大多數情況下,相對于臺式和企業(超級計算)產品來說,并發技術在嵌入式設計中的應用一直十分有限。

開發人員需要及早了解設計過程中的類似問題,以保證他們擁有足以應對產品開發后期出現的這些挑戰的工具。基于 SoC 的設計主要依賴于片上調試支持。大多數處理器內核廠商都不自行開發工具。不過,他們仍需提供必要的片上調試支持,以推動這類調試工具的發展。SoC 設計中的并發用來增加各種多媒體、網絡和通信產品的性能及可擴展性。多任務處理和是通過 CPU 分時來模擬并發的技術。分時由一個管理多任務或之間上下文轉換的調度程序進行控制。進程、任務和線程三個術語有時可以通用,其實三者之間有著細微的區別。任務是可以暫停或重新開始的一連串指令。多任務可以或不可以共享同一個地址空間(即可進入其他任務的文本、數據和整個區域)。一個任務的狀態由其上下文表示,它可以“快照(Snapshot)”處理器狀態。

快照可記錄程序計數器、堆棧相關的寄存器、各種通用寄存器,以及一些與特權模式和異常處理有關的特定內核寄存器。調度程序利用上下文記錄延緩和進行任務恢復。單線程是任務的一種實例模式,線程組是相同任務的多實例模式。同組線程共享相同的程序空間和上下文狀態。利用線程的優勢在于調度程序能夠使用一個線程組內的共享上下文更快地執行該組的上下文轉換。也就是說,在線程組內的上下文之間進行轉換時,調度程序不必占用很多寄存器。某些RTOS廠商僅支持任務模型,而另一些則支持線程模型。

一個進程是運行于一個操作系統的任務,后者采用MMU以防止其他任務進入存儲區域。運行于這種操作系統上的線程稱為輕量級進程,而且它可以共享虛擬地址空間。輕量級進程可釋放存儲器保護限制,其行為更像任務。例如,調度程序能夠利用共享程序空間,通過將信息傳送給指示器而非復制全部信息來加速進程間通信。而且,共享程序空間可更有效利用存儲器并提高高速緩存的命中率。這種進程模型是Linux等“全功能”OS采用的模式,它是嵌入式應用的普遍選擇。某些像Java這樣的平臺可提供其自身應用水平的線程調度程序,但這些平臺可以簡單地將應用線程映射到OS水平的任務或線程。

圖1 采用并發多級設計的典型SoC

用于硬件設計的并發技術通過多指令流水線增強性能,從而可減少共享資源的閑置周期(如流水線、總線等),并通過分配處理負載。通常,增加更可比減少時鐘頻率獲得更多的處理能力。SoC包括通用CPU、DSP和專用內核的組合。某些內核可提供多線程支持以增加CPU的利用率,并提高上下文轉換的性能。

內核廠商正在用兩類多線程微處理器架構進行實驗。第一種是為以多虛擬處理器單元而非物理處理器形式出現的OS提供的額外邏輯。這種想法可在當前的線程運行時,利用第二線程實現閑置單元的利用。第二種類型是在當前的線程停止時,通過發出來自不同線程的指令,使用內部調度算法來減少閑置流水線周期。問題在于選擇新線程進行轉換時,應該采用什么標準?為避免QoS問題,需要采用基于優先權的方法,而且它必須可以由OS調度程序控制。

任何調試的目的都是找出問題所在。為發現多任務處理、多線程、多內核系統的問題,調試人員必須明確任務和線程意識,以幫助開發人員是甄別出哪種問題是由線程執行引起的。他們也要具有并發的執行控制能力和大量的跟蹤信息。所有這些功能都需要片上支持來實現。

任務和線程意識

某些調試器具備足夠的智能,可以訪問存儲器OS核的數據結構,或者利用由OS提供的API找回任務線程狀態信息。這種方法限于特定 OS的情況,在執行暫停時,它只能訪問狀態信息。任務和線程意識非常必要,這樣才能支持特定線程和特定任務的斷點。大多數具備線程支持(如GDB)的調試器都采用“全或非”的方法。也就是說,當特定線程斷點被觸發時,其整個線程組都會延緩執行。在選擇線程暫停時,這將避免出現共享數據變化的問題。當執行繼續時,它可重新啟動組內所有線程。緊接組中其他線程的所選線程的單步執行需要OS的支持。要停止特定線程斷點的內核是困難的,因為線程組共享一套相同的指令。一個指令斷點將引發組內執行相同指令的內核停止所有線程的執行。為了停止特定線程,調試器需要重啟斷點停止的線程。該內核會提供更復雜的斷點,它可以觸發特定任務或線程的指令地址。例如,當OS調度程序執行上下文轉換時,它可以更改寄存器,以辨別哪個任務或線程是活躍的。某些調試器可通過活躍的虛擬地址執行特定進程斷點。但是這對共享地址空間的任務和線程不起作用。

在指令跟蹤日志中集成更多任務和線程意識非常有益(見圖2)。跟蹤日志只顯示哪個指令在某個點的及時執行情況。沒有與跟蹤幀(trace frames)關聯的任務id或線程id。而且,如果OS調度程序通知內核現在哪個任務或線程對上下文轉換是活躍的,那么跟蹤塊就可能訪問該信息,并在跟蹤日志中記錄。通常,唯一可選擇的方法是利用侵入式而不必提供組裝級跟蹤信息的儀器技術。

圖2 三個線程執行相同片段的代碼

調試并發的編程問題

大多數并發的編程問題可以歸結為共享資源訪問缺乏適當的同步(如:CPU和總線周期、存儲器和其他器件)。問題的表現形式是數據毀損、競態條件、死鎖、停頓和資源耗盡。這些問題的發生通常都是不可預知的,也是難以復制的。比如,以相同的輸入執行相同代碼可產生不同的結果,或在不同的完成時間產生相同的結果。這些是對傳統的源代碼調試技術的挑戰,例如“通過代碼單步執行”,這是極具侵入性且專注于單線程執行的技術。

結果,可以解決這類問題的最常見的解決方案是“使用printfs”或基于事件日志技術的軟件方法。工具廠商聲稱,他們的儀器技術可增加大約2-5%的系統開銷。在大多數情況下,這些技術是足夠的,系統開銷也是可接受的。但是,高度優化的架構代碼儀器技術對流水線、高速緩存行為做出了不可接受的改變,而且增加了更多非確定性的副作用。不幸的是,隨著SoC設計在處理速度和并發程度方面的繼續增加,這種情況變得越發普遍。可供選擇的方法是采用非侵入式實時跟蹤調試技術。此外,在跟蹤調試技術中增加上下文轉換事件以確定哪個任務或線程是活躍的方法也非常有用。
采用并發技術的目的是增加資源利用率(即減少閑置周期),需要利用由內核提供的不同的計數器和統計表(如高速緩存命中/未命中、CPU/流水線停頓)來測量這些技術的有效性。

多線程內核的調試

大多數開發人員已經意識到多內核可存取性的問題,并利用JTAG掃描鏈接提供探測器訪問所有內核。同樣,工具廠商也在修改其IDE以支持多個異型內核的并發調試,因此工程師不必再使用多個調試器。為解決與多內核有關的同步問題,我們需要并發執行控制。例如,如果內核提供可以通知其他內核停止的外部引腳,就可以執行多于一個所選內核的同步斷點的停止。當一個內核發生斷點時,它將通知該引腳停止其他內核。這時調試器試圖通過JTAG接口發出停止命令,仿真同步斷點。但是,這又會產生嚴重的延遲問題。

多內核對跟蹤支持是新的挑戰。理想的情況是,每個內核都希望有一個片上跟蹤緩沖器。不幸的是,這也許代價太高,而且如果是異型內核或以不同時鐘頻率運行,那么相關的跟蹤轉儲就比較麻煩。相關的跟蹤轉儲對調試SMP等架構很有用。該架構中的一個內核能夠由另外等待共享資源的內核來停止。但是相關性需要普通的時基或參考點。普通時基可以通過一個內核定期向其他內核發送的信號復位(同步)內部計數器來實現。另一種選擇是,單芯片跟蹤緩沖器可以與內核或探測器內部的一個離線跟蹤緩沖器共享(見圖3)。在后者的情況下,探測器能夠為時戳提供時基。

圖3 跟蹤捕捉的可能性配置

結語

我們已經看到,如何通過增加片上支持來實現更先進的并發調試功能。那么,為什么如今有這么多SoC以很少或沒有片上支持來生產呢?答案是成本和上市時間的壓力。片上調試支持來之不易。它可增加成本和芯片的復雜性。為解決這些問題,現在一些廠商以IP塊的形式提供片上調試支持。最終,制造成本將會下降,利用內部調試支持生產芯片將變得更為實際。目前,開發人員必須通過采用像儀器這樣的調試技術。但是,隨著SoC設計的復雜性和性能的增加,這些技術最終將變得太富于侵入性。結果是,隨著OS調度程序以硬件方式提供的上下文轉換支持,調試支持將越來越多地從軟件轉移到硬件,而硬件將變得更具有任務和線程意識。



評論


相關推薦

技術專區

關閉