探索內(nèi)存架構(gòu):處理性能的基石
處理器內(nèi)存子系統(tǒng)的系統(tǒng)級影響越來越重要,因為內(nèi)存類型和大小及系統(tǒng)中的存取方式規(guī)定了處理器內(nèi)核性能的上限。據(jù) ARM處理器部門的Gerard Williams III認為,理 想內(nèi)存系統(tǒng)的處理器必然要采用緩存,并有理想的存取總線的方式。芯片設(shè)計師必須首先了解處理器的IPC (每周期指令)能力,然后嘗試實現(xiàn)能將性能損失降到最低的內(nèi)存架構(gòu)。這種性能損失可能來自緩存或內(nèi)存存取影響,如由于容量損失、緩存大小或沖突失效形成的丟失率。
匹配良好的內(nèi)存子系統(tǒng)可以保持處理器的最大IPC 率,而匹配不好的內(nèi)存子系統(tǒng)會空置內(nèi)核的執(zhí)行單元,而大大地降低處理器的性能。雖然構(gòu)建與實現(xiàn)內(nèi)存子系統(tǒng)不會影響處理器內(nèi)核的性能,但還是具有很大的挑戰(zhàn)性,因為在處理器邏輯與內(nèi)存間存在的性能差異正隨著每次工藝技術(shù)的變化而逐步增大。實際上,內(nèi)存存取延遲的改進及每個工藝技術(shù)步驟接收內(nèi)存請求的時間都比處理器內(nèi)核邏輯的同量時鐘速率提高要少。
同樣,軟件開發(fā)人員通過有預見性地在內(nèi)存子系統(tǒng)中安置編程指令與數(shù)據(jù),可實現(xiàn)的最佳性能影響,就是保持處理器的最大IPC率。然而,在設(shè)備使用情況下,內(nèi)存子系統(tǒng)中匹配不當?shù)某绦蛑噶詈蛿?shù)據(jù),會極大地降低處理器的性能。Freescale關(guān)于防止M1存儲沖突的應(yīng)用注釋提供了一個范例,說明了由于存儲沖突會造成54% 處理器性能下降,開發(fā)人員可通過更好地安置數(shù)據(jù)緩沖器來避免發(fā)生這種情況(參考文獻1)。
一般而言,編譯器與仿真工具以全局的優(yōu)化對在內(nèi)存中放置指令和數(shù)據(jù)可提供有限的幫助。Green Hills的優(yōu)化編譯器支持內(nèi)存中的功能重新安排,以優(yōu)化緩存命中率。Texas Instruments的CodeSizeTune 基于仿真的編譯工具可幫助開發(fā)人員探索配置,采用影響代碼大小和執(zhí)行速度的不同的編譯器設(shè)置自動構(gòu)建和仿真不同版本軟件(圖1)。一般來說,對許多高效和實時約束系統(tǒng)來說,軟件開發(fā)人員的困難就是要了解內(nèi)存子系統(tǒng)以避免由于系統(tǒng)不能有效地使用處理與內(nèi)存資源,而承擔不必要的BOM (物料清單)成本。
延遲容差
在實現(xiàn)內(nèi)存架構(gòu)時最主要的擔心就是使處理器能夠?qū)ο到y(tǒng)使用的內(nèi)存的存取延遲實現(xiàn)容差。設(shè)計合理的內(nèi)存子系統(tǒng)可以掩藏系統(tǒng)多數(shù)的內(nèi)存存取延遲,并能提供足夠的讀/寫吞吐速率,即相同數(shù)據(jù)模塊中隨后發(fā)生的數(shù)據(jù)內(nèi)存存取時間,以支持連續(xù)存取。這種情況避免了空置處理器的執(zhí)行單位的指令和數(shù)據(jù)。內(nèi)存設(shè)計人員必須根據(jù)內(nèi)存的芯片面積、內(nèi)存消耗的總功率、軟件開發(fā)人員對內(nèi)存使用的方便性及工具等因素對內(nèi)存存取延遲進行權(quán)衡(參見附文1“方便使用”)。
內(nèi)存存取延遲的直接誘因為用來執(zhí)行地址解碼、激活適當字線、檢測位線及驅(qū)動檢測放大器輸出的時間。地址解碼延遲為鎖定地址,確定哪個字線需要激活的時間,此過程將O(n log n) 時間作為內(nèi)存行與列尋址大小的函數(shù)。因此,隨著內(nèi)存結(jié)構(gòu)的擴大,解碼與尋址所需的時間也相應(yīng)增加。字線激活延遲是字線上升所需的時間,主要是與線長相關(guān)的RC 延遲,線長越長則延遲越長。位線檢測延遲是檢測放大器檢測單元內(nèi)容所需的時間。位線架構(gòu)、檢測驅(qū)動線的RC、單元與位的容量比、及檢測放大器拓撲等都會影響位線檢測延遲。輸出驅(qū)動延遲是一種RC 延遲,驅(qū)動從檢測放大器到輸出端傳送數(shù)據(jù)的時間。
內(nèi)存與管理內(nèi)存的邏輯占用了許多基于處理器設(shè)備的芯片面積。結(jié)果,內(nèi)存可以是設(shè)備的芯片成本最大的部件,也是系統(tǒng)中消耗動態(tài)和靜態(tài)功率最大的部件。許多類型的易失與非易失內(nèi)存各有好壞,系統(tǒng)設(shè)計人員必須要兼顧并管理重要的參數(shù),以較低的成本和功耗來實現(xiàn)足夠好的內(nèi)存性能。
為了兼顧掩藏內(nèi)存存取延遲、芯片成本及功耗,基于處理器的設(shè)備通常都依賴一個多層內(nèi)存結(jié)構(gòu),將少量快速而昂貴的內(nèi)存靠近處理器內(nèi)核,而將大量慢速內(nèi)存遠離處理器內(nèi)核(圖2)。處理器寄存器是系統(tǒng)中最快且最難得的內(nèi)存資源,內(nèi)存體系還可以使用局部內(nèi)存或TCM(緊密耦合的內(nèi)存)、多階緩存、及易失性與非易失性片上內(nèi)存與片外內(nèi)存。
現(xiàn)代的優(yōu)化編譯器在管理使用處理器寄存器方面很合適,但在管理與優(yōu)化其它內(nèi)存上則較差。這種情況部分是由于利用本地查看程序代碼,優(yōu)化使用寄存器與戰(zhàn)術(shù)實施配合良好。為了在基于處理器的系統(tǒng)中優(yōu)化使用其它內(nèi)存結(jié)構(gòu),如TCM,需要更具全局性地查看系統(tǒng),此功能正出現(xiàn)在多數(shù)的編譯器中。
局部內(nèi)存或連接到處理器核的TCM通過局部或?qū)iT的內(nèi)存總線來存取類似于緩存的性能。內(nèi)存存取確定機制為TCM與緩存間的主要區(qū)別。人工暫時鎖定緩存線可在線級使能緩存,使其作為一個TCM。程序指令與通過TCM實施代碼存取具有確定的能力,但對于緩存,設(shè)計人員必須考慮緩存丟失的最壞情況?!皩τ诰彺鎭G失處理的典型經(jīng)驗法則是,存取延遲比前一級別增長一個數(shù)量級”Innovative Silicon的架構(gòu)總監(jiān)David Fisch 說?!癓2 內(nèi)存存取延遲是L1 緩存存取延遲的10 倍,而L3緩存存取延遲又是L2 內(nèi)存存取延遲的10倍?!笔褂肨CM將任務(wù)加給軟件開發(fā)人員手動的管理內(nèi)存空間,通常是使用DMA 控制器,以便在處理器 需要時,使必要的代碼和數(shù)據(jù)在TCM 中。
緩存由速度稍慢的內(nèi)存構(gòu)成來掩藏大量速度較慢內(nèi)存的延遲。較慢的內(nèi)存密度更大,所以也更便宜。緩存依賴暫存的空間局部區(qū)域來掩藏較慢內(nèi)存的存取延遲。“暫存局部性” 描述了這種區(qū)域特點:如果處理器請求一些數(shù)據(jù),那么,處理器很快又需要相同的數(shù)據(jù)。通過在存儲中保留數(shù)據(jù)復本,緩存可以避免數(shù)據(jù)進入較慢的內(nèi)存中?!翱臻g局部性” 描述了區(qū)域的另一種特性:即處理器請求在某個內(nèi)存位置的代碼,而下一處理器請求為下一內(nèi)存位置或與其相近位置的代碼。利用在初始取數(shù)同時預取靠近當前請求數(shù)據(jù)的一定量的數(shù)據(jù),緩存在其存儲中就可以有下幾個數(shù)據(jù)位置,而不會從較慢內(nèi)存中發(fā)生另一取數(shù)的延遲。
較大緩存通常意味著犧牲更多芯片面積而實現(xiàn)較少的緩存丟失。提高表示特定的內(nèi)存可存在于緩存中的位置數(shù)的緩存相關(guān)性,幾乎總能減少緩存丟失。緩存線長度可根據(jù)應(yīng)用的特性作正向或反向變化。Tensilica首席架構(gòu)師Bill Huffman告訴我們:“配置緩存是一項迭代任務(wù),它高度依賴可在處理器中執(zhí)行的應(yīng)用集?!?/P>
平衡各種緩存參數(shù)是一個復雜的過程,涉及到在芯片面積與丟失率間的取舍(圖3)。圖中列出了JPEG編碼應(yīng)用的緩存配置范圍:從負載丟失率為13.4% 的4k字節(jié)直接映射的16 字節(jié)線的配置,到負載丟失率為1.9%的32k字節(jié)、四路相關(guān)的64 字節(jié)線的配置(參考文獻2)。盡管緩存越大越好,但對32k字節(jié)緩存有優(yōu)勢收益遞減的趨勢。提高緩存線大小所具有的性能優(yōu)勢比緩存大小增加一倍所提高的性能更多,緩存線越長,芯片成本越小。盡管大緩存相關(guān)性越高越好,但在此例中,從兩路到四路相關(guān)性能產(chǎn)生的優(yōu)勢很少。簡而言之,對于配置緩存并沒有明確的經(jīng)驗法則。
決策驅(qū)動器
處理器內(nèi)核架構(gòu)為內(nèi)存架構(gòu)選項中設(shè)計人員的第一選擇。原因是設(shè)計人員構(gòu)建內(nèi)核時假定了內(nèi)存組件與內(nèi)核如何接口并對其如何補充。Von Neumann 和Harvard 架構(gòu)為兩種常見的處理器架構(gòu),分別模仿并實施不同的方法來查看和存取內(nèi)存。基于von Neumann 架構(gòu)模型的處理器將系統(tǒng)內(nèi)存建模成保存程序指令和數(shù)據(jù)的單一存儲結(jié)構(gòu),并有單一總線接口服務(wù)所有程序和數(shù)據(jù)存取。基于Harvard 架構(gòu)的處理器對系統(tǒng)內(nèi)存建模,程序指令和數(shù)據(jù)作為物理和邏輯分離存儲結(jié)構(gòu),以不同的總線接口,一個用于指令,另一個用于數(shù)據(jù)。Harvard 架構(gòu)支持同時存取程序指令與數(shù)據(jù),而von Neumann 架構(gòu)則不會。
為了選擇一個優(yōu)化的內(nèi)存設(shè)計 ,設(shè)計人員還必須了解應(yīng)用的特點和要求。對內(nèi)存設(shè)計的考慮有: 應(yīng)用的數(shù)據(jù)如何進出系統(tǒng),處理器能否直接加載數(shù)據(jù)或外部代理,DMA控制器能否將數(shù)據(jù)載入處理器的局部RAM中?同時也必須對輸出提出類似的問題:處理器會不會直接驅(qū)動輸出端口?或由外部代理,如DMA 控制器來驅(qū)動,能否將數(shù)據(jù)從處理器的局部RAM 傳輸?shù)絀/O 接口中?其它問題包括:什么是應(yīng)用的啟動過程?系統(tǒng)能否有效地利用特殊內(nèi)存接口?片上內(nèi)存資源能否容納所有的代碼與應(yīng)用數(shù)據(jù),還是僅能容納性能敏感的代碼與數(shù)據(jù)?
應(yīng)用啟動要求從何處存儲初始化代碼,以及系統(tǒng)通過什么接口進行存取。片上OTP(一次性可編程)ROM很小且具有較高的芯片密度,所以對于儲存啟動代碼非常有用。它支持快速啟動,因為在啟動后到開始執(zhí)行不需要等待時間。初始化代碼可能在閃存中的某個位置駐存并執(zhí)行,也可以存在于芯片外內(nèi)存中,也可映射到片上指令RAM中,這可造成系統(tǒng)啟動時間較長。如果應(yīng)用代碼和數(shù)據(jù)能駐存于片上內(nèi)存中,就沒有必要支持片外內(nèi)存接口。如果性能敏感的程序代碼可載入局部內(nèi)存中,設(shè)計人員就不需要實施緩存了。
設(shè)計人員可根據(jù)已知應(yīng)用的約束條件調(diào)整處理器,這些處理器僅包括應(yīng)用所需的隨機和非易失性內(nèi)存量。TCM的大小和參數(shù)、緩存或特殊內(nèi)存都是針對應(yīng)用而設(shè)計的。針對較寬應(yīng)用的處理器通常實施一個普通的內(nèi)存架構(gòu),這些架構(gòu)包括應(yīng)用的最大資源要求,以提供較少資源的各種設(shè)備來滿足較低的成本要求。對于采用類似處理器核架構(gòu)的系統(tǒng),內(nèi)存子系統(tǒng)成為更高級的驅(qū)動器,以提供系統(tǒng)可交付的處理性能、功耗及價格(參見附文2“多種選擇”)。
內(nèi)存控制器對所服務(wù)的內(nèi)存模塊的實現(xiàn)進行抽象處理,使其成為對處理器系統(tǒng)的數(shù)據(jù)管道。它們包含讀取內(nèi)存模塊所必須的邏輯,根據(jù)所服務(wù)內(nèi)存的類型,還包括寫入、刷新、測試與校正錯誤內(nèi)存等。對于片上內(nèi)存,內(nèi)存控制器能夠顯示公司的專有發(fā)明,它的處理器設(shè)備不同于競爭者的類似設(shè)備。結(jié)果,多數(shù)的處理器廠商不愿過于詳細地討論其內(nèi)存控制器。他們指出了一種用于內(nèi)存控制器的技術(shù),包括使用寬數(shù)據(jù)總線,多路復用或交錯式存取內(nèi)存庫、緩沖、流水線、交易記錄以及專門和不確定的存取模式等。
除了實現(xiàn)的內(nèi)存的特性外,影響內(nèi)存控制器設(shè)計和效率的系統(tǒng)級因素還包括物理尋址如何映射到內(nèi)部演示內(nèi)存系統(tǒng)上,尋址模式的類 型(如突發(fā)、隨機與并行存取模式)、混合讀寫、未使用的內(nèi)存如何進入低功耗模式。其主要的使用模型通常確定了內(nèi)存控制器的架構(gòu),以使圖形或多媒體控制器可優(yōu)化進行序列存取,而嵌入式通訊系統(tǒng)的內(nèi)存控制器可在較大的內(nèi)存范圍內(nèi)優(yōu)化隨機存取。對于有系統(tǒng)級可靠性要求的嵌入式內(nèi)存,針對額外的復雜性,內(nèi)存控制器可提供ECC(錯誤糾正代碼)保護。
內(nèi)存控制器的流量模式在單核處理器系統(tǒng)與多核處理系統(tǒng)之間有很大區(qū)別。單核系統(tǒng)的內(nèi)存處理器可使用一個數(shù)據(jù)流,但在多核心系統(tǒng)中的共享內(nèi)存,內(nèi)存控制器需要有處理多個數(shù)據(jù)流及隨機流量的能力。對于多核設(shè)計,內(nèi)存架構(gòu)必須支持快速及有效的信息傳遞,以及處理器間的數(shù)據(jù)共享。盡管不同的方法可實現(xiàn)這些目標,但沒有單一配置對所有類型的通信都有效??焖俚狞c對點通道及隊列,對交換短小且重要的信息非常重要,然而共享內(nèi)存對于共享較大的數(shù)據(jù)結(jié)構(gòu)更為有益。當使用共享內(nèi)存時,用戶需要對同步和內(nèi)存管理的編程支持。
隨著越來越多的嵌入式系統(tǒng)組合到多內(nèi)核作為設(shè)計的一部分,特別的異構(gòu)內(nèi)核,開發(fā)工具的發(fā)展會更好地協(xié)助開發(fā)人員從空間和時間上安置代碼和數(shù)據(jù),來實現(xiàn)更好的延遲容差,并使復雜性越來越高的設(shè)計發(fā)揮出最佳性能。開發(fā)工具必須可協(xié)助開發(fā)人員更好地了解系統(tǒng)的全局行為。并將該行為與系統(tǒng)中可用的內(nèi)存子系統(tǒng)進行匹配。否則,內(nèi)存和芯片設(shè)計人員必須繼續(xù)將更復雜的控制算法組合到內(nèi)存控制器中,以明確地補償軟件設(shè)計人員和開發(fā)工具對內(nèi)存系統(tǒng)的行為缺少可視性的缺點。
參考文獻
1. Schuchmann, David, “Tuning an Application to Prevent M1 Memory Contention,” Application Note AN3076, Freescale Semiconductor Inc, May 2006.
2. “How to Optimize SOC Performance Through Memory Tuning,” White Paper, Tensilica.
附文1:方便使用
編程的簡易性對軟件開發(fā)人員來說是一種十分重要的特性。可隱藏內(nèi)存體系的平坦的地址空間,便于開發(fā)人員進行編程。Microchip Technology數(shù)字信號控制器部門的技術(shù)人員Brian Boles 說,“一般來講,將應(yīng)用針對通用的內(nèi)存架構(gòu)而設(shè)計編譯器比較容易些?!币尵幾g器最佳地將代碼和數(shù)據(jù)分配到專用的內(nèi)存結(jié)構(gòu),而對應(yīng)用代碼的全局的動態(tài)特性沒有可視性是比較困難的。
對于操作系統(tǒng)的復雜應(yīng)用,如Linux,內(nèi)存架構(gòu)需要支持虛擬尋址。然而,使用大型操作系統(tǒng)滿足上市時間表壓力的開發(fā)人員來說,可能會失去對如何分隔軟件利用片上資源來節(jié)能和節(jié)省成本的深入考慮。沖突的某些問題是權(quán)衡與確定有多少片上內(nèi)存需要操作系統(tǒng)通過片上內(nèi)存運行,以及這種方法留給應(yīng)用的內(nèi)存數(shù)量?!暗侥壳盀橹?,通用操作系統(tǒng)沒有什么虛假的連接規(guī)定完整的物理到內(nèi)存系統(tǒng)的映射,促進基礎(chǔ)內(nèi)存系統(tǒng)最佳使用?!盜ntel嵌入式與通訊集團營銷經(jīng)理Phil Ames說?!叭欢?,在嵌入式設(shè)計中采用手動調(diào)整軟件,使內(nèi)存系統(tǒng)得到最佳使用是十分普遍的?!?BR>
管理各種不同類別的內(nèi)存需要專門的軟件。例如,小容量NAND閃存(528 字節(jié)/每頁)與大容量 NAND 閃存(2112 字節(jié)/每頁)通常需要不同的閃存管理軟件。一個解決這種情況的方法是將軟件設(shè)計成模塊化嵌入層中,以使軟件開發(fā)人員在必須修改時,盡量減少重寫量。Toshiba內(nèi)存產(chǎn)品集團的技術(shù)人員Doug Wong說:“NAND 閃存為最早的商品化內(nèi)存,將重要的智能特性加入內(nèi)存設(shè)備中,以使其更易使用。”Toshiba的LBA-NAND 與兼容eMMC的嵌入式NAND 中都含有可執(zhí)行NAND管理功能的內(nèi)置控制器,如模塊管理、損耗均衡、及邏輯到物理模塊的轉(zhuǎn)換及自動錯誤校正等。這種方法明顯地降低了系統(tǒng)架構(gòu)師或軟件工程師在對FFS(閃存文件系統(tǒng))或FTL(閃存轉(zhuǎn)換層)管理NAND閃存設(shè)備的負擔。
附文2:多種選擇
以下的范例使用基于ARM7的NXP LPC2129 處理器內(nèi)核,說明了某些處理器核架構(gòu)對內(nèi)存架構(gòu)可能的第一決策影響(圖A)。ARM7 為三級流水線von Neumann架構(gòu)機器,有一個端口通過AHB(高級高性能總線)橋連接到ARM 高性能總線。該橋是提供在處理器與外設(shè)頻率間同步的必要途徑。以容納處理器接口,或作為與多個主控設(shè)備總線的接口。盡管該橋非常必要,但當處理器通過AHB存取任何數(shù)據(jù)時,應(yīng)用一個雙時鐘延遲處理,如果地址超出序列,則應(yīng)用一個額外的性能處理。
一個放置程序和數(shù)據(jù)內(nèi)存的明顯位置是在AHB 一側(cè)的總線上,以便處理器可存取內(nèi)存,且外設(shè)可直接存取內(nèi)存數(shù)據(jù)。但是,AHB 橋還是應(yīng)用了兩周期的延遲處理。為了優(yōu)化 處理性能,設(shè)計人員將程序內(nèi)存放置在AHB橋的處理器的局部總線一側(cè)。盡管這種結(jié)構(gòu)提高了處理性能,但其它總線主控設(shè)備不能直接存取此內(nèi)存,迫使設(shè)計人員將更多的內(nèi)存放置在DMA 主控設(shè)備的AHB 一側(cè)。這種方法增加了舊工藝的成本,但在深亞微米工藝中,性能增加比成本增長更重要。
閃存比6T(6個三極管)SRAM 單元速度慢,但由于閃存具有非易失性、固態(tài)可靠性、較低的功耗及設(shè)計靈活性,所以在嵌入系統(tǒng)中使用閃存非常重要。在單一內(nèi)存類型內(nèi)的許多子體系結(jié)構(gòu)允許你調(diào)整架構(gòu)以滿足應(yīng)用的需求。這些需求包括存取速度、編程速度、讀電壓功耗水平及成本等。其它對閃存的重要考慮有,使用年限及支持的擦除次數(shù)。
嵌入式閃存的隨機存取速度約為50 ns、商業(yè)閃存約85 ns,在針對速度超過100 MHz的處理器時就會出現(xiàn)問題。然而,因為存取嵌入式閃存并不受針腳限制,嵌入式閃存子系統(tǒng)可使用帶有某些接口邏輯的較寬的位寬來提高性能。在此例中,128 位的寬度允許系統(tǒng)同時存取四個處理器數(shù)據(jù)字,該數(shù)據(jù)字為線性碼提供了80 MHz 的有效存取頻率。將以可緩沖邏輯四字的存取與讀取結(jié)合,在以閃存執(zhí)行時,可允許分支預測實現(xiàn)可接受的性能。這種方法實現(xiàn)了更為節(jié)省成本和功耗的SRAM 或閃存作為本地內(nèi)存以隨機存取數(shù)據(jù),多數(shù)為程序代碼的線性存取,而不僅是SRAM 實現(xiàn)。
有多種選擇可以實現(xiàn)總線架構(gòu)來支持高帶寬外設(shè)。一種是使用多層總線,它是一種矩陣,允許多個主控設(shè)備以不同方式存取內(nèi)存資源。另一種方法是設(shè)計一個AHB至AHB 橋,這樣就有兩個或更多的獨立總線。由于局部內(nèi)存SRAM 并不支持DMA,不論選擇哪種方法,任何高帶寬外設(shè)(如以太網(wǎng)或USB)都應(yīng)有專門的內(nèi)存資源可直接存取內(nèi)存。所存儲的數(shù)據(jù)包和幀的數(shù)量、數(shù)據(jù)速率及處理器速度決定著專用內(nèi)存的大小。
評論