用于利用存儲命令的系統(tǒng)和方法
【專利摘要】描述了用于使用存儲命令的系統(tǒng)和方法。所述系統(tǒng)包括存儲控制器。所述存儲控制器接收多個用戶事務(wù)。所述存儲控制器將每個用戶事務(wù)轉(zhuǎn)換成一個或更多個讀取存儲命令或?qū)懭氪鎯γ睢T谙虼鎯ρb置發(fā)送存儲命令之前,所述存儲控制器對與多個用戶事務(wù)相關(guān)聯(lián)的存儲命令進行重排序。
【專利說明】用于利用存儲命令的系統(tǒng)和方法
[0001]相關(guān)申請的交叉引用
[0002]本專利申請要求2011年4月8日提交的題為“SYSTEMS AND METHODS FOR USINGMEMORY CONTROLLER COMMANDS”的美國臨時專利申請第61/473,671號的權(quán)益和在35U.S.C.§ 119(e)下的優(yōu)先權(quán),針對所有目的將其通過引用并入于此。
【技術(shù)領(lǐng)域】
[0003]本公開總體上涉及用于對存儲控制器中的存儲命令進行重排序的技術(shù)和機制。
【背景技術(shù)】
[0004]存儲控制器可以將一系列本地用戶事務(wù)轉(zhuǎn)換成要發(fā)送給存儲裝置的行命令和列命令。重排序存儲控制器改變了這些行命令和列命令的次序,以提聞總的系統(tǒng)效率和等待時間。
[0005]實現(xiàn)重排序控制器的主要挑戰(zhàn)是,需要確定存儲命令的哪種排序可用于給定的一組事務(wù)。這些排序可能因以下情況而受限:例如,因針對存儲地址的同一子集進行讀取或?qū)懭攵斐傻臄?shù)據(jù)沖突;與哪些重排序優(yōu)化是可容許的相關(guān)的由用戶裝備(instrument)的策略;以及因控制命令(例如刷新)或復(fù)雜命令(例如多播命令)而造成的其它依賴性。
[0006]在各個操作周期期間,重排序控制器的常規(guī)實現(xiàn)會需要針對控制器中的每一對命令檢查上述依賴性。這種常規(guī)的實現(xiàn)會需要芯片上的顯著的表面積來實現(xiàn),會與控制器中的存儲命令的數(shù)目的平方成比例,并且由于相對大量的必需的計算導(dǎo)致這種常規(guī)的實現(xiàn)通常會成為穿過存儲控制器的時序關(guān)鍵路徑,因而減小了存儲控制器能夠工作的頻率。
[0007]需要致力于解決上述挑戰(zhàn)的改進的重排序存儲控制器。
【發(fā)明內(nèi)容】
[0008]提供了用于有效地實現(xiàn)重排序存儲控制器的技術(shù)和機制。可以將比特矢量用于表示存儲命令池中的多個存儲命令之間的依賴性。在某些實施方式中,存儲控制器的邏輯電路可以被配置為:將用戶事務(wù)分配給存儲命令池中的用戶事務(wù)池槽;通過確定與所述用戶事務(wù)相關(guān)聯(lián)的一個或更多個行存儲命令或列存儲命令來計算所述用戶事務(wù)的行命令依賴性和列命令依賴性;以及生成與所述行命令依賴性和列命令依賴性相關(guān)聯(lián)的至少一個比特矢量,其中,每個比特矢量都對應(yīng)于所述一個或更多個行存儲命令或列存儲命令中的一個存儲命令,其中,所述每個比特矢量都包括與在所述一個或更多個行存儲命令和列存儲命令中的所述一個存儲命令和所述存儲命令池中的其它存儲命令之間的依賴性有關(guān)的依賴性信息。
[0009]在其它實施方式中,多個存儲命令的依賴性通過重排序存儲控制器來確定。生成兩組比特矢量來對依賴性進行標(biāo)識,其中,第一組比特矢量表示所述多個存儲命令中的行命令的依賴性,而第二組比特矢量表示所述多個存儲命令中的列命令的依賴性?!緦@綀D】
【附圖說明】
[0010]參照以下描述并結(jié)合附圖可以最佳地理解使用存儲命令的系統(tǒng)和方法,附圖例示了本系統(tǒng)和方法的各種實施方式。
[0011]圖1是根據(jù)本發(fā)明的一種實施方式的用于向存儲系統(tǒng)寫入以及從存儲系統(tǒng)讀取的系統(tǒng)的一種實施方式的不例性框圖。
[0012]圖2是根據(jù)本發(fā)明的一種實施方式的系統(tǒng)的存儲控制器的一種實施方式的示例性框圖。
[0013]圖3是用于例示根據(jù)本發(fā)明的一種實施方式的由存儲控制器施加的一個或更多個命令限制的示例性時序圖。
[0014]圖4是例示了根據(jù)本發(fā)明的一種實施方式的由存儲控制器施加的一個或更多個數(shù)據(jù)限制的示例性時序圖。
[0015]圖5是例示了根據(jù)本發(fā)明的一種實施方式的基于數(shù)據(jù)限制和命令限制由存儲控制器生成的依賴性的示例性重排序依賴圖。
[0016]圖6是例示了根據(jù)本發(fā)明的一種實施方式的基于一個或更多個控制命令由存儲控制器生成的依賴性的示例性重排序依賴圖。
[0017]圖7是例示了根據(jù)本發(fā)明的一種實施方式的基于一種或更多種重排序策略由存儲控制器生成的依賴性的示例性重排序依賴圖。
[0018]圖8示出了根據(jù)本發(fā)明的一種實施方式的行依賴性矢量和列依賴性矢量的示例性實施方式。
[0019]圖9是例示了根據(jù)本發(fā)明的一種實施方式的存儲控制器的存儲命令池的示例性框圖。
[0020]圖10是根據(jù)本發(fā)明的一種實施方式的其中可以實現(xiàn)存儲控制器的集成電路(IC)芯片的示例性框圖。
【具體實施方式】
[0021]存儲控制器可以將一系列本地用戶事務(wù)轉(zhuǎn)換成要發(fā)送給存儲裝置的行命令和列命令。執(zhí)行重排序的存儲控制器改變了這些行命令和列命令的次序,以提高總的系統(tǒng)效率和等待時間。
[0022]用戶事務(wù)(例如,針對特定地址的讀取或?qū)懭?可以被轉(zhuǎn)換成兩種存儲器接口命令(在本公開中還被稱為存儲命令):管理(打開、關(guān)閉)存儲裝置上的存儲體(bank)的行命令;對打開的存儲體執(zhí)行讀取或?qū)懭氲牧忻?。因為?shù)據(jù)單元通常按網(wǎng)格配置來存儲,所以使用術(shù)語“行”命令和“列”命令,因此,可以用與數(shù)據(jù)單元相關(guān)聯(lián)的行和列來標(biāo)識數(shù)據(jù)單元。在某些現(xiàn)代存儲裝置中,行命令可以用于獲得對與特定的行相關(guān)聯(lián)的一組單元的訪問,并且列命令接著可以用于從該行的特定單元讀取或?qū)懭霐?shù)據(jù)。這些命令可以在將存儲控制器連接至外部存儲器的單獨的命令總線上交織存取,以按照對命令之間所需的最短的時間進行了指定的嚴(yán)格的時序(存儲器時序)來確保外部存儲器的成功操作。
[0023]通過例如縮減執(zhí)行存儲體管理和實現(xiàn)總線翻轉(zhuǎn)所需的時間,重排序存儲命令可以顯著改進存儲器存取的效率和存儲器吞吐量??偩€翻轉(zhuǎn)是指在存儲控制器與存儲裝置之間的數(shù)據(jù)總線上的讀取過程與寫入過程之間的轉(zhuǎn)換中所出現(xiàn)的步驟。存儲體管理涉及關(guān)閉和打開存儲裝置的行的機制,這些事件中的每一件都會花費多個時鐘周期來完成。重排序涉及對縮減了存儲體管理和總線翻轉(zhuǎn)開銷的一系列存儲命令進行選擇并同時減少行遺漏和總線翻轉(zhuǎn)。
[0024]存儲器制造商在過去十年的趨勢中已經(jīng)極大地增加了存儲裝置的時鐘速率(以及對應(yīng)的數(shù)據(jù)速率)。然而,存儲器時序沒有隨之顯著地成比例地變化,并且例如管理存儲器所需的開銷時間仍會保持較長。某些現(xiàn)代存儲裝置(例如,DDR裝置)的分塊的(banked)性質(zhì)允許與數(shù)據(jù)傳遞并行地執(zhí)行某些存儲管理。然而,某些開銷無法減輕,并且大的存儲管理延遲會極大地影響存儲裝置可實現(xiàn)的效率或最大吞吐量。
[0025]實現(xiàn)重排序控制器的主要的挑戰(zhàn)會是,需要確定針對給定的一組事務(wù)可以進行哪些存儲命令的重排序,而不會疏忽地造成從存儲器存儲或讀取不正確的數(shù)據(jù)值。這些重排序會因以下情況而受限:因針對存儲地址的同一子集的特定順序的讀取或?qū)懭攵斐傻臄?shù)據(jù)沖突;與哪些重排序優(yōu)化是可容許的相關(guān)的由用戶實現(xiàn)的策略;以及因控制命令(例如刷新)或復(fù)雜命令(例如多播命令)而造成的其它依賴性。
[0026]在各個操作周期期間,重排序控制器的常規(guī)實現(xiàn)會需要針對控制器中的每一對命令檢查上述依賴性。這種方案會需要芯片上的顯著的表面積來實現(xiàn),會與控制器中的存儲命令的數(shù)目的平方成比例,并且由于相對大量的必需的計算通常會成為穿過存儲控制器的時序關(guān)鍵路徑,因而限制了存儲控制器能夠工作的速度。由于重排序通常會是存儲控制器系統(tǒng)中的時序關(guān)鍵模塊,并且存儲控制器必須試圖跟上不斷增加的高速存儲器接口 I/o速度,所以該時序開銷會是顯著的。
[0027]下面,提供了用于實現(xiàn)有效的重排序存儲控制器的技術(shù)和機制。
[0028]而且,該技術(shù)和機制幫助處理與依賴性檢測相關(guān)的一個或更多個復(fù)雜的命令、一種或更多種重排序策略和/或一個或更多個控制命令。多播命令是復(fù)雜命令的示例,而刷新命令是控制命令的示例。發(fā)出多播命令,以在一個或更多個時鐘周期內(nèi)將相同的數(shù)據(jù)寫入多個存儲器排(memory rank)。每個存儲器排都是一個物理存儲裝置。由存儲控制器發(fā)出刷新命令,以恢復(fù)存儲器排內(nèi)的存儲單元的容量,以防止存儲單元內(nèi)的數(shù)據(jù)丟失。用戶每次在他們的設(shè)計中實例化存儲控制器時可以靜態(tài)地設(shè)置一種或更多種重排序策略,或者在電路工作期間根據(jù)用戶的邏輯來動態(tài)地設(shè)置一種或更多種重排序策略,以使該重排序策略可以根據(jù)程序狀態(tài)或任務(wù)而不同。重排序策略可以改變兩個或更多個列命令從存儲控制器發(fā)出的次序。
[0029]參照圖1,描述了用于向存儲系統(tǒng)102寫入并且從存儲系統(tǒng)102讀取的系統(tǒng)100。系統(tǒng)100包括:多個裝置104和106,存儲控制器108和存儲系統(tǒng)102。裝置104和106各自可以是控制器或處理器??刂破骺梢园顟B(tài)機。而且,存儲系統(tǒng)102可以包括一個以上的存儲器排。例如,存儲體系統(tǒng)102可以包括存儲器排O (MRO)和MR1。每個存儲器排都是一個存儲裝置,舉例來說,如DDR、DDR2或DDR3。MRO包括多個存儲體B0、B1、B2以及B3。存儲體是存儲器排內(nèi)的邏輯單元。例如,MRO的存儲單元的存儲地址0-64被劃分成四個單元B0、B1、B2以及B3。存儲體BO可以具有存儲地址O至5,存儲體BI可以具有存儲地址16至31,存儲體B2可以具有存儲地址32至48,并且存儲體B3可以具有存儲地址49至64。應(yīng)注意的是,存儲地址是存儲體的一行內(nèi)的存儲單元的地址。
[0030]裝置104和/或裝置106向存儲控制器108發(fā)送多個用戶事務(wù)UT0、UT1、UT2以及UT3。存儲控制器108接收用戶事務(wù),并且可以將每個用戶事務(wù)轉(zhuǎn)換成一個或更多個行命令或列命令。例如,一個用戶事務(wù)可以被轉(zhuǎn)換成一個或更多個列命令,或者一個用戶事務(wù)可以基于該用戶事務(wù)的類型而被轉(zhuǎn)換成第一行命令(例如,激活命令)、一個或更多個讀取或?qū)懭朊?即,列命令)以及第二行命令(例如,預(yù)充電命令)的組合。例如,當(dāng)該用戶事務(wù)是讀取用戶事務(wù)時,存儲控制器108將該用戶事務(wù)轉(zhuǎn)換成激活命令、讀取命令以及預(yù)充電命令。激活命令打開該存儲體的一行以針對該行的存儲地址執(zhí)行讀取或?qū)懭耄A(yù)充電命令關(guān)閉該行以限制從該行中的存儲地址寫入數(shù)據(jù)或讀取數(shù)據(jù),并且讀取命令從該行的存儲單元讀取數(shù)據(jù)。作為另一示例,當(dāng)用戶事務(wù)是寫入用戶事務(wù)時,存儲控制器108將該用戶事務(wù)轉(zhuǎn)換成激活命令、寫入命令以及預(yù)充電命令。寫入命令向一行的存儲單元寫入數(shù)據(jù)。作為又一示例,當(dāng)用戶事務(wù)是刷新命令時,存儲控制器108向存儲系統(tǒng)102提供刷新命令。作為另一示例,當(dāng)用戶事務(wù)是多播命令時,存儲控制器108向存儲器排MRO和MRl同時發(fā)出兩個激活命令、同時發(fā)出兩個讀取或兩個寫入命令并且同時發(fā)出兩個預(yù)充電命令。激活命令或預(yù)充電命令是行命令的示例。而且,寫入命令、讀取命令或者刷新命令是列命令的示例。
[0031]在不同的實施方式中,系統(tǒng)100包括與存儲控制器108耦接的例如裝置104和106這樣的任何數(shù)目的裝置。而且,在某些實施方式中,存儲系統(tǒng)102包括任何數(shù)目的存儲器排,并且每個存儲器排都包括若干存儲體。在一種實施方式中,裝置104和/或裝置106向存儲控制器108發(fā)送任何數(shù)目的用戶事務(wù)。
[0032]繼續(xù)參照圖2,圖2提供了存儲控制器架構(gòu)的一個示例。存儲控制器108包括:用戶事務(wù)池202、存儲器時序過濾器(MTF204)204、重排序依賴性過濾器(RDF206)以及仲裁器208。用戶事務(wù)池202可以是存儲用戶事務(wù)UT1、UT2、UT3以及UT4的隊列或緩沖器。存儲控制器108接收用戶事務(wù),并且可以將每個用戶事務(wù)轉(zhuǎn)換成一個或更多個行命令或列命令。例如,根據(jù)用戶事務(wù)的類型,用戶事務(wù)可以被轉(zhuǎn)換成一個或更多個列命令,或者用戶事務(wù)可以被轉(zhuǎn)換成第一行命令(例如,激活命令)、一個或更多個讀取或?qū)懭朊?即,列命令)以及第二行命令(例如,預(yù)充電命令)的組合。該轉(zhuǎn)換可以通過用戶事務(wù)池202、MTF204或存儲控制器108的另一組件來執(zhí)行。
[0033]MTF204基于與存儲命令池中的存儲命令相關(guān)聯(lián)的時序約束來確定該命令是否適合于在特定的時鐘周期期間發(fā)出,并且如果存在任何適合的存儲命令,則在該時鐘周期期間向RDF206發(fā)出一個或更多個存儲命令。接著,RDF過濾器對適合于要在該時鐘周期期間發(fā)出的存儲命令進行檢驗,并且基于該存儲命令的可能的重排序來確定最希望在該時鐘周期期間發(fā)出哪些適合的存儲命令。接著,仲裁器208在從RDF過濾器接收的存儲命令當(dāng)中確定向存儲裝置發(fā)出哪些存儲命令。
[0034]存儲控制器108向一個或更多個存儲命令應(yīng)用一個或更多個例如數(shù)據(jù)沖突這樣的數(shù)據(jù)限制、由諸如刷新這樣的特定的命令所施加的一個或更多個命令限制和/或一種或更多種重排序策略,以生成下文描述的例如行比特矢量或列比特矢量這樣的比特矢量??梢栽诖鎯γ畛亟邮盏酱鎯γ顣r生成比特矢量,并且可以在從存儲命令池刷新存儲命令時對比特矢量進行更新。存儲命令池可以是用戶事務(wù)池202的一部分,或者存儲命令池可以是存儲控制器108的分離的組件。仲裁器208部分地基于比特矢量向存儲系統(tǒng)102發(fā)出一個或更多個存儲命令。
[0035]進一步參照圖3,時序圖300用于例示可以由RDF206應(yīng)用的一個或更多個命令重排序。
[0036]存儲控制器能夠執(zhí)行兩類重排序優(yōu)化,以提高效率和吞吐量:命令重排序和數(shù)據(jù)重排序。命令重排序(還已知為存儲體超前(bank-look-ahead)或行命令重排序)對由存儲控制器發(fā)出的行命令進行重排序,以緩解總線空閑時間。例如,存儲控制器可以重排序行命令,以在第一行仍被存取的同時開始打開第二行。結(jié)果,可以在存儲控制器準(zhǔn)備好對第二行進行存取的時間完成打開第二行所需的存儲管理。
[0037]圖3示出了存儲控制器可以執(zhí)行的行命令重排序的一個示例。仲裁器208與時鐘信號304同步地向存儲系統(tǒng)102發(fā)出存儲命令的第一序列302。例如,仲裁器208向存儲體BO的行RO發(fā)出激活命令A(yù)CT BORO、向行RO發(fā)出寫入命令WR BORO、向行RO發(fā)出預(yù)充電命令PRE BORO和向存儲體BO的行Rl發(fā)出激活命令A(yù)CT BORl0在第一序列302中,不存在由RDF206執(zhí)行的對存儲命令A(yù)CT BOR0.WR B0R0.PRE BORO以及ACT BORl的重排序。而且,在第一序列302中,寫入命令WR BORO緊跟著激活命令A(yù)CT B0R0,預(yù)充電命令PRE BORO緊跟著寫入命令B0R0,并且激活命令A(yù)CT BORl緊跟著預(yù)充電命令PRE B0R0。應(yīng)注意的是,當(dāng)在第一存儲命令與第二存儲命令之間沒有存儲命令時,第一存儲命令緊跟著第二存儲命令。
[0038]RDF206將激活命令A(yù)CT BlRO重排序,以使激活命令A(yù)CT BlRO處于激活命令BORO與寫入命令WR BORO之間。由RDF206執(zhí)行的任何重排序減輕了將存儲控制器108與存儲系統(tǒng)102耦接的數(shù)據(jù)總線的空閑時間的量。這種減輕幫助提高了存儲控制器108與存儲系統(tǒng)102之間的數(shù)據(jù)速率。
[0039]在這種重排序之后,仲裁器208發(fā)出其中激活命令A(yù)CT BlRO處于激活命令A(yù)CTBORO與寫入命令WR BORO之間的第二序列306。在第二序列306中,激活命令BlRO緊跟著激活命令BORO,寫入命令WR BORO緊跟著激活命令A(yù)CT B1R0,預(yù)充電命令緊跟著寫入命令WR BORO,并且激活命令A(yù)CT BORl緊跟著預(yù)充電命令PRE BORO。
[0040]RDF206會根據(jù)一個或更多個命令限制來限制從MTF204接收到的存儲命令的重排序。例如,RDF206可以限制在尋址到存儲體的特定的行的行命令與尋址到同一特定的行的列命令之間放置尋址到該存儲體的任何行的行命令。在該示例中,尋址到該特定的行的行命令可以是激活命令,而該列命令可以是讀取或?qū)懭朊睢6?,在該示例中,尋址到任何行的行命令緊跟著尋址到特定的行的行命令,并且尋址到特定的行的列命令緊跟著尋址到任何行的行命令。違反一個或更多個命令限制會干擾要對存儲體的行執(zhí)行的讀取或?qū)懭?。例如,?dāng)將針對存儲體的第二行的預(yù)充電命令重排序在針對該存儲體的第一行的激活命令與針對第一行的列命令之間時,該列命令無法應(yīng)用至第一行。在該示例中,預(yù)充電命令緊跟著激活命令,而列命令緊跟著預(yù)充電命令。在該示例中,根據(jù)一個或更多個命令限制,針對第一行的列命令要應(yīng)用在針對第一行的激活命令與針對第一行的預(yù)充電命令之間,以使列命令緊跟著激活命令,并且預(yù)充電命令緊跟著列命令。
[0041]參照圖4,使用時序圖400來例示可以由RDF206應(yīng)用的一個或更多個列命令的重排序。
[0042]利用列命令重排序(其也通常稱為數(shù)據(jù)重排序),列命令可以被重排序,使得針對存儲器總線的數(shù)據(jù)事務(wù)無序地執(zhí)行。通過將針對同一行的存取組合在一起,防止不必要的存儲體打開和關(guān)閉,或者通過將讀取和寫入組合在一起以防止不必要的總線翻轉(zhuǎn),這可以極大地提高效率。這可以在圖4中看出。然而,除了增加了數(shù)據(jù)重排序緩沖器的成本以外,數(shù)據(jù)重排序還會引入針對代價高的沖突分析與檢測的需要。
[0043]如圖4中所描繪的列命令重排序,仲裁器208與時鐘信號304同步地向存儲系統(tǒng)102發(fā)出存儲命令的第三序列402。例如,仲裁器208向一行內(nèi)的一個存儲地址發(fā)出寫入命令WR404,向該存儲地址發(fā)出讀取命令RD406,向該存儲地址發(fā)出另一寫入命令WR408,并且向該存儲地址發(fā)出另一讀取命令RD410。在第三序列402中,讀取命令RD406緊跟著寫入命令WR404,寫入命令WR408緊跟著讀取命令RD406,并且讀取命令RD410緊跟著寫入命令WR408。在第三序列402中,不存在由RDF206執(zhí)行的、對從MTF204接收倒的存儲命令WR404、RD406、WR408和RD410的重排序。應(yīng)注意的是,圖4中的tWTR是指,在可以對已經(jīng)執(zhí)行了寫入操作的同一數(shù)據(jù)地址執(zhí)行讀取操作之前可能需要觀察的延遲。
[0044]為了遵守數(shù)據(jù)限制,RDF206限制將緊跟著針對存儲地址的讀取命令的、針對該存儲地址的寫入命令重排序為緊跟著該寫入命令的讀取命令。例如,RDF206進行限制將寫入命令WR408重排序在寫入命令WR404與讀取命令RD406之間,以遵守數(shù)據(jù)限制。(在序列412中示出了這種假設(shè)重排序)。而且,為了遵守另一數(shù)據(jù)限制,RDF206限制將緊跟著針對存儲地址的第二寫入命令的、針對該存儲地址的第一寫入命令重排序為緊跟著該第一寫入命令的第二寫入命令。而且,為了遵守又一數(shù)據(jù)限制,RDF206進行限制將緊跟著針對存儲地址的寫入命令的、針對該存儲地址的讀取命令重排序為緊跟著該讀取命令的寫入命令。RDF206接收存儲命令根據(jù)該存儲命令所指向的存儲地址。
[0045]將緊跟著針對存儲地址的寫入命令的、針對該存儲地址的讀取命令重排序為緊跟著該讀取命令的寫入命令會導(dǎo)致從該存儲地址讀取不正確的數(shù)據(jù)。而且,將緊跟著針對存儲地址的讀取命令的、針對該存儲地址的寫入命令重排序為緊跟著該寫入命令的讀取命令會導(dǎo)致從該存儲地址讀取不正確的數(shù)據(jù)。(在從序列402至序列412的變化中示出了這種情況)。而且,將緊跟著針對存儲地址的第二寫入命令的、針對該存儲地址的第一寫入命令重排序為緊跟著該第一寫入命令的第二讀取命令會導(dǎo)致向該存儲地址寫入不正確的數(shù)據(jù)。
[0046]當(dāng)具有數(shù)據(jù)依賴性的指令在流水線的不同的級修改數(shù)據(jù)時,會出現(xiàn)數(shù)據(jù)沖突。會在三種情況下出現(xiàn)數(shù)據(jù)沖突:針對同一存儲地址的寫后讀(RAW)、讀后寫(WAR)以及寫后寫(WAff)0為了確保存儲裝置的內(nèi)容的一致性,存儲控制器必須檢測數(shù)據(jù)依賴性,并且僅執(zhí)行不產(chǎn)生數(shù)據(jù)沖突的重排序。
[0047]除了由數(shù)據(jù)沖突造成的依賴性以外,在本地命令之間會存在進一步的依賴性。一個示例是定期維護操作刷新,其恢復(fù)電容式存儲單元以防止數(shù)據(jù)丟失;在刷新命令之后無法對命令進行重排序。諸如多播這樣的其它命令(其同時向大量的排(rank)進行廣播)產(chǎn)生復(fù)雜的數(shù)據(jù)依賴性。最后,用戶可以動態(tài)地調(diào)節(jié)重排序策略,以臨時地禁用產(chǎn)生附加的偽依賴性的命令和/或數(shù)據(jù)重排序。
[0048]為了在控制器中有效地(從范圍和時序兩方面)實現(xiàn)命令重排序和數(shù)據(jù)重排序;用于表示這些依賴性的簡單的模型會是有用的。通過簡化依賴性的表征,可以極大地簡化并且更快速地執(zhí)行對這些依賴性進行評價以尋找適合于執(zhí)行的命令。不同的實施方式提供了可以由存儲控制器使用的依賴圖,以對一組存儲命令之中的不同的行和命令依賴性進行建模,并接著充當(dāng)用于分析的基礎(chǔ)以簡化該模型。
[0049]圖5示出了用于向存儲控制器發(fā)出的一系列四個本地用戶事務(wù)的依賴圖500,并且指示了每個命令的目標(biāo)存儲體。這四個用戶事務(wù)按它們被存儲控制器接收的次序示出。應(yīng)理解的是,示出四個用戶事務(wù)是示例性的,而非旨在限制本發(fā)明的范圍。例如,可以實現(xiàn)五個用戶事務(wù)或任何數(shù)目的用戶事務(wù)。
[0050]每個本地用戶事務(wù)被建模為該圖形內(nèi)的兩個節(jié)點:針對行或存儲體管理命令的第一節(jié)點和針對列或數(shù)據(jù)命令的第二節(jié)點(必要時)。應(yīng)理解的是,總是針對同一本地命令從行命令到列命令存在隱式依賴性,也就是說,必須在數(shù)據(jù)傳遞之前管理或激活該行。
[0051]根據(jù)該圖形結(jié)構(gòu)可以直接對顯式數(shù)據(jù)依賴性進行建模。因命令重排序(其防止行命令比針對同一存儲體的另一本地列命令被更早地重排序)而造成的依賴性可以直接在圖形上進行建模,并且用從行節(jié)點至與同一本地用戶事務(wù)相關(guān)的列節(jié)點的箭頭來表示。數(shù)據(jù)重排序(即,列)依賴性可以同樣地防止行命令和列命令比針對同一存儲體的其它列命令被更早地重排序。圖5利用從命令向隨后的命令(其依賴于首先完成的第一命令)繪制的箭頭描繪了這種依賴性。
[0052]進一步參照圖5,根據(jù)重排序依賴圖500,與尋址到存儲體BO的行命令502和尋址到存儲體BO的列命令504相關(guān)聯(lián)的第一本地用戶事務(wù)被存儲控制器接收。接著是由存儲控制器接收與尋址到存儲體BI的行命令506和尋址到存儲體BI的列命令508相關(guān)聯(lián)的第二本地用戶事務(wù)。隨后,該存儲控制器接收與尋址到存儲體BO的行命令510和尋址到存儲體BO的列命令512相關(guān)聯(lián)的第三本地用戶事務(wù)。
[0053]最后,該存儲控制器接收尋址到存儲體B3的行命令514和尋址到存儲體B3的列命令516。
[0054]如虛線所示,RDF206應(yīng)用一個或更多個命令限制,以確定行命令510依賴于列命令504,并且應(yīng)用一個或更多個數(shù)據(jù)限制,以確定列命令512依賴于列命令504。RDF206限制將行命令510在列命令504之前發(fā)出,并且限制列命令512在列命令504之前發(fā)出。基于重排序依賴圖500中所例示的重排序限制,仲裁器208在發(fā)出列命令504之前不發(fā)出行命令510,并且在發(fā)出列命令504之前不發(fā)出列命令512。
[0055]應(yīng)注意的是,在不同的實施方式中,可以針對任何數(shù)目的存儲命令創(chuàng)建依賴性。
[0056]參照圖6,如在重排序依賴圖600中所示,在接收與行命令506和列命令508相關(guān)聯(lián)的本地用戶事務(wù)之后,但在接收與行命令514和列命令516相關(guān)聯(lián)的本地用戶事務(wù)之前,由存儲控制器接收刷新命令。如虛線所示,RDF206應(yīng)用一個或更多個命令限制,以確定行命令514依賴于刷新命令REF,并且應(yīng)用一個或更多個數(shù)據(jù)限制,以確定刷新命令REF依賴于列命令504和508。RDF206限制在刷新命令REF之前發(fā)出行命令514,并且限制在列命令504和508之前發(fā)出刷新命令REF?;谟芍嘏判蛞蕾噲D600所例示的對重排序的限制,仲裁器208在發(fā)出刷新命令REF之前不向存儲系統(tǒng)102發(fā)出行命令514,并且在發(fā)出列命令504和508之前不發(fā)出刷新命令REF。
[0057]RDF206應(yīng)用一個或更多個數(shù)據(jù)限制,以確定列命令516依賴于刷新命令REF。RDF206限制在刷新命令REF之前發(fā)出列命令516?;谟芍嘏判蛞蕾噲D600所例示的對重排序的限制,仲裁器208在發(fā)出刷新命令REF之前不向存儲系統(tǒng)102發(fā)出列命令516。
[0058]進一步參照圖7,重排序依賴圖700用于例示由RDF206基于用戶所應(yīng)用的一種或更多種重排序策略所生成的依賴性。根據(jù)用戶事務(wù)UTO生成了行命令502、列命令504以及行命令RCO (未示出)。此外,根據(jù)用戶事務(wù)UTl生成了行命令506、列命令508以及行命令RCl (未示出)。而且,根據(jù)用戶事務(wù)UT2生成行命令510、列命令512以及行命令RC2。另夕卜,根據(jù)用戶事務(wù)UT3生成行命令514以及列命令516。
[0059]可以由用戶在它們的設(shè)計中實例化存儲控制器時靜態(tài)地設(shè)置一種或更多種重排序策略,或者在電路工作期間根據(jù)用戶的邏輯動態(tài)地設(shè)置一種或更多種重排序策略,使得可以根據(jù)程序狀態(tài)或任務(wù)來調(diào)整重排序策略。RDF206應(yīng)用一種或更多種重排序策略。在所示的示例中,由用戶制定的重排序策略修改是數(shù)據(jù)重排序禁用。RDF206應(yīng)用該用戶重排序策略,并且確定實現(xiàn)該策略,即,列命令508依賴于列命令504,列命令512依賴于列命令508,列命令516依賴于列命令512,列命令516依賴于列命令508,并且列命令516依賴于列命令504。而且,基于在重排序依賴圖700中所示出的對重排序的限制,仲裁器208在列命令504之前不向存儲系統(tǒng)102發(fā)出列命令508、在列命令508之前不向存儲系統(tǒng)102發(fā)出列命令512、在列命令512之前不向存儲系統(tǒng)102發(fā)出列命令516、在列命令508之前不向存儲系統(tǒng)102發(fā)出列命令516,并且在列命令504之前不向存儲系統(tǒng)102發(fā)出列命令516。
[0060]對依賴圖進行分析得到三種簡化的實現(xiàn),可以在創(chuàng)建重排序依賴性過濾器的實現(xiàn)中使用這三種簡化的實現(xiàn):
[0061]1.除了同一本地命令的行命令和列命令之間的固有依賴性以外,所有依賴性的源總是列命令。
[0062]2.在確定適合于發(fā)出哪些命令時可以獨立地考慮行命令和列命令。不再需要“本地命令”的概念。
[0063]3.僅在命令首先出現(xiàn)在該系統(tǒng)中時獲得依賴性,并且在執(zhí)行的期間命令無法“收集”新的依賴性。
[0064]當(dāng)在分析一組存儲命令之間的依賴性中使用這三種實現(xiàn)時,會帶來表征和計算上的優(yōu)化,這種優(yōu)化縮減了實現(xiàn)的復(fù)雜性,并且貢獻了在存儲控制器內(nèi)的數(shù)據(jù)依賴性檢查實現(xiàn)的效率。
[0065]如上參照圖2所提到的,存儲控制器可以包括重排序依賴性過濾器(RDF),作為其架構(gòu)的一部分。圖8示出了 RDF的一種實現(xiàn)。該實現(xiàn)引入了依賴性矢量的概念,并且可以使用例如根據(jù)上述依賴圖的分析所得出的結(jié)論,以縮減該實現(xiàn)的復(fù)雜性。
[0066]現(xiàn)在參照圖8,圖8示出了兩種依賴性矢量的示例,即,與行命令相關(guān)聯(lián)的第一依賴性矢量802以及與列命令相關(guān)聯(lián)的第二依賴性矢量804。每種依賴性矢量都可以記錄一組比特,其中,需要在與依賴性矢量相關(guān)聯(lián)的命令之前發(fā)出列命令。
[0067]在圖8中,行依賴性矢量802和列依賴性矢量804各自都是包括一個或更多個比特的比特矢量。
[0068]如上所述,用戶事務(wù)可以被轉(zhuǎn)換成一個或更多個行命令或列命令,并且被分配給存儲命令池中的槽(slot)。每個行命令或列命令都可以被分配一個比特矢量。在某些實施方式中,每個比特矢量都可以包含與存儲命令池中的池槽(pool slot)—樣多的比特位置。每個比特位置可以接著參考存儲在對應(yīng)的池槽中的存儲命令。例如,行依賴性矢量802可以對應(yīng)于存儲在存儲命令池中的第一池槽處的存儲命令。
[0069]在圖8中,行依賴性矢量802包括:比特位置806、808、810以及812,而列依賴性矢量804包括:比特位置814、816、818以及820。依賴性矢量針對行命令和列命令兩者利用一組比特進行記錄,其中,必須在依賴性矢量之前發(fā)出列命令。例如,比特位置806包括對與行矢量802相對應(yīng)的行命令I(lǐng)是否依賴于列命令I(lǐng)進行指示的比特,比特位置808包括對行命令I(lǐng)是否依賴于列命令2進行指示的比特,比特位置810包括對行命令I(lǐng)是否依賴于列命令3進行指示的比特,并且比特位置812包括對行命令I(lǐng)是否依賴于列命令4進行指示的比特。而且,比特位置814包括對列命令I(lǐng)是否依賴于列命令I(lǐng)進行指示的比特,比特位置816包括對列命令I(lǐng)是否依賴于列命令2進行指示的比特,比特位置818包括對列命令I(lǐng)是否依賴于列命令3進行指示的比特,并且比特位置820包括對列命令I(lǐng)是否依賴于列命令4進行指示的比特。
[0070]應(yīng)注意的是,在某些實施方式中,緊跟著行命令I(lǐng)的接收由RDF206接收列命令1,緊跟著列命令I(lǐng)的接收由RDF206接收行命令RC0,緊跟著行命令RCO的接收由RDF206接收行命令2。而且,緊跟著行命令2的接收由RDF206接收列命令2,緊跟著列命令2的接收由RDF206接收行命令RCl,并且緊跟著行命令RCl的接收由RDF206接收行命令3。而且,緊跟著行命令3的接收由RDF206接收列命令3,緊跟著列命令3的接收由RDF206接收行命令RC2,并且緊跟著行命令RC2的接收由RDF206接收行命令4。而且,緊跟著行命令4的接收由RDF206接收列命令4。
[0071]在其它實施方式中,分配給存儲命令的存儲命令池槽不會反映存儲命令被存儲命令池所接收的次序,而相反地,反映了當(dāng)在存儲命令池處接收到每個存儲命令時池槽的可用性。
[0072]RDF206可以生成行依賴性矢量802,以向仲裁器208指示行命令對于一個或更多個列命令的一種或更多種依賴性。例如,如上所述,比特位置808處的比特指示行命令I(lǐng)依賴于列命令2,比特位置810處的比特指示行命令I(lǐng)不依賴于列命令3,并且比特位置812處的比特指示行命令I(lǐng)不依賴于列命令4?;诒忍匚恢?08、810以及812處的比特,仲裁器208在發(fā)出列命令2之前不發(fā)出行命令I(lǐng),在發(fā)出列命令3之前發(fā)出行命令I(lǐng),并且在發(fā)出列命令4之前發(fā)出行命令I(lǐng)。
[0073]在某些實施方式中,比特矢量802的第一位置806可以被分配X,因為這表示從命令I(lǐng)到其自身的自依賴,因而不可用。比特矢量802中的其它比特位置(808、810和812)可以用于指示存儲在第一池槽處的存儲命令是否依賴于存儲命令,若有的話,分別存儲在存儲命令池的第二池槽、第三池槽以及第四池槽中。
[0074]而且,RDF206可以生成列依賴性矢量804,以向仲裁器208指不一個列命令對于一個或更多個列命令的一種或更多種依賴性。例如,在比特位置816處的比特指示列命令I(lǐng)依賴于列命令2,在比特位置818處的比特指示列命令I(lǐng)依賴于列命令3,在比特位置820處的比特指示列命令I(lǐng)不依賴于列命令4。基于在比特位置816、818和820處的比特,仲裁器208在發(fā)出列命令2和3之前不發(fā)出列命令I(lǐng),并且會在發(fā)出列命令4之前發(fā)出列命令I(lǐng)。
[0075]應(yīng)注意的是,標(biāo)記有“X”的比特位置806和814指示自依賴。例如,在比特位置806處的“X”指示行命令I(lǐng)依賴于自身,并且在比特位置814處的“X”指示列命令I(lǐng)依賴于自身?!癤”表示針對比特位置806和814的比特的值的不可用性。
[0076]還應(yīng)注意的是,比特位置處于RDF206的例如寄存器或存儲單元這樣的存儲元件內(nèi)。還應(yīng)注意的是,盡管在行依賴性矢量802和列依賴性矢量804各自中示出了四個比特位置,但比特矢量內(nèi)的比特位置的數(shù)目可以根據(jù)列命令的數(shù)目而改變。
[0077]應(yīng)注意的是,在不同的實施方式中,針對應(yīng)用一個或更多個數(shù)據(jù)限制和/或一個或更多個命令限制的時段,可以禁用或啟用一種或更多種重排序策略。該時段由用戶經(jīng)由輸入裝置提供給計算機的處理器。
[0078]而且,應(yīng)注意的是,在某些實施方式中,包括行命令的行矢量802的位置的寄存器的位置與存儲有與行命令有關(guān)的存儲體地址、行地址、數(shù)據(jù)和/或狀態(tài)的寄存器的位置相鄰。排地址(rank address)是存儲器排的地址,而存儲體地址(bank address)是具有可以利用行命令來打開或關(guān)閉的行的存儲體的地址。狀態(tài)可以是存儲體的行是打開的還是關(guān)閉的。
[0079]還應(yīng)注意的是,在一種實施方式中,包括列命令的列矢量804的位置的寄存器的位置與存儲有與列命令有關(guān)的存儲地址、數(shù)據(jù)和/或狀態(tài)的寄存器的位置相鄰。存儲地址是利用列命令在行內(nèi)進行數(shù)據(jù)寫入或數(shù)據(jù)讀取的地址。狀態(tài)可以是是否已經(jīng)向具有該存儲地址的存儲單元寫入了數(shù)據(jù)或者已經(jīng)從具有該存儲地址的存儲單元讀取了數(shù)據(jù)。
[0080]參照圖9,命令池902可以是緩沖器或隊列。例如,命令池902包括多個寄存器。RDF206接收存儲命令904,并且確定存儲命令904對于命令池902中的存儲命令906和908的依賴性。而且,RDF206確定存儲命令906和908對存儲命令904的依賴性。例如,如果存儲命令904是行命令,則RDF206將存儲命令904的排地址與存儲命令906和908的排地址進行比較,并且將存儲命令904的存儲體地址與存儲命令906和908的存儲體地址進行比較,以確定存儲命令904是否依賴于存儲命令906和908,并且還確定存儲命令906和908是否依賴于存儲命令904。具有某一排地址的存儲命令不依賴于具有不同的排地址的另一存儲命令。作為另一示例,如果存儲命令904是列命令,則RDF206將存儲命令904的存儲地址與存儲命令906和908的存儲地址進行比較,以確定存儲命令904對于存儲命令906和908的依賴性,并且確定存儲命令906和908對于存儲命令904的依賴性。
[0081 ] 在確定了依賴性后,RDF206將來自命令隊列(未示出)的存儲命令904加載到命令池902中。該命令隊列可以在RDF206之內(nèi)或之外。RDF206可以基于命令池902的槽的可用性將存儲命令904加載到該槽中。例如,如果命令池902內(nèi)的槽為空并因而可用于容納存儲命令904,則存儲命令904可以被加載到該槽中。作為另一示例,如果命令池902內(nèi)的多個槽沒有可用的,則RDF206等待將存儲命令904加載到命令池902中。
[0082]命令可以加載到池中,加載到任何空閑的槽中,而非利用標(biāo)識符或利用編號系統(tǒng)來分配池槽。也就是說,可以不需要作為存儲命令904的任何地址或?qū)傩缘慕Y(jié)果來使存儲命令904進入命令池槽902。與利用標(biāo)識符或編號來分配池槽相比,存儲控制器108在可用的槽中進行加載提高了 RDF206的效率。槽可以包括若干存儲元件。
[0083]當(dāng)將存儲命令加載到命令池902中時,存儲命令與示出了對于命令池902中的其它存儲命令的存儲命令依賴性的比特矢量相關(guān)聯(lián)。例如,存儲命令906與行矢量802相關(guān)聯(lián),并且存儲命令908與列矢量804相關(guān)聯(lián)。
[0084]針對命令池902中所加載的存儲命令904、906和908中的每一個存儲命令,RDF206確定該存儲命令是否依賴于存儲命令池902中的現(xiàn)有的存儲命令。例如,與門與存儲命令904的比特矢量的比特位置910、912和914耦接。如果比特位置910、912和914都具有斷言值(asserted value),則與門輸出斷言值。比特位置910、912和914的斷言值指示存儲命令904不依賴于存儲命令906和908。由與門輸出的斷言值指示刷新信號(flushsignal)的存在。
[0085]另一方面,如果比特位置910、912和914處的任何值或全部值都未斷言,則與門的輸出是未斷言的,并且該未斷言指示缺少刷新信號。應(yīng)注意的是,與門的輸入沒有耦接至對存儲命令針對存儲命令自身的依賴性進行指示的比特位置。與門對關(guān)鍵路徑?jīng)]有貢獻或沒有最低程度地貢獻。
[0086]在確定了存儲命令904不依賴于其余的存儲命令906和908時,RDF206通過向仲裁器208發(fā)送刷新信號來發(fā)信號通知仲裁器208缺乏依賴性,并且從命令池902刷新(例如,刪除)存儲命令904。在接收到刷新信號時,仲裁器208向存儲系統(tǒng)102發(fā)出存儲命令904。
[0087]在刷新來自命令池902的存儲命令904時,RDF206去除其余的存儲命令906和908針對存儲命令904的依賴性。一旦刷新了存儲命令904,就不能改變存儲命令904與命令池902中的其它存儲命令906和908之間的依賴性。而且,在將存儲命令904加載在命令池902中的時間與從命令池902刷新存儲命令904的時間之間,存儲命令904占用命令池902中的相同的槽。
[0088]在不同的實施方式中,應(yīng)注意的是,標(biāo)識符和/或編號可以用于將存儲命令904與命令池902的槽相關(guān)聯(lián)。在某些實施方式中,在從命令隊列發(fā)出存儲命令904與將存儲命令904加載在命令池902中之間的時段期間,RDF206僅一次地確定在存儲命令904與其余的存儲命令906和908之間的依賴性。與這樣的情況相比,即,在從將存儲命令904加載到命令池902中到撤回生成了存儲命令904的用戶事務(wù)的時段期間多次地確定存儲命令904與其余的存儲命令906和908之間的依賴性,這種一次性的確定幫助提高了 RDF206的效率。在完成了該用戶事務(wù)中所指示的讀取或?qū)懭胫?,可以由存儲控制?08從存儲控制器108撤回用戶事務(wù)。
[0089]在某些實施方式中,可以使用任何其它類型的門(例如,或門、或非門或與非門)來代替與門。
[0090]而且,在一種實施方式中,在從仲裁器208發(fā)出存儲命令904之后,將存儲命令904從命令池902刷新。在某些實施方式中,在由仲裁器208從存儲控制器108向存儲系統(tǒng)102發(fā)出存儲命令904之后,RDF206去除存儲命令906和908針對存儲命令904的依賴性。也就是說,當(dāng)從系統(tǒng)撤回對應(yīng)的存儲命令時,可以去除依賴性比特。例如,可以使用逐位運算來更新關(guān)于命令刷新的矢量,以去除與撤回的命令相對應(yīng)的比特。
[0091]還應(yīng)注意的是,在不同的實施方式中,RDF206可以被禁用。在這種實施方式中,RDF206不對從MTF204接收到的存儲命令進行重排序。相反地,仲裁器208按照與RDF206從MTF204接收存儲命令的次序相同的次序發(fā)出存儲命令。
[0092]參照圖10,對包括PLD的IC芯片1000進行描述。PLD可以是FPGA。IC芯片1000可以包括:多個邏輯陣列塊1002 (LAB)、布線架構(gòu)1003和多個輸入/輸出(IO)焊盤1004。還注意到,LAB1002a、1002b、1002c或1002d可以包括一個或更多個邏輯元件(LE)。每個LE都包括一個或更多個組件,例如多路選擇器、寄存器、邏輯門和加法器。
[0093]布線架構(gòu)1003可以包括多個開關(guān)1006。LAB1002可以經(jīng)由布線架構(gòu)1003彼此耦接。布線架構(gòu)1003可以包括多條垂直LAB線1008和多條水平LAB線1010。LAB1001可以具有一個或更多個LAB輸入部1012以及一個或更多個LAB輸出部1014。
[0094]IO焊盤1004可以包括一個或更多個緩沖器。IO焊盤1004可以與布線架構(gòu)1002耦接。可以利用存儲在與開關(guān)耦接的存儲單元內(nèi)的配置比特來配置開關(guān)1006a、1006b或1006c。
[0095]LAB1002d可以經(jīng)由LAB輸入部1012d接收來自另一 LAB1002c的輸入信號或來自經(jīng)由IO焊盤1004g和布線架構(gòu)1003的片外裝置的輸入信號,可以向該輸入信號施加用于生成輸出信號的功能,并且經(jīng)由LAB輸出部1014d提供輸出信號??梢曰诳梢越?jīng)由配置比特來選擇的選擇輸入部來提供輸入信號。配置比特存儲在耦接至選擇輸入部的存儲單元中。IO焊盤1004d可以直接地或者經(jīng)由一個或更多個開關(guān)1006接收從LAB1002d輸出的輸出信號,并且可以將該輸出信號發(fā)送至片外裝置。
[0096]在某些實施方式中,一個或更多個LAB1001可以被替換為RAM模塊、數(shù)字信號處理(DSP)模塊、存儲控制器108或緩沖器模塊。應(yīng)注意的是,在不同的實施方式中,IC芯片1000可以包括任何數(shù)目的LAB1001、垂直LAB線1008、水平LAB線1010、開關(guān)1006和IO焊盤 1004。
[0097]應(yīng)注意的是,盡管針對PLD描述了上述系統(tǒng)和方法的某些實施方式,但在不同實施方式中,系統(tǒng)和方法可以應(yīng)用于ASIC。而且,盡管可以在PLD的背景下描述系統(tǒng)和方法的不同的實施方式的系統(tǒng)和方法,但應(yīng)認識到,不同的系統(tǒng)和方法可以應(yīng)用于可編程片上系統(tǒng)(SOPC)、復(fù)雜PLD (CPLD)和其它集成電路裝置。
[0098]盡管已經(jīng)出于清楚和理解的目的通過例示和示例的方式詳細描述了前述的系統(tǒng)和方法,但應(yīng)認識到,在不脫離系統(tǒng)和方法的精神或基本特征的情況下,上述系統(tǒng)和方法可以實現(xiàn)為許多其它的變型例和實施方式。可以實踐特定的改變和修改,并且應(yīng)理解的是,系統(tǒng)和方法不受限于前述細節(jié),而是由所附權(quán)利要求的范圍來限定。
【權(quán)利要求】
1.一種存儲控制器,該存儲控制器包括: 能夠接收用戶事務(wù)的接口; 用于連接至存儲裝置的接口 ;以及 邏輯電路,所述邏輯電路被設(shè)置成: 將用戶事務(wù)分配給存儲命令池中的用戶事務(wù)池槽; 通過確定與所述用戶事務(wù)相關(guān)聯(lián)的一個或更多個行存儲命令或列存儲命令來計算所述用戶事務(wù)的行命令依賴性和列命令依賴性;以及 生成與所述行命令依賴性和列命令依賴性相關(guān)聯(lián)的至少一個比特矢量,其中,每個比特矢量都對應(yīng)于所述一個或更多個行存儲命令或列存儲命令中的一個存儲命令,其中,所述每個比特矢量都包括與在所述一個或更多個行存儲命令或列存儲命令中的所述一個存儲命令和所述存儲命令池中的其它存儲命令之間的依賴性有關(guān)的依賴性信息。
2.根據(jù)權(quán)利要求1所述的存儲控制器,其中,當(dāng)將所述用戶事務(wù)加載到所述存儲命令池中時計算所述行命令依賴性和列命令依賴性。
3.根據(jù)權(quán)利要求1所述的存儲控制器,其中,將兩個或更多個比特矢量分配給所述存儲命令池中的每個所述用戶事務(wù)池槽,并且其中,所述兩個或更多個比特矢量表示行依賴性和列依賴性。
4.根據(jù)權(quán)利要求1所述的存儲控制器,其中,隨著從所述存儲命令池刷新存儲命令,行依賴性和列依賴性遞增地更新。
5.根據(jù)權(quán)利要求2所述的存儲控制器,其中,隨著從所述存儲命令池刷新存儲命令,行依賴性和列依賴性遞增地更新。
6.根據(jù)權(quán)利要求1所述的存儲控制器,其中,所述用戶事務(wù)被加載到所述存儲命令池的可用的用戶事務(wù)池槽中,其中,所述可用的用戶事務(wù)池槽既沒有被預(yù)定也沒有被外部標(biāo)識符所標(biāo)識。
7.一種方法,該方法包括以下步驟: 將用戶事務(wù)分配給存儲命令池中的用戶事務(wù)池槽; 通過確定與所述用戶事務(wù)相關(guān)聯(lián)的一個或更多個行存儲命令或列存儲命令來計算所述用戶事務(wù)的行命令依賴性和列命令依賴性;以及 生成與所述行命令依賴性和列命令依賴性相關(guān)聯(lián)的至少一個比特矢量,其中,每個比特矢量都對應(yīng)于所述一個或更多個行存儲命令或列存儲命令中的一個存儲命令,其中,所述每個比特矢量都包括與在所述一個或更多個行存儲命令或列存儲命令中的所述一個存儲命令和所述存儲命令池中的其它存儲命令之間的依賴性有關(guān)的依賴性信息。
8.根據(jù)權(quán)利要求7所述的方法,其中,當(dāng)將所述用戶事務(wù)加載到所述存儲命令池中時計算所述行命令依賴性和列命令依賴性。
9.根據(jù)權(quán)利要求7所述的方法,其中,將兩個或更多個比特矢量分配給所述存儲命令池中的每個所述用戶事務(wù)池槽,并且其中,所述兩個或更多個比特矢量表示行依賴性和列依賴性。
10.根據(jù)權(quán)利要求7所述的方法,其中,隨著從所述存儲命令池刷新存儲命令,行依賴性和列依賴性遞增地更新。
11.根據(jù)權(quán)利要求8所述的方法,其中,隨著從所述存儲命令池刷新存儲命令,所述行依賴性和列依賴性遞增地更新。
12.根據(jù)權(quán)利要求7所述的方法,其中,所述用戶事務(wù)被加載到所述存儲命令池的可用的用戶事務(wù)池槽中,其中,所述可用的用戶事務(wù)池槽既沒有被預(yù)定也沒有被外部標(biāo)識符所標(biāo)識。
13.一種用于在重排序存儲控制器中實現(xiàn)依賴性檢測的方法,該方法包括以下步驟: 在所述重排序存儲控制器處確定多個存儲命令的依賴性;并且 生成兩組比特矢量來標(biāo)識所述依賴性, 其中,第一組比特矢量表示所述多個存儲命令中的行命令的依賴性,而第二組比特矢量表示所述多個存儲命令中的列命令的依賴性。
14.根據(jù)權(quán)利要求13所述的方法,其中,所確定的依賴性包括來自數(shù)據(jù)沖突的依賴性。
15.根據(jù)權(quán)利要求14所述的方法,其中,所述依賴性基于重排序策略、控制命令和/或多播命令。
16.根據(jù)權(quán)利要求14所述的方法,其中,所述多個存儲命令的所述依賴性包括在來自同一用戶事務(wù)的行命令與列命令之間的依賴性。
17.根據(jù)權(quán)利要求13所述的方法,其中,所述多個存儲命令的所述依賴性取決于與第一用戶事務(wù)相關(guān)聯(lián)的行命令或列命令是否依賴于與第二用戶事務(wù)相關(guān)聯(lián)的列命令。
18.根據(jù)權(quán)利要求13所述的方法,其中,當(dāng)與各個依賴性相關(guān)聯(lián)的存儲命令被加載到存儲命令池中時確定所述各個依賴性。
19.根據(jù)權(quán)利要求14所·述的方法,其中,當(dāng)將所述多個存儲命令中的任何存儲命令從所述存儲命令池去除時遞增地更新所述多個存儲命令中的每個存儲命令的各個依賴性。
20.一種存儲有指令的計算機可讀介質(zhì),在由處理器執(zhí)行指令時,使所述處理器執(zhí)行以下操作,所述操作包括: 將用戶事務(wù)分配給存儲命令池中的用戶事務(wù)池槽; 通過確定與所述用戶事務(wù)相關(guān)聯(lián)的一個或更多個行存儲命令或列存儲命令來計算所述用戶事務(wù)的行命令依賴性和列命令依賴性;以及 生成與所述行命令依賴性和列命令依賴性相關(guān)聯(lián)的至少一個比特矢量,其中,每個比特矢量都與所述一個或更多個行存儲命令和列存儲命令中的一個存儲命令相關(guān),其中,所述每個比特矢量都包括在所述一個或更多個行存儲命令或列存儲命令中的所述一個存儲命令和存儲在所述存儲命令池中的多個其它存儲命令之間的依賴性信息。
【文檔編號】G06F12/00GK103597460SQ201280027850
【公開日】2014年2月19日 申請日期:2012年4月6日 優(yōu)先權(quán)日:2011年4月8日
【發(fā)明者】G·R·邱, T·M·吳, M·A·賈茲米, Y·Y·翁 申請人:奧特拉有限公司