1、引言
當代計算機系統越來越受存儲性能的限制。處理器性能每年以60%的速率增長,存儲器芯片每年僅僅增加10%的帶寬,本文就如何設計一種符合當代DRAM結構的高效存儲器控制器進行研究。
本文第二部分介紹當代DRAM結構特點;第三部分介紹存儲器控制器結構以及調度算法;第四部分介紹模擬環境以及性能表現。
2、當代DRAM結構
為了提高存儲器的性能,存儲器控制器的設計必須充分利用當代DRAM的特點。DRAM是3D的存儲器(體行列),每個體獨立于其他體操作并且一次存取整行。當存儲陣列的一行被存取(行激活),存儲陣列的整行被傳輸到這個體的行緩沖。當一行在行緩沖中處于激活態,任何的讀寫(列存取)可以執行。當完成所有可利用的列存取,被緩沖的行必須依靠外在的操作(體預充電)寫回存儲陣列,為后來的行激活操作做準備。
存儲器存取調度者必須滿足DRAM時序和資源限制。共享的地址和數據線資源使存取串行化到不同的DRAM體,但是每個體的狀態機是獨立的。因此,調度者必須仲裁要使用單一資源的預充電、行、列操作。要充分利用存儲帶寬,必須每次行激活下有足夠的列存取并且隱藏其他體的預充電/激活延遲。
3、存儲器控制器結構及調度算法
存儲器存取調度是排序DRAM操作(體預充電,行激活,列存取)完成當前掛起的存儲器存取的過程。操作表示一個命令(如行激活、列存取),被存儲器控制器發射到DRAM。訪問表示由處理器產生的存儲器訪問(如讀訪問或者寫訪問)。一個訪問產生一個或者多個存儲器操作。
圖1.存儲器控制器結構
圖1顯示采用存取調度算法的控制器結構。每個體有預充電管理器,行仲裁器。預充電管理器決定什么時候對與他相關的體預充電。每個體的行仲裁器決定哪一行被激活。列仲裁器被所有體共享,授權共享的數據線資源給來自所有掛起的訪問的列存取。最后,預充電管理器、行仲裁器、列仲裁器發射選擇的操作給單一的地址仲裁器,地址仲裁器授予共享地址資源給一個或者多個操作。
預充電管理器,行仲裁器,列仲裁器可以使用多個不同的策略選擇DRAM操作。由于地址線資源的是共享的,地址仲裁器策略決定哪個預充電、激活、列操作被執行。跟其他調度策略一樣,按序或者優先權策略可用來作為地址仲裁器策略。列優先調度策略可以減少到激活行的訪問延遲,然而預充電優先或者行優先調度策略會增加體并行性。
下面介紹幾種預充電管理器,行仲裁器,列仲裁器可能使用的調度策略:
In order:DRAM操作只會執行最早請求掛起的訪問;
Ordered:越老的訪問優先級越高;
Open:只有在其他行有掛起的訪問而激活行沒有掛起的訪問才進行體預充電。當有顯著的行局部性使得后來的訪問命中前面訪問的行,Open策略應該采用;
Closed:只要激活行沒有掛起的訪問體就預充電。后來的訪問不太會命中前面訪問的行,closed策略應該采用。
4、控制器性能表現
傳輸帶寬而不是訪問延遲驅動流處理器性能。因此流媒體處理系統是首要的需要存儲器存取調度。為了評價存儲器存取調度對于媒體處理器的性能影響,通過模擬運行典型的基準程序。
4.1模擬環境及基準
Imagine流存儲系統包括2個地址產生器,4個交叉存儲體控制器,2個記錄緩沖按正確順序放置流數據在SRF。所有這些單元在同一芯片Imagine處理器核中。地址產生器支持3種地址模式:常量跨步,間接尋址,位翻轉。地址產生器可以產生任何長度的存儲器訪問流,只要數據適合SRF。對于跨步訪問,地址產生器利用基址、跨步、長度,連續的地址依照基地址增加跨步常量。對于間接尋址,基地址加上來自SRF的變址計算地址。實驗運行在一組微基準上,如表1。
表1. 基準
4.2性能表現分析
存儲器控制器以執行沒有重排序作為性能比較的基礎。即控制器使用按序策略:列存取只執行最早掛起的訪問。如圖2黑色的條狀代表按序策略性能。unit load取得DRAM峰值帶寬(2GB/s)的97%,3%的開銷是有時預充電/激活延遲;unit load到unit持續帶寬14%的下降是因為讀和寫交叉,讀訪問和寫訪問轉換需要1周期的數據引腳高阻態;unit conflict由于體內行來回交換使得帶寬下降到峰值得51%;random只有unit load 的15%帶寬,因為存取一個字需要7 DRAM周期。
4.3.1 簡單調度
簡單的First-ready存取調度策略平均提高25%性能。First-ready調度采用ordered優先,如表1,來決定所有的調度。First-ready調度者考慮所有的掛起訪問并且為不違反時序和資源限制的最早掛起的訪問調度1個DRAM操作。這個調度算法最明顯的好處就是當等待為了最早掛起訪問的預充電或者激活操作時,可以同時對其他體進行存取,DRAM內部多體并行。
圖2. 按序和first-ready存取調度下的存儲器帶寬
圖2,first-ready調度算法比按序在微基準最多增加性能79%。unit load提高較小;Random提高125%,因為他們能夠顯著提高每次行激活列存取的數量。
4.3.2 復雜調度
更加具有挑戰性的調度算法能夠進一步提高性能,這部分將研究4種調度算法進一步提高存儲器帶寬。如圖3,包含random的基準偏向關預充電策略,這種策略只要激活行沒有掛起訪問就進行體預充電。對于大部分其他基準,開和關預充電策略相差甚微。除了Unit load用col/closed算法表現差,其他基準都有較大性能提高。
圖3.各種存取調度算法情況下的存儲器帶寬
5、結論
本文創新點:存儲器存取調度大大地增加了DRAM存取帶寬的利用,緩沖存儲器訪問命令,按照某個順序選擇執行,既有體間并行又最大化利用每個行命令的列存取數量,使得系統性能提高。在大部分基準下,關閉頁調度策略是有利的。這部分地因為DRAM有合并最后列存取請求的體預充電的能力。調度算法是否行優先或者列優先在性能上差異較小。最后,調度讀優先于寫可提高性能。存儲器存取調度是最大利用日益寶貴的存儲器帶寬資源的重要技術。