本發(fā)明大體上涉及數(shù)據(jù)存儲系統(tǒng),并且更確切地說涉及具有高速緩沖存儲器的數(shù)據(jù)存儲系統(tǒng)。
背景技術(shù):
具有高速緩沖存儲器的數(shù)據(jù)存儲子系統(tǒng)可以充當(dāng)緩沖器以用于主控計(jì)算機(jī)系統(tǒng)與后端數(shù)據(jù)存儲裝置(例如,磁盤驅(qū)動(dòng)器陣列或非易失性(例如,快閃)存儲器陣列)之間的頻繁存取的數(shù)據(jù)。具有高速緩沖存儲器的數(shù)據(jù)存儲子系統(tǒng)可為(例如)采用促進(jìn)主機(jī)與后端數(shù)據(jù)存儲裝置之間的低數(shù)據(jù)存取時(shí)延的加速器卡的形式。高速緩沖存儲系統(tǒng)可以確定存儲在高速緩沖存儲器中的數(shù)據(jù)被存取的頻率,并且僅維持高速緩沖存儲器中的最頻繁存取的數(shù)據(jù)同時(shí)逐出最不頻繁存取的數(shù)據(jù)。
在高速緩沖存儲系統(tǒng)中,希望的是最小化時(shí)延,時(shí)延是在從接收來自主機(jī)的請求到寫入或讀取數(shù)據(jù)并且完成寫入或讀取操作之間的時(shí)間量。影響時(shí)延的特性是高速緩沖存儲系統(tǒng)將主機(jī)所識別的邏輯地址轉(zhuǎn)移到高速緩沖存儲器中的物理存儲位置中所需要的查找時(shí)間以及高速緩沖存儲系統(tǒng)隨后將數(shù)據(jù)傳送到那些存儲位置或從那些存儲位置傳送數(shù)據(jù)所需要的時(shí)間。
常見類型的高速緩沖存儲被稱為“回寫”,其中在寫入請求中從主機(jī)接收的數(shù)據(jù)是首先存儲在高速緩沖存儲器中的并且使其可用于主機(jī)來進(jìn)行讀取,且隨后當(dāng)促進(jìn)復(fù)制操作的條件對時(shí)延不太有影響時(shí)稍后復(fù)制到后端存儲裝置。存儲在高速緩沖存儲器中但是尚未被復(fù)制到后端存儲裝置的數(shù)據(jù)通常被稱為“臟”數(shù)據(jù)。回寫高速緩沖存儲的缺點(diǎn)在于臟數(shù)據(jù)可能易受由于系統(tǒng)故障(例如,電源中斷)的損失的影響。類似地,數(shù)據(jù)損失可以由中斷高速緩沖存儲器中的存儲數(shù)據(jù)的過程的此類故障引起,這可以不合需要地引起一系列存儲位置,包含與第一寫入請求相關(guān)聯(lián)的數(shù)據(jù)的一部分以及與隨后寫入請求相關(guān)聯(lián)的數(shù)據(jù)的一部分。
高速緩沖存儲系統(tǒng)可以是直接映射的、完全關(guān)聯(lián)的或此類類型的混合。在直接映射高速緩沖存儲系統(tǒng)中,數(shù)據(jù)塊的邏輯地址僅映射到高速緩沖存儲器中的一個(gè)地址或物理位置,在所述位置處可以存儲數(shù)據(jù)塊。舉例來說,物理地址可以通過模塊化算術(shù)計(jì)算:高速緩沖存儲地址=邏輯地址模數(shù)(高速緩沖存儲器中的地址的數(shù)目)。相比之下,在完全關(guān)聯(lián)高速緩沖存儲系統(tǒng)中,高速緩沖存儲塊可以存儲在高速緩沖存儲器中的任何物理存儲器位置中。完全關(guān)聯(lián)的高速緩沖存儲系統(tǒng)總體上有益于存儲器使用效率和命中率。然而,完全關(guān)聯(lián)高速緩沖存儲系統(tǒng)的缺點(diǎn)在于用于將所識別的邏輯地址轉(zhuǎn)移到高速緩沖存儲器中的物理存儲位置中的查找過程可能是緩慢的并且因此影響時(shí)延。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的實(shí)施例涉及操作的高速緩沖存儲系統(tǒng)和方法。在示例性實(shí)施例中,高速緩沖存儲系統(tǒng)包括高速緩沖存儲器和經(jīng)編程或經(jīng)配置以實(shí)行所述方法的處理系統(tǒng)。
在示例性實(shí)施例中,所述方法包括:接收指示一或多個(gè)邏輯地址和待對應(yīng)地寫入一或多個(gè)邏輯地址的一或多個(gè)數(shù)據(jù)塊的寫入請求;響應(yīng)于寫入請求,從自由列表分配高速緩沖存儲器中的一或多個(gè)物理位置;在不考慮到一或多個(gè)邏輯地址的任何讀取請求是否是待決的情況下將一或多個(gè)數(shù)據(jù)塊存儲在一或多個(gè)物理位置中;在一或多個(gè)數(shù)據(jù)塊已經(jīng)存儲在一或多個(gè)物理位置中之后,并且在不考慮任何讀取請求是否是針對一或多個(gè)邏輯地址待決的情況下,更新元數(shù)據(jù)以使一或多個(gè)物理位置與一或多個(gè)邏輯地址相關(guān)聯(lián);維持針對高速緩沖存儲器中具有有效數(shù)據(jù)的每個(gè)物理位置待決的包括讀取請求的數(shù)據(jù)存取請求的使用計(jì)數(shù);以及當(dāng)使用計(jì)數(shù)指示沒有數(shù)據(jù)存取請求是針對物理位置待決時(shí)將物理位置返回到自由列表。
附圖說明
圖1是說明根據(jù)本發(fā)明的示例性實(shí)施例的高速緩沖存儲系統(tǒng)的方塊圖。
圖2是說明根據(jù)示例性實(shí)施例的高速緩沖存儲器的廣義映射的概念圖。
圖3是根據(jù)示例性實(shí)施例說明數(shù)據(jù)結(jié)構(gòu)之中的示例性關(guān)系的數(shù)據(jù)關(guān)系圖。
圖4是說明根據(jù)示例性實(shí)施例的示例性高速緩沖存儲區(qū)段鏈表和相關(guān)聯(lián)的示例性緩沖塊的另一數(shù)據(jù)關(guān)系圖。
圖5說明根據(jù)示例性實(shí)施例的示例性分散-聚集列表。
圖6a是說明根據(jù)示例性實(shí)施例的寫入操作的流程圖。
圖6b是圖6a的流程圖的延續(xù)。
圖7a是說明根據(jù)示例性實(shí)施例的讀取操作的流程圖。
圖7b是圖7a的流程圖的延續(xù)。
圖8是說明根據(jù)示例性實(shí)施例的系統(tǒng)的操作方法的流程圖。
圖9是說明根據(jù)示例性實(shí)施例的清空操作的流程圖。
具體實(shí)施方式
如圖1中所說明,在本發(fā)明的說明性或示例性實(shí)施例中,存儲子系統(tǒng)10提供主機(jī)系統(tǒng)12與后端存儲裝置14之間的高速緩沖存儲。主機(jī)系統(tǒng)12可以是任何類型的常規(guī)的計(jì)算機(jī)系統(tǒng)或計(jì)算機(jī)系統(tǒng)的網(wǎng)絡(luò)。后端存儲裝置14可以是任何類型的常規(guī)數(shù)據(jù)量存儲系統(tǒng)。舉例來說,后端存儲裝置14可以包括多個(gè)物理數(shù)據(jù)存儲裝置16、18、20等的陣列。此類物理數(shù)據(jù)存儲裝置16、18、20等的實(shí)例包括磁盤驅(qū)動(dòng)器、快閃存儲器模塊和其它類型的非易失性數(shù)據(jù)存儲裝置。
在本文中描述的示例性實(shí)施例中,在后端存儲裝置14中的多個(gè)物理數(shù)據(jù)存儲裝置16、18、20等的陣列可符合通常參考“磁盤陣列”或“獨(dú)立(或便宜的)磁盤的冗余陣列”)的頂罩下的原理中的一或多個(gè)。舉例來說,根據(jù)被稱為分割法的常見磁盤陣列原理,后端存儲裝置14可在條帶22的單元中存儲數(shù)據(jù)。物理數(shù)據(jù)存儲裝置16、18、20等中的每一個(gè)存儲每個(gè)條帶22的一部分。后端存儲裝置14可以包括任何數(shù)目的物理存儲裝置16、18、20等。(圖1中的省略號(“…”)指示包含于陣列中的額外的物理數(shù)據(jù)存儲裝置,但是為了清楚起見未單獨(dú)地示出它們。)由于例如分割法的磁盤陣列原理是所屬領(lǐng)域的技術(shù)人員很好的理解的,所以未在本文中進(jìn)一步詳細(xì)描述此類原理。并且,包括多個(gè)物理數(shù)據(jù)存儲裝置16、18、20等(例如,磁盤)或符合磁盤陣列原理等的后端存儲裝置14的上述描述是僅出于描述可以與本發(fā)明相關(guān)聯(lián)的示例性數(shù)據(jù)存儲環(huán)境或背景的目的提供的,且并非意圖進(jìn)行限制。舉例來說,如本文所使用,術(shù)語“邏輯地址”應(yīng)當(dāng)不被解釋為將本發(fā)明限制于任何特定的物理數(shù)據(jù)存儲環(huán)境、組織、方案等。
在示例性實(shí)施例中,存儲子系統(tǒng)10包括高速緩沖存儲器24。高速緩沖存儲器24可以是任何類型的,舉例來說,例如,雙數(shù)據(jù)速率動(dòng)態(tài)隨機(jī)存取存儲器(ddr-dram)。存儲子系統(tǒng)10還包括中央處理單元(cpu)26和工作存儲器28。工作存儲器28可以是任何類型的,舉例來說,例如,靜態(tài)ram。雖然cpu26可執(zhí)行一般化的處理任務(wù),但是存儲子系統(tǒng)10進(jìn)一步包括以下特殊化處理元件:消息處理器30、命令處理器32、高速緩沖存儲處理器34、緩沖處理器36、后端處理器38和直接存儲器存取(dma)引擎40。雖然在示例性實(shí)施例中存儲子系統(tǒng)10包括這些特殊化處理元件,但是其它實(shí)施例可以包括更少或更多的處理元件,所述處理元件在此類其它實(shí)施例中可執(zhí)行本文中描述的處理操作中的一些或全部。存儲子系統(tǒng)10還包括系統(tǒng)互連件42,例如,總線的系統(tǒng)或矩陣,通過所述系統(tǒng)互連件上文參考的處理元件可以彼此通信。還可以包括上述參考元件中的其它通信或信號路徑。還可以包括主機(jī)接口44和存儲裝置接口46,存儲子系統(tǒng)10通過所述主機(jī)接口與主機(jī)系統(tǒng)12通信,存儲子系統(tǒng)10通過所述存儲裝置接口與后端存儲裝置14通信。主機(jī)接口44可符合通信總線標(biāo)準(zhǔn),舉例來說,例如,周邊組件高速互連(pcie)并且包括相關(guān)聯(lián)的pcie控制器。另外,還可以包括例如存儲器接口和相關(guān)聯(lián)的存儲器控制器等其它接口,但是為清楚起見未示出。雖然未示出,但是存儲子系統(tǒng)10可限定插入到主機(jī)系統(tǒng)12的背板或主板中的加速器卡的一部分。上述參考處理元件中的一些或全部可以包含于集成電路裝置(未示出)中,例如,現(xiàn)場可編程門陣列(fpga)、專用集成電路(asic)或其它裝置。
如圖2中所說明,高速緩沖存儲器24可用于存儲下文描述的若干類型的高速緩沖存儲相關(guān)信息。然而,在其它實(shí)施例中,不同類型的數(shù)據(jù)可以存儲在不同存儲器或以任何其它方式組織。在示例性實(shí)施例中高速緩沖存儲器24包括數(shù)據(jù)區(qū)域48、高速緩沖存儲區(qū)段(cs)區(qū)域50、哈希表區(qū)域52、分散-聚集列表(sgl)區(qū)域54和雜項(xiàng)區(qū)域56。如所屬領(lǐng)域的技術(shù)人員所理解,在圖2中為清楚起見以概念性方式描繪了高速緩沖存儲器24的這些區(qū)域的空間布置,并且信息可以任何方式映射或者布置在高速緩沖存儲器24中或其它存儲器中。
高速緩沖存儲的數(shù)據(jù)以被稱作緩沖塊的單元存儲在數(shù)據(jù)區(qū)域48中。所述單元限定數(shù)據(jù)的量,舉例來說,例如,4千字節(jié)(kb)。術(shù)語“塊”意味著數(shù)據(jù)是連續(xù)的。在其中上文所提及的條帶22由例如64kb組成的示例性實(shí)施例中,每個(gè)條帶22因此對應(yīng)于16個(gè)緩沖塊。如在下文中進(jìn)一步詳細(xì)描述的,任何緩沖塊可以高速緩沖存儲或存儲在數(shù)據(jù)區(qū)域48中的任何可供使用的物理位置(即,地址)中而無需考慮緩沖塊的任何排序且無需考慮緩沖塊的物理地址與邏輯地址之間的任何關(guān)系。因此,對應(yīng)于條帶22的緩沖塊未必彼此連續(xù)地存儲。此特征被稱作關(guān)聯(lián)性。
出于說明的目的,某些示例性緩沖塊58、60、62、64、66、68、70、72等被描繪為存儲在數(shù)據(jù)區(qū)域48中的各種物理位置中。(數(shù)據(jù)區(qū)域48中的省略號指示額外的物理位置中的額外的緩沖塊,為清楚起見未示出所述額外的緩沖塊。)數(shù)據(jù)區(qū)域48的存儲容量可以大體上小于后端存儲裝置14的存儲容量。舉例來說,后端存儲裝置14的存儲容量可以為太字節(jié)的數(shù)量級,而數(shù)據(jù)區(qū)域48的存儲容量可以為千兆字節(jié)或兆字節(jié)的數(shù)量級。為了促進(jìn)處理,數(shù)據(jù)區(qū)域48中的物理位置可以通過充當(dāng)相對于物理存儲器地址的索引或偏移的緩沖塊標(biāo)識符(bbid)來識別。如下文參考實(shí)例所述,示例性緩沖塊68、66、70、62和64是按照由虛線箭頭所指示的方式排序的,其中示例性緩沖塊68是序列中的第一者,并且示例性緩沖塊64是序列中的最后一者(其中額外的緩沖塊由省略號指示,但是為清楚起見未示出)。示例性緩沖塊58、60、62、64、66、68、70和72在圖2中描繪為分散在數(shù)據(jù)區(qū)域48中各處而不是集群在一起是意圖舉例說明關(guān)聯(lián)性。
出于說明的目的,某些示例性高速緩沖存儲區(qū)段74、76、78等被描繪為存儲在高速緩沖存儲區(qū)段區(qū)域50中的物理位置中。額外的高速緩沖存儲區(qū)段由省略號指示但為清楚起見未示出。如在下文中進(jìn)一步詳細(xì)描述的,高速緩沖存儲區(qū)段是包含描述高速緩沖存儲的緩沖塊的元數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。
在圖3中說明哈希表80與高速緩沖存儲區(qū)段102相關(guān)的方式。哈希表80可以存儲在哈希表區(qū)域52中(圖2)。哈希函數(shù)84被應(yīng)用到數(shù)據(jù)的邏輯地址,所述邏輯地址是通過主機(jī)系統(tǒng)12起始的寫入操作或讀取操作(其還可以被相應(yīng)地稱作寫入輸入/輸出(i/o)操作和讀取i/o操作)的目標(biāo)。寫入或讀取操作通常是響應(yīng)于存儲子系統(tǒng)10從主機(jī)12接收到以下項(xiàng)而起始:寫入請求或讀取請求、將被寫入或讀取的數(shù)據(jù)的量的指示以及數(shù)據(jù)的一或多個(gè)邏輯地址。如所屬領(lǐng)域的一般技術(shù)人員很好理解的,與其中存儲子系統(tǒng)10和后端存儲裝置14對數(shù)據(jù)進(jìn)行操作的物理地址空間相比,術(shù)語“邏輯地址”是指其中主機(jī)系統(tǒng)12對數(shù)據(jù)進(jìn)行操作的地址空間。
哈希表80包括多個(gè)(n個(gè))槽位,其中示出了第一示例性槽位82、第二示例性槽位84等直到另一個(gè)示例性槽位86,并且最多達(dá)到最后或“第n個(gè)”示例性槽位88,其中額外的槽位是通過省略號指示的,但為清楚起見未示出。雖然哈希表80可以具有任何數(shù)目的槽位,但是所述數(shù)目通常大體上小于主機(jī)地址空間中的邏輯地址的數(shù)目。哈希函數(shù)84的實(shí)例是:槽位=(lba)mod(n),其中“槽位”表示到哈希表80中的槽位的指數(shù),“l(fā)ba”表示邏輯地址,并且mod或模除是模塊化算術(shù)函數(shù)。由于哈希函數(shù)到指數(shù)的使用是在本領(lǐng)域中很好理解的,所以在本文中未描述進(jìn)一步的細(xì)節(jié)。
每個(gè)槽位具有多個(gè)表項(xiàng)90。舉例來說,哈希表80的每個(gè)槽位可以具有四個(gè)表項(xiàng)90。每個(gè)哈希表槽位采用多個(gè)(即,兩個(gè)或大于兩個(gè))表項(xiàng)90而不是每個(gè)哈希表槽位單個(gè)表項(xiàng)可以幫助最小化“沖突”,這是因?yàn)橥ǔT诒绢I(lǐng)域中參考哈希表地址沖突。如下文所述,(在未中的情況下)槽位內(nèi)的任何空的表項(xiàng)90可用于滿足寫入請求。在占據(jù)槽位的全部表項(xiàng)的實(shí)例中,可以采用鏈表的形式添加隨后的額外的表項(xiàng)92、94等。
每個(gè)表項(xiàng)90包括邏輯地址字段96、高速緩沖存儲區(qū)段標(biāo)識符(csid)字段98和有效表項(xiàng)字段或位(v)100。如下文關(guān)于寫入和讀取操作的實(shí)例所述,高速緩沖存儲區(qū)段標(biāo)識符字段98經(jīng)配置以存儲高速緩沖存儲區(qū)段標(biāo)識符(例如,指針),所述標(biāo)識符識別或索引存儲在高速緩沖存儲區(qū)段區(qū)域50中的高速緩沖存儲區(qū)段(圖2)。
通過高速緩沖存儲區(qū)段標(biāo)識符所識別的每個(gè)高速緩沖存儲區(qū)段可以具有圖3中所示的示例性高速緩沖存儲區(qū)段102的結(jié)構(gòu)。每個(gè)此類高速緩沖存儲區(qū)段包括多個(gè)高速緩沖存儲區(qū)段列表元素,其中示出了第一示例性高速緩沖存儲區(qū)段列表元素104、第二示例性高速緩沖存儲區(qū)段列表元素106等一直到最后示例性高速緩沖存儲區(qū)段列表元素108,其中額外的高速緩沖存儲區(qū)段列表元素通過省略號指示,但是為清楚起見未單獨(dú)地示出。在其中上文參考的條帶22對應(yīng)于16個(gè)緩沖塊的示例性實(shí)施例中,每個(gè)高速緩沖存儲區(qū)段可對應(yīng)地具有16個(gè)高速緩沖存儲區(qū)段列表元素以使得每個(gè)高速緩沖存儲區(qū)段列表元素可以對應(yīng)于那些緩沖塊中的一個(gè)。仍然,在其它實(shí)施例中每個(gè)高速緩沖存儲區(qū)段可以具有任何數(shù)目的高速緩沖存儲區(qū)段列表元素。
每個(gè)高速緩沖存儲區(qū)段列表元素包括以下旗標(biāo)字段:緩沖塊標(biāo)識符(bbid)字段110、有效緩沖塊字段或位(v)112;臟緩沖塊字段或位(d)114;清空緩沖塊字段或位(f)116;以及使用計(jì)數(shù)(cnt)字段118。雖然下文關(guān)于寫入和讀取操作論述了旗標(biāo)存儲在這些旗標(biāo)字段中的方式,但是可以注意到以下內(nèi)容。高速緩沖存儲區(qū)段列表元素的有效(緩沖塊)位112指示通過所述高速緩沖存儲區(qū)段列表元素的緩沖塊標(biāo)識符字段110所識別的緩沖塊是否是有效的。如所屬領(lǐng)域的技術(shù)人員所理解,術(shù)語“有效的”常在高速緩沖存儲到高速緩沖存儲器中的指示位置中的情形下使用,數(shù)據(jù)已經(jīng)被寫入所述指示位置中。高速緩沖存儲區(qū)段列表元素的臟(緩沖塊)位114指示通過所述高速緩沖存儲區(qū)段列表元素的緩沖塊標(biāo)識符字段110所識別的緩沖塊是否是臟的。如所屬領(lǐng)域的技術(shù)人員所理解,術(shù)語“臟”常在高速緩沖存儲指代尚未被復(fù)制到后端存儲裝置14的高速緩沖存儲的數(shù)據(jù)的情形下使用。高速緩沖存儲區(qū)段列表元素的清空(緩沖塊)位116指示通過所述高速緩沖存儲區(qū)段列表元素的緩沖塊標(biāo)識符字段110所識別的緩沖塊是否在被逐出或“清空”到后端存儲裝置14的過程中。高速緩沖存儲區(qū)段列表元素的使用計(jì)數(shù)字段118指示數(shù)據(jù)存取請求的數(shù)目,包括讀取請求和清空操作,這是針對通過高速緩沖存儲區(qū)段列表元素的緩沖塊標(biāo)識符字段110所識別的緩沖塊待決的。高速緩沖存儲區(qū)段的這些字段因此充當(dāng)描述通過所述高速緩沖存儲區(qū)段的緩沖塊標(biāo)識符字段110所識別的緩沖塊的方面的元數(shù)據(jù)。
每個(gè)高速緩沖存儲區(qū)段還包括先前高速緩沖存儲區(qū)段標(biāo)識符字段120和下一高速緩沖存儲區(qū)段標(biāo)識符字段122。如圖4中所說明,這些字段可用于在雙鏈表中鏈接多個(gè)高速緩沖存儲區(qū)段。舉例來說,另一個(gè)示例性高速緩沖存儲區(qū)段124可以鏈接到示例性高速緩沖存儲區(qū)段102,并且又另一個(gè)示例性高速緩沖存儲區(qū)段126可以鏈接到示例性高速緩沖存儲區(qū)段124等。高速緩沖存儲區(qū)段的此類雙鏈表的其它實(shí)例(未示出)可以包括任何數(shù)目的高速緩沖存儲區(qū)段。此類鏈表中的每個(gè)高速緩沖存儲區(qū)段識別存儲在數(shù)據(jù)區(qū)域48中的一或多個(gè)緩沖塊或與其相關(guān)聯(lián)(通過其緩沖塊標(biāo)識符字段110)(圖1)。舉例來說,參考圖4并且再次參考圖2:示例性高速緩沖存儲區(qū)段102可識別示例性緩沖塊68、66和70以及額外的緩沖塊(未單獨(dú)示出但是通過省略號表示)直到另一個(gè)示例性緩沖塊128或與所述示例性緩沖塊相關(guān)聯(lián);示例性高速緩沖存儲區(qū)段124可識別又一示例性緩沖塊130以及額外的緩沖塊(未單獨(dú)示出但是通過省略號表示)直到緩沖塊62或與所述緩沖塊相關(guān)聯(lián);并且示例性高速緩沖存儲區(qū)段126可識別緩沖塊64或與所述緩沖塊相關(guān)聯(lián)。
應(yīng)注意根據(jù)示例性實(shí)施例上述參考條帶22對應(yīng)于16個(gè)緩沖塊:高速緩沖存儲區(qū)段102的16個(gè)高速緩沖存儲區(qū)段列表元素(未示出)對應(yīng)于16個(gè)示例性緩沖塊68、66、70等直到128;并且高速緩沖存儲區(qū)段124的16個(gè)高速緩沖存儲區(qū)段列表元素(未示出)對應(yīng)于16個(gè)示例性緩沖塊130等直到62。注意在圖2和4中所示的實(shí)例中,鏈表中的最終高速緩沖存儲區(qū)段126對應(yīng)于僅一個(gè)示例性緩沖塊64,因?yàn)樵诖藢?shí)例中所涉及的緩沖塊的總數(shù)并不是16的倍數(shù)。在此實(shí)例中,高速緩沖存儲區(qū)段126的一個(gè)高速緩沖存儲區(qū)段列表元素將包含有效的緩沖塊標(biāo)識符,而剩余的15個(gè)將不包含有效的緩沖塊標(biāo)識符(并且因此其有效位將是“0”或解除斷言的)。如下文所述,寫入請求可指示寫入的任何數(shù)目的緩沖塊。指示與高速緩沖存儲區(qū)段中的高速緩沖存儲區(qū)段列表元素的數(shù)目(例如,16)相比較少的緩沖塊的寫入請求可能僅需要一個(gè)高速緩沖存儲區(qū)段來完成,而指示大于緩沖塊數(shù)目的寫入操作可能需要多個(gè)高速緩沖存儲區(qū)段(如上文所述鏈接在一起)。
作為數(shù)據(jù)結(jié)構(gòu)的分散-聚集列表(sgl)可用于傳送識別數(shù)據(jù)區(qū)域48中的物理位置的信息,在所述物理位置中存儲緩沖塊。任何數(shù)目的sgl可以被鏈接在一起。舉例來說,如圖5中所說明,第一sgl132可以具有包含識別示例性緩沖塊68、66和70的物理位置的信息的分散-聚集表項(xiàng)(sge),而第二sgl134可以具有包含識別示例性緩沖塊62和64的物理位置的信息的分散-聚集表項(xiàng)(sge)。第一sgl132包括指向第二sgl134的鏈接(sglid)。至少第一sgl132還可以包含與緩沖塊相關(guān)聯(lián)的高速緩沖存儲區(qū)段的高速緩沖存儲區(qū)段標(biāo)識符(csid)。
如圖6a到6b的流程圖所說明,可以如下處理寫入請求。如塊136所指示,存儲子系統(tǒng)10接收來自主機(jī)系統(tǒng)12的寫入請求通知。寫入請求指示一或多個(gè)邏輯地址和待對應(yīng)地寫入一或多個(gè)邏輯地址的數(shù)據(jù)的一或多個(gè)塊。數(shù)據(jù)是從主機(jī)12中在與緩沖塊相同大小(舉例來說,例如,4kb)的塊中接收的。寫入請求可以指示待寫入的任何數(shù)目的數(shù)據(jù)塊。另外參考圖1,消息處理器30可以接收寫入請求并且將信息提供到命令處理器32,所述信息使得命令處理器32起始寫入操作。
如塊138(圖6a)所指示,緩沖處理器36(圖1)響應(yīng)于通過在來自自由列表(未示出)的數(shù)據(jù)區(qū)域48中分配一或多個(gè)物理位置的寫入操作的起始。自由列表指示數(shù)據(jù)區(qū)域48中的物理位置,其中未存儲有效的緩沖塊并且因此有效的緩沖塊對于緩沖塊存儲裝置是可供使用的或“自由的”。物理位置是在不考慮緩沖塊的任何順序的情況下選擇或分配的。舉例來說,注意在圖2中其中存儲有示例性緩沖塊62、64、66、68和70的物理位置彼此之間不相關(guān),其例外之處在于那些物理位置中的每一個(gè)是在執(zhí)行引起它們存儲在那些位置中的寫入操作時(shí)在自由列表中列出的。示例性緩沖塊62、64、66、68和70的邏輯地址可以遵循由它們之間的虛線箭頭所指示的順序,但是所述順序與它們存儲在數(shù)據(jù)區(qū)域48中的物理位置無關(guān)。
如塊140所指示,可以產(chǎn)生包含識別所分配的物理位置的信息的一或多個(gè)sgl(未示出)。sgl被傳送到dma引擎40(圖1)。如塊142進(jìn)一步指示,dma引擎40使用sgl信息以將通過來自主機(jī)12的寫入請求所識別的數(shù)據(jù)塊傳送到數(shù)據(jù)區(qū)域48中的所分配的物理位置。存儲在高速緩沖存儲器24的數(shù)據(jù)區(qū)域48中,數(shù)據(jù)塊現(xiàn)在限定緩沖塊,如上文所述。
如下文所述,在響應(yīng)于寫入請求將數(shù)據(jù)從主機(jī)12傳送到數(shù)據(jù)區(qū)域48之后,高速緩沖存儲處理器34(圖1)更新元數(shù)據(jù)以完成寫入操作。在數(shù)據(jù)的傳送無法被讀取操作打斷的情況下,應(yīng)注意響應(yīng)于寫入請求的寫入操作的完成是原子的。換句話說,在緩沖塊已經(jīng)存儲在數(shù)據(jù)區(qū)域48中的物理位置中之后,更新元數(shù)據(jù)以使物理位置與邏輯地址相關(guān)聯(lián),而不考慮任何讀取請求是否是針對邏輯地址待決的。在事務(wù)處理的詞典中,高速緩沖存儲處理器34通過更新元數(shù)據(jù)“提交”寫入事務(wù),由此確保原子性。以下操作涉及更新此類元數(shù)據(jù)。
如塊144所指示,高速緩沖存儲處理器34在上文描述的哈希表80(圖3)中查找在寫入請求中所識別的一或多個(gè)邏輯地址。如上文所述,哈希函數(shù)84將到指數(shù)中的邏輯地址解析到哈希表80中的槽位。如塊146所指示,高速緩沖存儲處理器34比較邏輯地址與所述槽位中的表項(xiàng)中的每一個(gè)以確定是否存在指示數(shù)據(jù)已經(jīng)高速緩沖存儲在所述邏輯地址中的匹配或“命中”。如果四個(gè)表項(xiàng)中沒有一個(gè)是匹配的,那么高速緩沖存儲處理器34可遵循上文描述的鏈表到額外的表項(xiàng)。如果沒有表項(xiàng)匹配邏輯地址,那么哈希表查詢的結(jié)果是“未中”。
如果高速緩沖存儲處理器34確定(塊146)哈希表查詢的結(jié)果是未中,那么高速緩沖存儲處理器34分配新的高速緩沖存儲區(qū)段,如塊148所指示。新高速緩沖存儲區(qū)段是通過csid識別的,如上文所述。高速緩沖存儲處理器34在槽位表項(xiàng)的可供使用的一個(gè)中存儲csid,或者如果槽位本身的全部(例如,四個(gè))表項(xiàng)被占據(jù),那么槽位的“鏈接”表項(xiàng)的csid被更新以將下一哈希鏈接設(shè)置到新近添加的csid。新csid的先前哈希鏈接被設(shè)置成哈希表的所提及槽位中的“鏈接”表項(xiàng)的csid。隨后,如塊150所指示,對于新近分配的高速緩沖存儲區(qū)段中的每個(gè)高速緩沖存儲區(qū)段列表元素,高速緩沖存儲處理器34將來自sgl的緩沖塊標(biāo)識符復(fù)制到緩沖塊標(biāo)識符字段110(圖3)中,并且設(shè)置它們的有效位和臟位,以及清除清空位和使用計(jì)數(shù)。并且,如塊152所指示,高速緩沖存儲處理器34將新近分配的高速緩沖存儲區(qū)段的高速緩沖存儲區(qū)段標(biāo)識符添加到最近最少使用的(lru)臟鏈表(未示出)的尾部。lru臟鏈表可以用于清空高速緩沖存儲的數(shù)據(jù)到后端存儲裝置14,如下文所述。通過塊146、148、150和152指示的操作涉及寫入請求中的數(shù)據(jù)的一個(gè)條帶22。如塊154所指示,如果寫入請求跨越一個(gè)以上條帶22,那么這些操作是針對每個(gè)條帶22重復(fù)的,對于所述每個(gè)條帶哈希表查詢的結(jié)果是未中。
如果高速緩沖存儲處理器34確定(塊146)哈希表查詢的結(jié)果是命中,那么高速緩沖存儲處理器34讀取由槽位表項(xiàng)所識別的高速緩沖存儲區(qū)段,如塊156所指示。隨后,如塊158所指示,對于“空的”每個(gè)高速緩沖存儲區(qū)段列表元素,即,并不已經(jīng)在其緩沖塊標(biāo)識符字段110中包含有效緩沖塊標(biāo)識符,高速緩沖存儲處理器34將來自sgl的緩沖塊標(biāo)識符復(fù)制到緩沖塊標(biāo)識符字段110中。在所述高速緩沖存儲區(qū)段列表元素中,高速緩沖存儲處理器34還設(shè)置以下旗標(biāo)(圖3):有效位112被設(shè)置成“1”的值(“真實(shí)”);臟位114被設(shè)置成“1”的值(“真實(shí)”);以及使用計(jì)數(shù)118被設(shè)置成零的值。對于并不為空的任何高速緩沖存儲區(qū)段列表元素,即,包含有效的緩沖塊標(biāo)識符,處理在塊162處繼續(xù)(圖6b)。
如塊162和164所指示,如果高速緩沖存儲處理器34確定高速緩沖存儲區(qū)段列表元素的清空位116并不是“0”(“錯(cuò)誤”)或者高速緩沖存儲區(qū)段列表元素的使用計(jì)數(shù)118包含除零之外的值,那么如塊166所指示,高速緩沖存儲處理器34將旗標(biāo)(即,有效位112、臟位114、清空位116和使用計(jì)數(shù)字段118的值)復(fù)制或保存到例如高速緩沖存儲器24(圖1)的雜項(xiàng)區(qū)域56中(如以初始列表元素bbid值作為索引)。一旦保存旗標(biāo),則高速緩沖存儲處理器34可以用從sgl獲得的緩沖塊標(biāo)識符覆寫高速緩沖存儲區(qū)段列表元素的緩沖塊標(biāo)識符字段110,如塊168所指示。對于新近寫入的緩沖塊,旗標(biāo)被設(shè)置成相同級:清空=0,臟=1,有效=1,使用計(jì)數(shù)=0。
然而,如果高速緩沖存儲處理器34確定(塊162和164)高速緩沖存儲區(qū)段列表元素的清空位116是“0”(“錯(cuò)誤”)并且高速緩沖存儲區(qū)段列表元素的使用計(jì)數(shù)118包含零的值,如塊170所指示,那么高速緩沖存儲處理器34將在所述高速緩沖存儲區(qū)段列表元素的緩沖塊標(biāo)識符字段110中的緩沖塊標(biāo)識符解除分配。也就是說,緩沖塊標(biāo)識符返回到上文提及的自由列表。隨后,高速緩沖存儲處理器34用從sgl獲得的緩沖塊標(biāo)識符覆寫所述高速緩沖存儲區(qū)段的緩沖塊標(biāo)識符字段110,如塊168所指示。
并且響應(yīng)于哈希表命中,高速緩沖存儲處理器34更新lru臟鏈表,如塊172所指示。更確切地說,如果確定高速緩沖存儲區(qū)段標(biāo)識符已經(jīng)存在于lru臟鏈表的位置中,那么從所述位置中移除高速緩沖存儲區(qū)段標(biāo)識符,并且用于所述高速緩沖存儲區(qū)段標(biāo)識符的新位置被添加到(即,鏈接到)lru臟鏈表的尾部。因此,最近寫入的高速緩沖存儲區(qū)段標(biāo)識符被移動(dòng)到lru臟鏈表的尾部。如下文所述,以此方式維持lru臟鏈表有助于逐出或清空不太近期寫入(即,最舊的)數(shù)據(jù)到后端存儲裝置14。所述過程隨后繼續(xù),如上文關(guān)于塊158所述。
如果寫入請求跨越一個(gè)以上條帶22,那么上文描述的操作對于哈希表查詢的結(jié)果是命中的每個(gè)條帶22是重復(fù)的,如塊154所指示。當(dāng)已經(jīng)以上文描述的方式處理寫入操作的全部條帶22時(shí),通知主機(jī)12已經(jīng)完成寫入操作,如塊174所指示。
如圖7的流程圖所說明,可以如下處理讀取請求。如塊180所指示,存儲子系統(tǒng)10接收來自主機(jī)系統(tǒng)12的讀取請求。讀取請求指示待從中讀取數(shù)據(jù)的一或多個(gè)邏輯地址。讀取請求可以指示待讀取的數(shù)據(jù)的量。主機(jī)系統(tǒng)12讀取與緩沖塊相同大小的數(shù)據(jù)的塊,舉例來說,例如,4kb。另外參考圖1,消息處理器30可以接收讀取請求并且將信息提供到命令處理器32,所述信息使得命令處理器32起始讀取操作。
如塊182所指示,高速緩沖存儲處理器34通過在哈希表80(圖3)中執(zhí)行查詢響應(yīng)于讀取操作的起始。也就是說,以上文關(guān)于寫入操作所述相同的方式,哈希函數(shù)84被應(yīng)用到每個(gè)邏輯地址以產(chǎn)生一或多個(gè)索引到哈希表80中。每個(gè)索引指示待讀取的一個(gè)槽位。從哈希表80讀取的槽位的數(shù)目取決于通過讀取請求所指示的數(shù)據(jù)的量。如上文所述,每個(gè)槽位表示一個(gè)條帶22,其可能對應(yīng)于例如64kb。讀取請求可跨越多個(gè)條帶22。讀取所指示的槽位中的每一個(gè)以確定結(jié)果是否是命中或未中。更確切地說,對于讀取操作存在三種可能結(jié)果:全部的所請求數(shù)據(jù)可存在于數(shù)據(jù)區(qū)域48中(所述結(jié)果被稱作完全命中);所請求的數(shù)據(jù)中的一些可存在于數(shù)據(jù)區(qū)域48中(所述結(jié)果被稱作部分命中);或者所請求的數(shù)據(jù)中沒有一個(gè)可存在于數(shù)據(jù)區(qū)域48中(所述結(jié)果被稱作未中或完全未中)。
如塊184所指示,如果高速緩沖存儲處理器34確定哈希表查詢的結(jié)果是命中(可以是完全命中或部分命中),那么高速緩沖存儲處理器34讀取通過引起命中的表項(xiàng)所指示的高速緩沖存儲區(qū)段,如塊186所指示。如上文關(guān)于圖3所述,所述高速緩沖存儲區(qū)段的每個(gè)高速緩沖存儲區(qū)段列表元素具有有效(緩沖塊)位112,所述位指示在所述高速緩沖存儲區(qū)段列表元素的緩沖塊標(biāo)識符字段110中所識別的緩沖塊是否是有效的。在讀取請求中所指示的邏輯地址的最低有效位可用于識別包含所請求的緩沖塊的緩沖塊標(biāo)識符的高速緩沖存儲區(qū)段列表元素的開始。隨后,如塊188所指示,對于相應(yīng)地通過在其中識別緩沖塊的高速緩沖存儲區(qū)段列表元素的有效的位112和臟位114確定為有效和臟的所請求的緩沖塊中的每一個(gè),高速緩沖存儲處理器34在所述高速緩沖存儲區(qū)段列表元素的使用計(jì)數(shù)字段118中遞增所述值或計(jì)數(shù)。如塊190所指示,高速緩沖存儲處理器34隨后產(chǎn)生和填充一或多個(gè)sgl(未示出)以用于從數(shù)據(jù)區(qū)域48中讀取數(shù)據(jù)。高速緩沖存儲處理器34隨后確定讀取請求是否跨越另一個(gè)條帶22,如塊192所指示。如果另一個(gè)條帶22將被讀取,那么處理返回到塊184。如果確定(塊184)哈希表查詢的結(jié)果是未中,那么高速緩沖存儲處理器34遞增未中計(jì)數(shù),如塊194所指示,并且處理繼續(xù),如上文關(guān)于塊192所述。
在已經(jīng)讀取與讀取請求相關(guān)聯(lián)的所有條帶之后,處理在塊196處繼續(xù)(圖7b)。高速緩沖存儲處理器34可以使用上文參考的未中計(jì)數(shù)來確定(塊196)結(jié)果是否是完全未中,即,沒有條帶被命中,或者被完全命中(塊197),即,全部的條帶被命中。如果高速緩沖存儲處理器34確定(塊196)結(jié)果是完全未中,那么后端處理器38(圖1)從后端存儲裝置14(圖1)讀取所請求的數(shù)據(jù),如塊198所指示。dma引擎40可以參與將數(shù)據(jù)從后端存儲裝置14傳送到主機(jī)12。如果高速緩沖存儲處理器34確定(塊197)結(jié)果是完全命中,那么高速緩沖存儲處理器34讀取來自數(shù)據(jù)區(qū)域48(圖2)的全部的所請求的數(shù)據(jù),如塊199所指示。如果高速緩沖存儲處理器34確定結(jié)果是部分命中,即,既不完全未中(塊196)也不完全命中(塊197),那么高速緩沖存儲處理器34從后端存儲裝置14中讀取無法在數(shù)據(jù)區(qū)域48中發(fā)現(xiàn)的所請求的數(shù)據(jù)的那些緩沖塊,如塊200所指示,并且從數(shù)據(jù)區(qū)域48中讀取可以在數(shù)據(jù)區(qū)域48中發(fā)現(xiàn)的所請求的數(shù)據(jù)的那些緩沖塊,如塊201所指示。當(dāng)完成數(shù)據(jù)傳送時(shí),通知主機(jī)12已經(jīng)完成讀取操作,如塊202所指示。
如上文所陳述,sgl可用于促進(jìn)來自數(shù)據(jù)區(qū)域48的數(shù)據(jù)的傳送。在部分命中而非完全命中的情況下,高速緩沖存儲處理器34使用識別臟緩沖塊和不臟緩沖塊的信息以在sgl中包括信息,所述信息指示從數(shù)據(jù)區(qū)域48中讀取哪些緩沖塊以及在數(shù)據(jù)區(qū)域48中“跳過”那些緩沖塊并且替代地從后端存儲裝置14中讀取。有效且臟的緩沖塊必須從數(shù)據(jù)區(qū)域48中讀取,但是有效且不臟的緩沖塊可以從后端存儲裝置14中讀取。高速緩沖存儲管理器34在部分命中的情況下發(fā)送sgl(或被鏈接在一起的多個(gè)sgl)到后端處理器38,或者在完全命中的情況下發(fā)送sgl到dma引擎40。如塊200所指示,隨后從數(shù)據(jù)區(qū)域48、后端存儲裝置14或數(shù)據(jù)區(qū)域48和后端存儲裝置14兩者的組合中讀取所請求的緩沖塊。
如圖8中所說明,高速緩沖存儲方法可以包括:(塊204)接收指示一或多個(gè)邏輯地址和待對應(yīng)地寫入一或多個(gè)邏輯地址的一或多個(gè)數(shù)據(jù)塊的寫入請求;(塊206)響應(yīng)于寫入請求,從自由列表分配高速緩沖存儲器中的一或多個(gè)物理位置;(塊208)在不考慮到一或多個(gè)邏輯地址的任何讀取請求是否待決的情況下將一或多個(gè)數(shù)據(jù)塊存儲在一或多個(gè)物理位置中;(塊210)在一或多個(gè)數(shù)據(jù)塊已經(jīng)存儲在一或多個(gè)物理位置中之后,并且在不考慮任何讀取請求是否針對一或多個(gè)邏輯地址待決的情況下,更新元數(shù)據(jù)以使一或多個(gè)物理位置與一或多個(gè)邏輯地址相關(guān)聯(lián);(塊212)維持?jǐn)?shù)據(jù)存取請求或“使用”的計(jì)數(shù)針對高速緩沖存儲器中具有有效數(shù)據(jù)的每個(gè)物理位置待決;以及(塊214)當(dāng)使用計(jì)數(shù)指示沒有數(shù)據(jù)存取請求針對物理位置待決時(shí)將物理位置返回到自由列表??勺⒁獾剑?dāng)物理位置返回到自由列表時(shí)(塊214),對應(yīng)的高速緩沖存儲區(qū)段列表元素的有效位是解除斷言的。
并不詳細(xì)地描述將數(shù)據(jù)從數(shù)據(jù)區(qū)域48傳送到后端存儲裝置14(其在本領(lǐng)域中通常被稱作從高速緩沖存儲器中逐出數(shù)據(jù)或清空數(shù)據(jù)),這是因?yàn)橹鸪龌蚯蹇諗?shù)據(jù)可以所屬領(lǐng)域的一般技術(shù)人員所理解的常規(guī)方式來執(zhí)行。簡要地,參考圖9的流程圖,當(dāng)確定自由列表中的緩沖塊的數(shù)目已減小到閾值以下時(shí)可以將緩沖塊從數(shù)據(jù)區(qū)域48清空到后端存儲裝置14,如塊216所指示。如塊218所指示,上文描述的lru臟鏈表可以促進(jìn)清空,因?yàn)樽R別最近最少寫入的緩沖塊的高速緩沖存儲區(qū)段維持在lru臟鏈表的頂部處。此類最近最少寫入的緩沖塊可以被清空到后端存儲裝置14并且lru臟鏈表更新以去除對應(yīng)的高速緩沖存儲區(qū)段。應(yīng)注意此類清空操作可以獨(dú)立于上文描述的寫入和讀取操作執(zhí)行,即,在背景技術(shù)中。另外,雖然在圖9中為清楚起見未示出,但是在一或多個(gè)緩沖塊被清空之后,使用計(jì)數(shù)遞減,如圖8中的塊212所指示。類似于圖8中的塊214,如果遞減的使用計(jì)數(shù)是零,指示沒有讀取請求或清空操作(本文中統(tǒng)稱為數(shù)據(jù)存取請求)是針對物理位置(通過bbid所識別)待決的,那么物理位置返回到自由列表,并且對應(yīng)的高速緩沖存儲區(qū)段列表元素的有效位是解除斷言的。
應(yīng)理解圖6a到6b和7a到7b、8和9的流程圖僅意圖是所描述的方法的基礎(chǔ)的示例性或說明性邏輯。所屬領(lǐng)域的技術(shù)人員可以理解在各種實(shí)施例中存儲子系統(tǒng)可以各種方式中的任何一種配置以實(shí)行所描述的方法。在一些實(shí)施例中,上文關(guān)于圖6a到6b、7a到7b、8和9所述的步驟或動(dòng)作可以按照任何合適的順序或序列發(fā)生,包括彼此并行或異步地發(fā)生。在一些實(shí)施例中,上文所述的步驟或動(dòng)作可以與其它步驟或動(dòng)作組合或省略。雖然為清楚起見在圖1中采用單個(gè)處理元件的形式進(jìn)行描繪并且在圖6a到6b、7a到7b、8和9中采用單個(gè)流程圖的形式進(jìn)行描繪,但是基礎(chǔ)邏輯可以任何合適方式模塊化或分布在硬件或軟件元件的任何組合之中。
應(yīng)注意已經(jīng)出于展示本發(fā)明的原理和概念的目的參考一或多個(gè)示例性實(shí)施例描述了本發(fā)明。本發(fā)明不限于這些實(shí)施例。如將通過所屬領(lǐng)域的技術(shù)人員所理解,鑒于本文中提供的描述,可以作出本文中描述的實(shí)施例的許多變化并且全部的此類變化都在本發(fā)明的范圍內(nèi)。