本申請要求2014年03月06日遞交的美國臨時專利申請序列號61/949,190的優(yōu)先權(quán),該申請的內(nèi)容通過引用的方式結(jié)合于此。本申請還是2014年04月09日遞交的美國序列號14/249,289的部分繼續(xù)申請,該申請要求2013年04月09日遞交的美國臨時專利申請序列號61/810,197的優(yōu)先權(quán)。
技術(shù)領(lǐng)域
本發(fā)明主要涉及信息處理。更具體地,本發(fā)明涉及具有獨立直接接入大量(bulk)固態(tài)存儲資源的多處理器系統(tǒng)。
背景技術(shù):
隨著越來越多的數(shù)據(jù)變得可用于分析,企業(yè)和政府需要能夠開發(fā)這些數(shù)據(jù)以用于更快、更精確的進行決策和更有效的操作。
技術(shù)實現(xiàn)要素:
系統(tǒng)具有許多中央處理單元。每一個中央處理單元連接至至少一個其他中央處理單元并具有至閃存存儲資源的路徑。中央處理單元支持從數(shù)據(jù)地址空間至閃存存儲虛擬地址空間、至閃存存儲虛擬頁碼、至閃存存儲物理地址空間的映射。
附圖說明
本發(fā)明更加充分地體現(xiàn)在以下結(jié)合附圖的詳細說明,其中:
圖1示出了根據(jù)本發(fā)明的實施方式配置的系統(tǒng);
圖2示出了根據(jù)本發(fā)明的實施方式配置的根模塊;
圖3示出了根據(jù)本發(fā)明的實施方式利用的分支和樹架構(gòu);
圖4示出了根據(jù)本發(fā)明的實施方式利用的分支架構(gòu);
圖5示出了根據(jù)本發(fā)明的實施方式利用的流編碼和解碼技術(shù);
圖6示出了根據(jù)本發(fā)明的實施方式可以利用的現(xiàn)成的組件;
圖7示出了根據(jù)本發(fā)明的實施方式利用的存儲控制器;
圖8示出了根據(jù)本發(fā)明的實施方式可以利用的閃存接口;
圖9示出了根據(jù)本發(fā)明的實施方式利用的優(yōu)先級FIFO方案;
圖10示出了根據(jù)本發(fā)明的實施方式可以利用的存儲架構(gòu);
圖11示出了根據(jù)本發(fā)明的實施方式利用的邏輯單元FIFO控制器;
圖12示出了根據(jù)本發(fā)明的實施方式配置的邏輯單元控制器;
圖13示出了根據(jù)本發(fā)明的實施方式利用的閃存存儲接口;
圖14示出了根據(jù)本發(fā)明的實施方式利用的數(shù)據(jù)保護系統(tǒng);
圖15示出了根據(jù)本發(fā)明的實施方式利用的存儲緩沖區(qū);
圖16示出了根據(jù)本發(fā)明的實施方式利用的根復(fù)合體;
圖17示出了根據(jù)本發(fā)明的實施方式利用的地址映射方案;
圖18示出了根據(jù)本發(fā)明的實施方式配置的計算系統(tǒng);
圖19示出了根據(jù)本發(fā)明的實施方式配置的存儲控制器;
圖20示出了根據(jù)本發(fā)明的實施方式配置的閃存控制器;
圖21A示出了第一次寫入之后的頁面虛擬化表格;
圖21B示出了第二次寫入之后的頁面虛擬化表格;
圖21C示出了具有壓縮和共享的項的頁面虛擬化表格;
圖21D示出了具有伴隨步長值的壓縮和共享的項的頁面虛擬化表格;
圖22示出了根據(jù)本發(fā)明的實施方式利用的無鎖隊列系統(tǒng);
圖23示出了用于操作的系統(tǒng)與支持的硬件之間交互的現(xiàn)有技術(shù)方式;
圖24示出了根據(jù)本發(fā)明的實施方式的操作的系統(tǒng)核心組件之間的并行處理配置、專用輸入/輸出數(shù)據(jù)結(jié)構(gòu)和專用硬件資源;
圖25示出了根據(jù)本發(fā)明的實施方式的事件計數(shù);
圖26示出了根據(jù)本發(fā)明的實施方式執(zhí)行的遷移樞軸(migrate pivot);
圖27示出了依賴于中央處理單元的現(xiàn)有技術(shù)的垃圾收集操作;
圖28示出了根據(jù)本發(fā)明的實施方式的由閃存控制器執(zhí)行的垃圾收集操作;
圖29示出了根據(jù)本發(fā)明的實施方式執(zhí)行的垃圾手機操作;
圖30示出了根據(jù)本發(fā)明的實施方式利用的推遲讀取垃圾收集技術(shù);
圖31示出了根據(jù)本發(fā)明的實施方式的在一組LUN上實施的保護條帶;
圖32示出了根據(jù)本發(fā)明的實施方式利用的初始頁面虛擬化表格和存儲關(guān)系;
圖33示出了根據(jù)本發(fā)明的實施方式的隨后的頁面虛擬化表格和存儲關(guān)系;
圖34示出了根據(jù)本發(fā)明的實施方式的頁面虛擬化、塊虛擬化和存儲關(guān)系;
圖35示出了根據(jù)本發(fā)明的實施方式的頁面虛擬化、塊虛擬化和存儲關(guān)系;
圖36示出了根據(jù)本發(fā)明的實施方式的到LUN的并行接入;
圖37示出了根據(jù)本發(fā)明的實施方式利用的40Gb架構(gòu);
圖38示出了根據(jù)本發(fā)明的實施方式的通過每個核專用I/O結(jié)構(gòu)和中斷模塊進行的并行處理;
圖39示出了根據(jù)本發(fā)明的實施方式的通過閃存控制器執(zhí)行的關(guān)閉CPU(off-CPU)條帶處理;
圖40示出了根據(jù)本發(fā)明的實施方式利用的DRAM快速寫入緩沖區(qū);
圖41示出了根據(jù)本發(fā)明的實施方式的異步I/O處理;
圖42示出了根據(jù)本發(fā)明的實施方式的同步I/O處理;
圖43示出了根據(jù)本發(fā)明的實施方式利用的數(shù)據(jù)保護技術(shù);
圖44示出了根據(jù)本發(fā)明的實施方式利用的負載均衡架構(gòu);
圖45示出了根據(jù)本發(fā)明的實施方式的序列號處理;
圖46示出了根據(jù)本發(fā)明的實施方式利用的RAS條帶處理;
圖47示出了根據(jù)本發(fā)明的實施方式執(zhí)行的校驗(parity)頁面處理;
圖48示出了根據(jù)本發(fā)明的實施方式利用的集成的垃圾收集和數(shù)據(jù)保護;
圖49示出了根據(jù)本發(fā)明的實施方式利用的自適應(yīng)數(shù)據(jù)保護;
圖50示出了根據(jù)本發(fā)明的實施方式利用的垃圾收集架構(gòu);
圖51示出了根據(jù)本發(fā)明的實施方式利用的基于序列的垃圾收集技術(shù);
圖52示出了根據(jù)本發(fā)明的實施方式利用的頁面隨機化技術(shù);
圖53示出了根據(jù)本發(fā)明的實施方式利用的LUN架構(gòu);
圖54示出了根據(jù)本發(fā)明的實施方式處理的命令;
圖55示出了根據(jù)本發(fā)明的實施方式處理的命令;
圖56示出了根據(jù)本發(fā)明的實施方式配置的微碼引擎;
圖57示出了根據(jù)本發(fā)明的實施方式利用的冗余路徑架構(gòu)。
同樣的參考數(shù)字貫穿附圖的幾個圖示指代相應(yīng)的部分。
具體實施方式
計算裝置是具有集成的軟件的專用硬件設(shè)備,所述軟件被設(shè)計以提供特定計算功能。計算裝置與通用計算機在任何基本方式上都沒有不同,但是通常不被配置為允許顧客改變軟件或重配置硬件。所公開的系統(tǒng)能夠運行非常廣泛范圍的應(yīng)用并且在這個意義上可以考慮作為通用計算機器。其實施節(jié)約成本的架構(gòu),該架構(gòu)有效地創(chuàng)建了非常大的、共享的存儲器。
所公開的系統(tǒng)開發(fā)了借以提供“Flash As MemoryTM”的低成本的固態(tài)設(shè)備。這意味著固態(tài)設(shè)備(如,閃存存儲芯片)在處理器的存儲空間中具有地址。因此,處理器可以直接訪問“閃存存儲”中的數(shù)據(jù),而不必首先將其交換至主存儲器。在特定的實施方式中,該存儲器空間存在非常大的范圍,如幾十太字節(jié)至幾千兆字節(jié)。相應(yīng)地,如以上所描述的特定設(shè)計和技術(shù)被使用。這些特定設(shè)計和技術(shù)支持跨系統(tǒng)的并行操作。
設(shè)計和技術(shù)包括由硬件和軟件二者組成的多個互聯(lián)組件。每一個組件具有對于完整系統(tǒng)的操作所需要的唯一的特征和功能。在互聯(lián)時,這些組件創(chuàng)建了所期望的計算能力。
圖1中展示了本發(fā)明的實施方式的框圖。其包括多個CPU 100,每一個CPU 100具有許多通過存儲速度接口102互聯(lián)的計算核,有時稱為集群連接。每一個CPU具有緩存104和本地存儲器105(在這種情況下是DRAM)或另一類似類型的存儲器。每一個CPU 100還擁有作為延伸的固態(tài)存儲器操作的本地存儲根108。計算核執(zhí)行常駐在本地存儲器105中的或在通過存儲控制器110連接的分支上的軟件堆棧106。在一個實施方式中,軟件堆棧包括如以下討論的應(yīng)用程序、數(shù)據(jù)庫、塊驅(qū)動器及磨損(wear level)可靠性可用性可服務(wù)性(RAS)模塊。該模塊圖示描述了本發(fā)明的多個可能配置中的一者。
能夠由計算機服務(wù)的同步數(shù)據(jù)接入的數(shù)量限制了許多數(shù)據(jù)驅(qū)動應(yīng)用的性能。計算核的數(shù)量的增加使這個問題更糟糕。所公開的系統(tǒng)提供了大量的存儲芯片,該存儲芯片具有至包裝計算核的CPU的多根互連。其提供對數(shù)據(jù)的有效并行應(yīng)用接入。特定系統(tǒng)軟件管理計算和數(shù)據(jù)接入的有效調(diào)度。
所公開的系統(tǒng)可以以適于特定使用模式的各種配置來建立。本發(fā)明可以被優(yōu)化以進行大量的特定用途,諸如這些大的存儲消耗應(yīng)用:商業(yè)智能、商業(yè)分析、地球-地震、醫(yī)學(xué)成像、社交網(wǎng)絡(luò)和患者管理。
在一個實施方式中,根存儲控制器110連接至互連的CPU 100的復(fù)合體,并且驅(qū)動分支112和葉子114的層級,每一個CPU 100由多個核構(gòu)成。觀察到每一個分支附著至另一分支或多個葉子或二者的混合。葉子114由閃存存儲器或其它固態(tài)或數(shù)字存儲器組成。特別地,可以具有通過分支附著至單個根(如一個或多個FPGA或一個或多個ASIC)的1024個或更多的存儲芯片。每一個CPU復(fù)合體可以被連接至八個或更多個根。因此,如果圖1是準(zhǔn)確的并且是按比例的,那么大量固態(tài)存儲器葉子將淹沒(overwhelm)該附圖。在這個架構(gòu)中,CPU具有可以并行接入的數(shù)千個存儲目標(biāo)。CPU復(fù)合體中的多個CPU及存儲樹的大小和數(shù)量還可以增加至非常大的量。平衡反映了特定用途(應(yīng)用)的需求。該架構(gòu)中的組件由硬件和軟件二者組成。他們可以包括以下:
1.數(shù)據(jù)管理系統(tǒng)
數(shù)據(jù)庫或數(shù)據(jù)管理系統(tǒng),可以是、且常常是
1)多線程的;
2)利用單個共享存儲模塊,或分布式存儲模塊,或二者的組合,從而獲得高度并行性。在一些實施方式中,這可以是緩存相干存儲模塊,其中每一個CPU線程緩存其在存儲器中的狀態(tài)。
2.存儲管理系統(tǒng)
存儲管理系統(tǒng),可以是、且常常是
1)多線程的以開發(fā)大的多核系統(tǒng);
2)高度并行的;
3)非常大的容量
4)作為比喻:向下移動存儲管理系統(tǒng)導(dǎo)致提高并行性。在存儲接入從根移動至分支至葉子時,在每一層次有效倍增并發(fā)操作。
3.緩存管理系統(tǒng)
在一些實施方式中,緩存管理系統(tǒng)維持跨計算機系統(tǒng)中的單獨節(jié)點(或核)的數(shù)據(jù)相干性。
4.存儲系統(tǒng)
如以上所述,每一個存儲系統(tǒng)由根、分支和葉子組成。在一個實施方式中,具有四個根,在這里有時稱為存儲模塊(MM)。從概念上講,根取代了計算機底盤中的四個存儲擴充卡。他們連接至分布網(wǎng)絡(luò),該分布網(wǎng)絡(luò)提供了至多個分支的接口,每一個分支連接至多個葉子。
圖2顯示了單個根108,該根108包括兩個存儲接口200、兩個分支接口202、十六個分支和十六個葉子,每個葉子包含至少一個固態(tài)設(shè)備。圖3是分支接口202及其至具有相應(yīng)葉子114的一組分支112的連接的更具體的描述。在一個實施方式中,每一個根具有總共8TB的閃存以用于總共32TB的系統(tǒng)——一半可用于用戶應(yīng)用及一半被分配至冗余和系統(tǒng)使用。在其他實施方式中,分配至應(yīng)用或冗余的存儲資源可能是不同的或可以直接或間接地通過應(yīng)用來控制。
每一個分支接口具有內(nèi)部存儲器204以執(zhí)行軟件堆棧206。軟件可以包含雙數(shù)據(jù)速率(DDR)控制器、目標(biāo)路由軟件、RAS模塊和非阻塞并行固態(tài)接口(NBSI)驅(qū)動器。分支接口可以具有FPGA或ASIC形式的計算資源。
存儲接口連接至處理器間數(shù)據(jù)分布網(wǎng)絡(luò),其中所有CPU具有對所有存儲器的接入。我們將存儲器描述為由下文詳細描述的分支和葉子組成的多根的樹。我們將計算復(fù)合體描述為存儲器共享的多處理器,該多處理器可以是相同或不同類型的。根可以是許多實例中的一者,這些實例是本地或遠程連接的?;ミB技術(shù)可能影響一部分系統(tǒng)運作,但其不必改變基礎(chǔ)架構(gòu)或其操作。
在一個實施方式中,存儲器主控制器(MMC)和存儲器從控制器(MSC)被實施具有專用硬件。根是MMC,而分支是MSC及葉子是固態(tài)存儲設(shè)備。例如,Altera Stratix V FPGA可以被用于MMC和MSC二者。在這種情況下,每一個FPGA具有以12.8Gb/s操作的48個串行鏈路,并且來自每一個MMC的三個鏈路轉(zhuǎn)到十六個MSC設(shè)備中的每一者。每一個MSC轉(zhuǎn)而連接至16個葉子,每一個葉子是固態(tài)存儲設(shè)備,例如32GB單個層單元(SLC)NAND閃存設(shè)備。許多其他實施也是可能的,包括組件及其互連是實時改變的實施。
在一個實施方式中,存儲分支是具有多個附著的葉子的組件,其中每一個葉子是閃存存儲芯片,如圖3所示。圖4示出了具有葉子接口控制器400的分支112,該葉子接口控制器400執(zhí)行軟件堆棧402。軟件堆棧402可以包括網(wǎng)絡(luò)驅(qū)動器、RAS、糾錯碼(ECC)、數(shù)據(jù)庫引擎、數(shù)據(jù)壓縮引擎、加密引擎和固態(tài)驅(qū)動器。這些組件提供了在不需要將計算任務(wù)移動至另一處理單元的情況下在存儲在葉子中的數(shù)據(jù)上執(zhí)行計算任務(wù)的手段。觀察到堆棧靠近媒介,因為在根和分支中具有計算資源。
在可替換的實施方式中,存儲分支是具有多個分支和附著的葉子的組件,其中每一個分支執(zhí)行相同或不同的軟件堆棧。在異構(gòu)系統(tǒng)中,每一個分支可以知曉其鄰居并協(xié)作實現(xiàn)網(wǎng)絡(luò)驅(qū)動器、RAS、糾錯碼、數(shù)據(jù)庫引擎、數(shù)據(jù)壓縮引擎和固態(tài)驅(qū)動器。
在進一步的實施方式中,如具有葉子的情況,分支包含重大意義的計算資源,該計算資源在數(shù)據(jù)被讀取/寫入至葉子時實施快速搜索或壓縮/解壓縮。本地處理器可以加密、壓縮、擦洗、驗證、編碼和解碼數(shù)據(jù)分組以及路由、驗證、編碼和解碼報頭和存在于CPU、分支和根組件之間的通信信道中的命令信息。
分支最終以葉子結(jié)束。每一個葉子是用作讀取和寫入數(shù)據(jù)頁面至非易失性存儲中的設(shè)備。葉子可以以許多形式實施。存儲管理系統(tǒng)控制葉子頁面的使用。葉子可以以各種技術(shù)來實現(xiàn),但是他們有已經(jīng)寫入的數(shù)據(jù)頁面還可以被讀取的性質(zhì)。至于設(shè)備類型或操作參數(shù)葉子不需要是同構(gòu)或異構(gòu)的。
在進一步的實施方式中,葉子包含意義重大的計算資源,該計算資源在數(shù)據(jù)被讀取/寫入葉子時實施快速搜索或壓縮/解壓縮。本地處理器可以加密、壓縮、擦洗、驗證、編碼和解碼數(shù)據(jù)分組以及路由、驗證、編碼和解碼報頭和存在于CPU、分支和根組件之間的通信信道中的命令信息。
在一些實施方式中,一個或多個多層架構(gòu)覆蓋根-分支-葉子結(jié)構(gòu)并包括如以下所描述的用于編碼和解碼的各種技術(shù)。
在一些實施方式中,存儲葉子具有至冗余系統(tǒng)中的鏡像(mirrored)存儲空間的端口接入。在一個實施方式中,大約一半的存儲系統(tǒng)儲存數(shù)據(jù)及另一半的存儲空間支持快速數(shù)據(jù)接入。在另一個中,部分物理存儲器被保留,以提供足夠的性能。在進一步的實施方式中,存儲器使用特別設(shè)計的最小化低效率的方法使數(shù)據(jù)在單獨葉子之間分布。在另一實施方式中,存儲組件本身可以由共同產(chǎn)生所需要的行為的單獨的組件組成。在進一步的實施方式中,分段的系統(tǒng)已經(jīng)隔離了在單獨的域失敗的情況下保持操作的域。在一個實施方式中,這些組件是相互依賴的。為了使整個系統(tǒng)有效運行,互連組件相互依賴以正確運作并及時完成彼此的工作。
本發(fā)明是由幾個內(nèi)部關(guān)聯(lián)的部件組成的計算系統(tǒng),幾個部件可以具有有著不用用途的不同的實現(xiàn)產(chǎn)生機制。這些組件的有效相互作用以另外的達不到的水平創(chuàng)建了系統(tǒng)性能。在以下的闡述中,我們列舉了幾個組件及其運作。
本發(fā)明的一個實施方式提供了在損耗和寫入存儲器方面的性能改進。資源(計算的、存儲器、連接帶寬等)的合并(pooling)創(chuàng)造了最優(yōu)化的機會。當(dāng)多個服務(wù)器試圖為試圖接入相同數(shù)據(jù)的多個客戶端服務(wù)時,數(shù)據(jù)一致性變?yōu)橹匾男枨?。多級緩存的使用進一步使架構(gòu)復(fù)雜化,該架構(gòu)可以被用于解決這些問題。
本發(fā)明的實施方式是通過在一組設(shè)備中的所有設(shè)備之間分配工作來改進該組設(shè)備的性能的機制。傳統(tǒng)的固態(tài)盤(SSD)在設(shè)備內(nèi)進行“損耗均衡”并且必須進行這個操作而無論設(shè)備何時需要擦除塊。這是因為他們僅能夠在他們的設(shè)備內(nèi)分配寫入,即使更高級實體試圖在其他設(shè)備上分配寫入。在單個設(shè)備上執(zhí)行單獨動作的成本比當(dāng)寫入被合并到一起時的執(zhí)行成本高很多。所公開的系統(tǒng)優(yōu)化了大量信道上的擦除和寫入,從而增強了整體性能。其包括在實質(zhì)上沒有增加客戶端所關(guān)注的操作延遲的情況下明智地分散工作的“選擇”機制和實時優(yōu)化機制。
例如,該技術(shù)在圖1和/或圖2的架構(gòu)中使用。示例性的事務(wù)是使用日志結(jié)構(gòu)分配數(shù)據(jù)頁面,以提高收回(reclaim)擦除的塊(如,“垃圾收集”)的效率。存儲器的頁面被映射至核的虛擬存儲地址空間。頁面以順序的方式被寫入連續(xù)固態(tài)存儲地址。這些寫入操作可以被分組在一起以更有效地利用存儲設(shè)備的帶寬。例如,四個頁面可以被同時寫入特定閃存設(shè)備的四個平面上。該方法在閃存設(shè)備的一個塊移動至下一個之前填滿閃存設(shè)備的這個塊。因此,對于許多在再次執(zhí)行寫入操作之前以類似序列執(zhí)行刪除操作的應(yīng)用來說;許多刪除的頁面可以從相同的塊中同時收回。在其他情況下,寫入操作可以被分派至不同的塊,以最大化可以被收回的頁面的數(shù)量。
本發(fā)明的另一方面是有效移動存儲層級中存儲組件之間的塊的機制。在以上示例中,我們具有包含從固態(tài)設(shè)備接入數(shù)據(jù)的處理器層級(CPU、根、分支)。任何時間數(shù)據(jù)從層級的一個等級移動至另一個等級,可能存在性能損失。相反,如果不跨等級情況下執(zhí)行操作,通常會實現(xiàn)性能的改進。
實現(xiàn)性能改善的機會的一個示例出現(xiàn)在擦除用于固態(tài)媒介的操作的期間。在準(zhǔn)備擦除中,必須移動包含仍在使用(“活的”)的數(shù)據(jù)的所有頁面。CPU不需要在這期間檢查該數(shù)據(jù);因此我們通過使用該數(shù)據(jù)不交叉CPU的層級等級來實現(xiàn)性能改善。一些實施方式可以將該數(shù)據(jù)從分支移動至分支及一些實施方式將該數(shù)據(jù)從根移動到根。在根之間移動的情況中,我們將副本移動至CPU并返回至原根或另一根。這些副本需要CPU中的存儲空間,這轉(zhuǎn)而影響了可用于根緩沖區(qū)管理的存儲器、CPU上的緩存利用和CPU緩沖區(qū)??梢允褂肅PU中的負載/儲存模塊或使用根中的直接存儲接入(DMA)模塊來實現(xiàn)數(shù)據(jù)從根內(nèi)或從根移動到根。使用一個路徑或其他路徑的決定可以在操作系統(tǒng)層中進行或可能在根本身中進行,或甚至使用二者結(jié)合的分布式機制進行。
本發(fā)明的另一實施方式針對分配讀取以最大化性能的機制。在具有不同延遲、吞吐量和接入方法的設(shè)備演化數(shù)據(jù)時,CPU不能接入數(shù)據(jù)并預(yù)期其在DRAM中進行預(yù)期的相同性能。這個機制并行化讀取以從非DRAM設(shè)備獲取非常高的吞吐量。這些性能等級的數(shù)量級比其他方式更接近DRAM速度。
在一個實施方式中,我們檢查了包含具有8TB數(shù)據(jù)的固態(tài)存儲模塊的系統(tǒng),該系統(tǒng)具有長的延遲和復(fù)雜的接入機制。特別地,根(存儲模塊)上的固態(tài)媒介與使用具有256GB數(shù)據(jù)的DRAM模塊的單個64字節(jié)讀取相比,允許2048與4096同時的字節(jié)讀取。在本實施方式中,系統(tǒng)上每一個4096頁面耗費100微秒及DRAM上每一個4096字節(jié)讀取耗費1微秒。在本實施方式中,在同時讀取之后,每個頁面具有額外的5微秒用于系統(tǒng)。
雖然使用DRAM比讀取單個頁面快100倍,但是當(dāng)讀取2048個頁面時,DRAM僅比所公開的系統(tǒng)快5倍。使用更多存儲芯片組成的較大實施方式大大縮小了這個差異。
我們的發(fā)明包括軟件、固件和硬件設(shè)計以實現(xiàn)以上所描述的并行性。本發(fā)明體現(xiàn)了其中讀取請求和/或數(shù)據(jù)已經(jīng)被分配從而隨后的讀取可以利用存儲系統(tǒng)中的并行性的機制。基本的技術(shù)通過放置可能同時在不同的(獨立的)設(shè)備(信道)上被讀取的數(shù)據(jù)頁面來實現(xiàn)。在一個實施方式中,每一個頁面被寫入與之前所寫入的頁面有關(guān)的不同信道(或分支)上的設(shè)備上。
本發(fā)明的另一方面是用于分配寫入以最大化性能的機制,并同時對緩沖區(qū)和信道帶寬進行有效使用。之前注意到讀取請求和/或數(shù)據(jù)必須是已經(jīng)被分配的,以使得隨后的讀取可以利用并行性。本發(fā)明的本實施方式分配數(shù)據(jù)寫入以便于隨后讀取的并行性。
在一個實施方式中,使用了Linux操作系統(tǒng)。與大多數(shù)現(xiàn)代的操作系統(tǒng)類似,Linux使用存儲管理系統(tǒng),該存儲管理系統(tǒng)將DRAM中的數(shù)據(jù)緩存至數(shù)據(jù)設(shè)備或從數(shù)據(jù)設(shè)備緩存DRAM中的數(shù)據(jù),該數(shù)據(jù)設(shè)備類似于旋轉(zhuǎn)盤或固態(tài)介質(zhì)。應(yīng)用可以通過直接使用Linux的DRAM、使用Linux的DRAM作為階段區(qū)域或通過向Linux提供對應(yīng)用的DRAM的參考來寫入數(shù)據(jù)。在所有這些情況下,在時間和空間上分配寫入。
所公開的系統(tǒng)具有巨大量的獨立操作單元。我們在那些單元之間分配頁面寫入。這是暫時的分配,因為我們基于在不同的單元準(zhǔn)備好寫入的時候向不同的單元寫入頁面。
分配有助于兩種方式下的性能。第一,正如讀取,系統(tǒng)可以同時寫入獨立的單元(葉子),實現(xiàn)并行性。第二,隨后的讀取還將被分配并因此能夠利用并行性。因為具有如此多的葉子(其不會有相互間的讀取沖突),給定了暫時的分配和大量的單元。
本發(fā)明的另一方面是在信道或邏輯單元之間實現(xiàn)損耗分組的機制。所公開的技術(shù)是有效再使用存儲器的“擦除塊”和在頁面之間均勻地劃分用途的方法。該技術(shù)可以在軟件堆棧206中或在根108處(如圖2的RAS)執(zhí)行,或者通過二者協(xié)作來最優(yōu)化地執(zhí)行該技術(shù)。
塊擦除機制的工作與存儲空間再利用(如,垃圾收集)非常類似。然而,該機制處理普通的垃圾收集技術(shù)不能處理的三個增加的并發(fā)癥。第一,頁面必須在其可以被再次寫入之前在大的連續(xù)分塊中被擦除。第二,頁面最終耗盡,所以必須實現(xiàn)損耗均衡。第三,在盡可能多的信道之間擴展業(yè)務(wù)量以得到最佳讀取和寫入性能是令人滿意的。通過實現(xiàn)了增強型一代垃圾收集器,可以獲取良好的性能(解決點1和3),并且還提供良好的損耗均衡(解決點2)。
在一代垃圾收集器中,所有的新對象被放置在年輕一代的合并中。在垃圾收集在年輕一代的合并上執(zhí)行之后,幸存對象的收集被放置在較老一代的合并中。幸存對象的收集再次被放置在更老的合并中,等等。這種如存儲介質(zhì)一樣使用閃存的簡單實現(xiàn)會導(dǎo)致極壞的損耗均衡。用于年輕的存儲一代的塊會比用于較老一代的塊擦除得更加頻繁。我們通過周期性地改變物理閃存塊屬于哪一代來避免這個問題。通過采用高的擦除計數(shù)來將頁面移動至較老的一代,我們減少了將來將看到的那些頁面的擦除次數(shù)。用于不同的一代的塊在不同的閃存信道之間平衡。這確保了能夠在許多不同的信道之間擴展讀取和寫入業(yè)務(wù)量。
本發(fā)明的另一實施方式涉及累積的冗余數(shù)據(jù)保護條帶。本發(fā)明的本實施方式累積了將簡單的(如,XOR)借/貸計算用在故障獨立的存儲設(shè)備上的數(shù)據(jù)保護條帶。該技術(shù)包括快速重構(gòu)損壞的數(shù)據(jù)塊的方法。該機制可以體現(xiàn)在系統(tǒng)的CPU、根或分支中。依賴于特定的實施方式,將與不同方式下的RAS實施方式相互作用。
應(yīng)用于具有大量不對稱讀-寫次數(shù)的設(shè)備的擦除碼需要限制開銷并提供大大減少未檢出錯誤的方式。此外,非常需要低的計算開銷和限制的空間。我們呈現(xiàn)了用于擦除譯碼數(shù)據(jù)的機制,該機制在空間和時間上獲取低的、固定的具有可調(diào)節(jié)的錯誤檢測和錯誤等級的開銷。
以下的數(shù)據(jù)保護方案建立在所公開的寫入機制之上。圖5示出了17個數(shù)據(jù)堆棧的流。在該示例中,計算校驗值以每次用于四個數(shù)據(jù)塊,但是該技術(shù)可以在任意數(shù)量的數(shù)據(jù)塊上使用。校驗值利用數(shù)據(jù)塊的滑動窗口。為了改善效率,采用與新的數(shù)據(jù)塊(如,D5)結(jié)合的結(jié)果,之前計算的校驗值(如,P1)經(jīng)歷異或(XOR)操作。這個方法可以被級聯(lián)用于所有新到達的數(shù)據(jù)。圖5提供了建立方法有效性的數(shù)學(xué)基礎(chǔ)。這個方法將低的固定的計算開銷與固定的空間需求相結(jié)合。實際上,這個機制利用了“移動窗口”,該“移動窗口”包含了XOR的數(shù)據(jù)塊以一起形成校驗塊。隨著窗口移動,新的塊與校驗塊XOR,而之前與校驗塊XOR的老的塊再次與校驗塊XOR。這有效地增加了新的塊并移動了老的塊,從而“移動窗口”。
本發(fā)明的另一實施方式針對在直接讀取等待之前請求的擦除或比讀取慢的其他操作時通過校驗重構(gòu)數(shù)據(jù),以完成并釋放信道。這個功能可以在軟件堆棧的軟件中實現(xiàn),該軟件堆棧在圖1的CPU上運行。特別地,在本實施方式中,功能在軟件堆棧的底部實現(xiàn)。通常,功能針對在初級設(shè)備忙的時候通過從儲存在不同設(shè)備上的冗余數(shù)據(jù)來重構(gòu)所接入的數(shù)據(jù)以用于最小化讀取操作的延遲的方法。
存儲頁面被分派不同的信道(如,從CPU通過根至葉子的鏈路)。每一個葉子儲存多個數(shù)據(jù)頁面。僅單個數(shù)據(jù)頁面可以從葉子一次讀取或一次寫入葉子。葉子內(nèi)的頁面有時被擦除。執(zhí)行擦除或其他慢操作比讀取或?qū)懭胄枰L時間,并且多個讀取和寫入是在葉子之間同時進行的。所以,期望避免在擦除操作正在進行時從葉子進行讀取。
因此,除了數(shù)據(jù)頁面,我們還儲存數(shù)據(jù)保護頁面。也就是,對于給定的數(shù)據(jù)頁面A,我們針對A儲存一組數(shù)據(jù)保護頁面,這些數(shù)據(jù)保護頁面儲存在不同的葉子上。在數(shù)據(jù)頁面A丟失的情況下,數(shù)據(jù)頁面A的內(nèi)容可以通過讀取一些針對A的數(shù)據(jù)保護頁面和一些其他數(shù)據(jù)頁面(不包括A)來進行重構(gòu)。需要注意的重要的事情是數(shù)據(jù)頁面A的內(nèi)容可以在不必接入A所在的葉子的情況下被重構(gòu)。
該技術(shù)通常的應(yīng)用是在包含A的頁面(或甚至整個葉子或分支)丟失的情況下重構(gòu)A的內(nèi)容。然而,我們還可以使用該機制來改善性能,如下:如果包含A的葉子忙,并且將會忙很長時間,代替直接讀取A,我們可以通過必要的數(shù)據(jù)保護信息重構(gòu)A。在擦除的情況下,常常這將容許滿足對A的請求比等待完成擦除更快。該技術(shù)可以與移動窗口技術(shù)相結(jié)合,以快速重構(gòu)數(shù)據(jù)。
實現(xiàn)該技術(shù)的另一方法是利用類似擦除碼的RAID 5(或其他RAID)。這意味著計算多個數(shù)據(jù)頁面的異或以產(chǎn)生校驗頁面或計算更復(fù)雜的碼,例如低密度校驗碼或所謂的Raptor碼,這允許恢復(fù)所需要的數(shù)據(jù)。
本發(fā)明的另一實施方式針對分級存儲器中的有效讀取緩沖區(qū)利用的機制。問題是通過更有效的緩沖區(qū)利用來改善系統(tǒng)性能。不是在軟件發(fā)布讀取命令的時候分配緩沖區(qū),而是僅在數(shù)據(jù)變?yōu)榭捎弥胺峙渚彌_區(qū)(緩式分配)。這允許軟件讀取在較少量的緩沖區(qū)上進行統(tǒng)計學(xué)復(fù)用。在限制緩沖區(qū)的數(shù)量的系統(tǒng)中,這導(dǎo)致更好的整體系統(tǒng)性能。
當(dāng)CPU將數(shù)據(jù)從較慢資源讀入較快資源(諸如從閃存存儲器讀入高速存儲器)時,CPU分配較快資源中的緩沖區(qū)并等待較慢設(shè)備填充特定緩沖區(qū)。緩沖區(qū)可以從操作開始通過操作系統(tǒng)被看作“忙”直至數(shù)據(jù)最終被返回。通過這個想法,系統(tǒng)發(fā)布讀取,但是不會為數(shù)據(jù)預(yù)分配緩沖區(qū)。較慢的系統(tǒng)(從該系統(tǒng)讀取)將僅在數(shù)據(jù)被傳遞至CPU之前分配緩沖區(qū)并且然后用數(shù)據(jù)填充緩沖區(qū)。這使緩沖區(qū)在較短的時間周期是“忙”的。這個機制改善了緩沖區(qū)在較快資源中的利用,這轉(zhuǎn)而引起提高的系統(tǒng)性能并減少要求特定性能等級的緩沖區(qū)的數(shù)量。
本發(fā)明的另一實施方式針對在最小化葉子資源時優(yōu)化性能的數(shù)據(jù)保護方案。數(shù)據(jù)保護(DP)校驗的發(fā)生一般是簡單的且是非??斓??;ㄙM了很長的時間來校正大量的比特錯誤。實際上,所遭遇的大部分錯誤具有少量的錯誤比特。
本發(fā)明的一個實施方式產(chǎn)生了大量的校驗比特并具有雙重校正算法。少量的錯誤比特可以在分支或葉子的硬件中進行校正,保持硬件實現(xiàn)很少。如果出現(xiàn)大量的比特錯誤,其可以通過使用與數(shù)據(jù)一起儲存的大量的校驗比特中的所有(或較多)的校驗比特在軟件或固件中進行校正。
該層級機制改善了空間和計算效率。該機制將數(shù)據(jù)保護分離為兩個部分:一個較小的部分,該部分具有有限的校正能力,及較慢但更有能力的部分,該部分在軟件中具有校正能力(或一些其他“更高級別”的處理)。對于所有需要的校正中的99.999%的校正,葉子內(nèi)的校正邏輯將是足夠的。然而,當(dāng)葉子不能校正數(shù)據(jù)時,軟件將使用其額外的能力來校正數(shù)據(jù)。這將小的、頻繁使用的葉子校正塊加上非常不頻繁使用的軟件校正塊與單個、較大的葉子塊與不是非常頻繁使用的廣泛功能進行交換。進行這種交換導(dǎo)致了小得多的、更好利用的葉子塊并改善了葉子的空間效率。該機制可以被級聯(lián)至多個等級,每一個等級根據(jù)之前等級的數(shù)據(jù)校正能力進行改善。最終,其他系統(tǒng)等級數(shù)據(jù)保護可以被應(yīng)用于從其他葉子上的冗余副本來恢復(fù)丟失的數(shù)據(jù)。基于塊的碼(如,BCH或Reed-Solomon)可以執(zhí)行這個功能。此外,特別設(shè)計的低密度校驗(LDPC)碼可以被使用。這個“軟錯誤”技術(shù)允許從設(shè)備重新讀取數(shù)據(jù)并結(jié)合多個讀取意圖以產(chǎn)生較好的錯誤率,并且還可以與以上用于將錯誤檢測和錯誤與需要更復(fù)雜邏輯的稀有情況分開的技術(shù)相結(jié)合。
以下討論針對本發(fā)明組件的各個特定實施方式。如以上所討論的,系統(tǒng)組件包括與點對點分布系統(tǒng)連接的多處理器/多核復(fù)合體和多根的、冗余的并行可接入的(分支的)存儲器。系統(tǒng)可以被配置有商業(yè)上可用的組件,如圖6所示。
多核、多處理器、服務(wù)器類、硬件平臺被用于實現(xiàn)本發(fā)明的實施方式。在一個實例中,IBM 3850/3950X5系統(tǒng)(基于英特爾的Boxbor-EX平臺)作為主機。工作模式包含4個DRAM存儲板和具有64太字節(jié)的閃存存儲器的4個存儲模塊(根)。部分閃存存儲器可用于用戶應(yīng)用。該部分可以依賴于使用歷史和當(dāng)前的、所測量的性能等級而改變。該系統(tǒng)代表在非均勻存儲架構(gòu)(NUMA)配置中所連接的多個多處理器系統(tǒng),該配置具有高速點對點、緩存相干存儲互連。
硬件組件可以包括:
○系統(tǒng)基板(母板)
○可擴展存儲接口(SMI)板(根)
○閃存模塊基板(分支)
○存儲模塊子卡(葉子)
○支持機械的、熱的及電力的系統(tǒng)。
圖6顯示了可以用于實現(xiàn)本發(fā)明的多核、服務(wù)器類平臺。特別地,該圖是IBM X5 3850機架的框圖?;谟⑻貭柕腂oxboro-EX平臺,包括經(jīng)由快速路徑互連(QPI)鏈路互連的四個Xeon 8870(Westmere)CPU。每一個Xeon芯片具有兩個存儲控制器。每一個存儲控制器在閉鎖步驟中運行兩個英特爾SMI(可擴展存儲互連)鏈路,以實現(xiàn)至存儲器(具有檢測比特的144比特)的128比特寬的數(shù)據(jù)路徑。每一個SMI鏈路與英特爾7510擴展存儲緩沖芯片通信,該芯片轉(zhuǎn)而將SMI請求轉(zhuǎn)變?yōu)殡p倍數(shù)據(jù)速率類型三(DDR 3)同步DRAM事務(wù)。在每一個7510上具有兩個DDR 3鏈路。Xeon處理器執(zhí)行128比特操作并且不在DDR 3鏈路上使用數(shù)據(jù)掩碼比特。
存儲控制器和交叉棒是被設(shè)計為在串行鏈路接口與MSC內(nèi)閃存控制器之間的傳輸數(shù)據(jù)頁面的分布式存儲結(jié)構(gòu)。存儲控制器是系統(tǒng)中的分支。閃存頁面是所利用的特定芯片的屬性,但是一般是4KB存儲塊。擦除塊是閃存頁面大小的倍數(shù)(如,256KB或512KB)。
存儲控制器被用于緩沖閃存頁面和控制Interlaken接口與閃存控制器之間的消息。Interlaken是用于結(jié)合線(單獨數(shù)據(jù)連接)的互連協(xié)議。也就是,其是與多信道的單個邏輯連接。MSC已經(jīng)結(jié)合了數(shù)據(jù)傳輸信道(如2個Interlaken接口),每個MMC一個。軟件可以在兩個MMC之間均勻地將頁面調(diào)度至分支。在一個實施方式中,每個MSC具有32個分支。當(dāng)在每一個MMC上具有入站和出站頁面時,數(shù)據(jù)路徑可以被劃分為4個主要部分。
復(fù)用到MMC0的來自32個分支的業(yè)務(wù)量
復(fù)用到MMC1的來自32個分支的業(yè)務(wù)量
解復(fù)用出至分支的來自MMC0的業(yè)務(wù)量
解復(fù)用出至分支的來自MMC1的業(yè)務(wù)量
這顯示在圖7中。項700表示一個數(shù)據(jù)路徑;項702表示另一個數(shù)據(jù)路徑,等等。還在圖示中顯示了統(tǒng)計塊704,該統(tǒng)計塊704僅發(fā)送STATS(統(tǒng)計)消息至MMC0。
該分布式存儲設(shè)計很好地有助于Altera芯片架構(gòu),該架構(gòu)在整個設(shè)備擴展其m20k存儲器。來自分支的128比特路徑將通過Interlaken FIFO 706進行攜帶并進入分支FIFO的“頂部”接口。在Interlaken接口與分支之間具有時鐘域改變。這在分支FIFO的“底部”接口進行。在圖8中顯示了示例性接口。
該整個存儲控制器被建立為一組分布式FIFO 800。本實施方式具有簡單的FIFO,但是可以將優(yōu)先權(quán)給予僅由報頭構(gòu)成的消息。在從Interlaken 706至閃存控制器802的“向南”方向,這允許將請求讀取至“追上(overtake)”寫入頁面。在向北方向,允許將完成寫入至追上讀取頁面。僅FIFO進入閃存控制器將需要改變?yōu)閮?yōu)先FIFO。
優(yōu)先FIFO使報頭和頁面準(zhǔn)備好同時傳輸至Interlaken接口706。如果Interlaken接口706是用于頁面但不用于報頭的流量控制器,那么報頭可以圍繞讀取頁面流動,允許在沒有什么事情可以繼續(xù)時完成寫入。這種情況會使存儲連貫性難于或不可能維持。
為了確保存儲內(nèi)容的一致性,可以使用基于優(yōu)先級的機制。如圖9所示的優(yōu)先FIFO由兩個FIFO構(gòu)成,一個大型的由存儲器900建立且一個小型的由邏輯902建立。輸入處的解復(fù)用塊904會檢查消息類型并將消息轉(zhuǎn)發(fā)至合適的(短的或長的)FIFO。在FIFO的輸出側(cè),采用簡單優(yōu)先方案的調(diào)度器906選擇哪一個FIFO下一個發(fā)送其消息(具有所附頁面)。
在一個實施方式中,數(shù)據(jù)路徑接口是通常的4線(開始(START)、結(jié)束(END)、有效(VALID)、準(zhǔn)備好(READY))類型接口,該接口具有128個數(shù)據(jù)比特。該接口將被用于至Interlaken塊的接口以及FIFO的兩側(cè)。這還可以被用于對至復(fù)用器的業(yè)務(wù)量進行流量控制。該接口可以被用于存儲控制器中的所有塊。
圖9的兩個FIFO類型可以使用4線(開始、結(jié)束、有效、準(zhǔn)備好)接口,雖然兩個準(zhǔn)備好信號可以被用于根據(jù)根來選擇保持哪個隊列,如圖2所示。
閃存控制器連接至存儲控制器的底部并控制一個閃存信道及控制閃存設(shè)備的操作。圖10示出了示例性存儲器和閃存存儲器架構(gòu)。在一個實施方式中,每一個MSC具有32個閃存控制器。每一個閃存控制器與一個8比特閃存信道通信。每一個閃存設(shè)備具有兩個信道,每一個信道具有4個邏輯單元(LUN)。因此每一個閃存控制器控制在與其進行通信的信道上的4個LUN。
葉子存儲控制器連接至存儲控制器FIFO 1000、1002、1004和1006。在這個工作模式中,葉子由“閃存”存儲芯片構(gòu)成。寫入頁面當(dāng)其到達閃存控制器時被存儲在寫入頁面緩沖存儲器中并且當(dāng)數(shù)據(jù)需要被發(fā)送至閃存信道時通過信道調(diào)度和控制時鐘讀取。來自閃存的讀取頁面被存儲在讀取頁面緩沖存儲器并然后適當(dāng)?shù)叵騇MC0或MMC1發(fā)出。
在一個實施方式中,閃存控制器被劃分為5個主要部分:命令和頁面解析器1008、LUN控制器FIFO 1010、LUN控制器1012、信道調(diào)度和控制1014及數(shù)據(jù)保護。在該設(shè)計中,至閃存控制器的命令可以在多個位置進行解析。這些可以包括:基于信用的流量控制、命令解析器、LUN控制器、信道調(diào)度器和在閃存控制器頂部的解復(fù)用塊?;谛庞玫牧髁靠刂茐K可以從MMC接收信用(CREDIT)命令。這些命令被用作無操作(NOP)命令,僅為了將緩沖區(qū)充滿度信息從MMC攜帶至MSC。信用控制器從數(shù)據(jù)流移除這些命令。該塊顯示在MSC設(shè)計頁面上的主MSC框圖中。解析命令的所有其他塊在圖10所示的閃存控制器框圖中顯示。
參考圖11所顯示的,特別地,命令&頁面解析器108尋找頁面和寫入命令。頁面命令使多件事情發(fā)生。第一,緩沖區(qū)從寫入頁面緩沖存儲器1102進行分配,及緩沖區(qū)的地址被放置進用于尋址的LUN的頁面隊列1104。然后該頁面的剩余部分從輸入FIFO(如,1000)傳遞至所分配的存儲緩沖區(qū)。頁面(PAGE)命令然后通過命令解析器塊1008從數(shù)據(jù)流移除。
命令解析器塊1008用狀態(tài)機檢查寫入命令,如果兩個頁面跟隨寫入1-頁面命令到達,那么就存在錯誤。在那種情況下,將FREE_BUFFER(釋放_緩沖區(qū))命令插入命令隊列并且LUN控制器釋放緩沖區(qū)而不是留其分配不用。一旦正確的寫入命令被檢測到,就將其放置進寫入隊列1106。所有其他命令進入“其他”隊列1108。FREE_BUFFER命令進入寫入隊列1106。
LUN控制器必須知道哪個命令去往閃存且它能處理哪個。LUN控制器可以直接處理write_error(寫入_錯誤)、ping(脈沖)和free_buffer。所有其他命令具有一些閃存交互并將通過信道調(diào)度器進行處理。LUN控制器執(zhí)行從讀取緩沖存儲器的緩沖區(qū)分配和寫入緩沖存儲器中的緩沖區(qū)釋放。
信道調(diào)度器解析用于讀取的操作碼、寫入和執(zhí)行命令。這些是主命令。RESET_LUN(重置_LUN)和RESET_MSC(重置_MSC)還被理解為其重置閃存設(shè)備上的LUN操作。信道調(diào)度器發(fā)布合適的讀取和寫入命令至閃存并在緩沖區(qū)之間移動數(shù)據(jù)。完整的命令通過LUN控制器以及讀取命令的緩沖地址傳送至已完成隊列1110。
解復(fù)用1112使完整的命令傳送至合適的MMC FIFO。必須還理解操作碼命令。讀取完成在LUN FIFO中具有并行頁面地址信息。解復(fù)用1112生成正確形式的PAGE(頁面)命令以用于將閃存頁面?zhèn)鬏斨梁线mMMC。
命令被解析為兩個分組并放置到兩個隊列,寫入隊列1106和用于所有其他命令的隊列1108。所有數(shù)據(jù)頁面被放置進寫入頁面緩沖區(qū)1102并且緩沖區(qū)的地址被傳送至頁面隊列1104。持有從其他命令分離的寫入允許讀取的優(yōu)先級高于寫入命令。
在返回方向,即從閃存設(shè)備至MMC,所有具有響應(yīng)的命令按執(zhí)行的順序放置在已完成隊列1112。任意頁面數(shù)據(jù),即讀取頁面,具有放置在讀取頁面緩沖區(qū)1114中的數(shù)據(jù),及該緩沖區(qū)的地址在頁面隊列1104中進行傳送。
圖12顯示了LUN控制器的實施方式。LUN控制器直接連接至LUN FIFO。LUN控制器具有兩個主要分組的命令:轉(zhuǎn)到閃存設(shè)備的命令和不轉(zhuǎn)到閃存設(shè)備的命令。例如,PING是不轉(zhuǎn)到閃存設(shè)備的命令的示例。ping命令完全在LUN控制器中執(zhí)行。PING命令通過命令調(diào)度器進入并且直接發(fā)出至LUN FIFO中的已完成隊列1112。WRITE_ERROR(寫入_錯誤)和FREE_BUFFER也完全在LUN控制器中進行處理。
所有其他命令與閃存設(shè)備具有一些交互。
RESET_MSC(重置_MSC)命令重置讀取和寫入緩沖存儲器中的所有緩沖區(qū)。還會在進行中異常中斷任何命令并發(fā)布RESET_LUN命令至閃存設(shè)備。RESET_MSC命令應(yīng)僅在沒有其他命令在進行的時候被調(diào)度。
通常,LUN控制器將向信道調(diào)度控制器“呈現(xiàn)”命令。這意味著有效的命令,該命令由操作碼、0、1或2個閃存地址及讀取和寫入緩沖地址構(gòu)成。在寫入的情況下,寫入地址指定的存儲位置被用于寫入閃存地址的閃存。在讀取的情況下,閃存地址被用于讀取頁面并被寫入讀取地址指定的緩沖區(qū)。
LUN控制器將保持讀取、寫入和閃存地址及操作碼(在以上圖示的底部顯示)直到信道調(diào)度器已經(jīng)在閃存信道上傳送命令并具有結(jié)果。在命令的最后,閃存設(shè)備的狀態(tài)被傳送至LUN控制器并且LUN控制器將狀態(tài)比特寫入返回消息并終止命令。一旦命令完成,信道調(diào)度器就指示多少緩沖區(qū)應(yīng)當(dāng)被釋放(在寫入情況下)或多少緩沖區(qū)應(yīng)當(dāng)現(xiàn)在被分配(在讀取情況下)。在此之后,命令調(diào)度器選擇哪個命令隊列應(yīng)當(dāng)被讀取,并且下一個命令被呈現(xiàn)給信道調(diào)度器以用于在閃存設(shè)備中執(zhí)行。
圖13示出了根據(jù)本發(fā)明的實施方式利用的信道調(diào)度器和控制塊。信道調(diào)度器被配置用于閃存設(shè)備初始化并復(fù)用來自LUN控制器的命令請求和數(shù)據(jù)傳遞。在一個實施方式中,所有命令和數(shù)據(jù)在8比特閃存信道上傳遞至閃存設(shè)備。初始化包括至閃存設(shè)備的初始RESET_LUN指令和接下來的命令,以啟動同時傳遞模式(閃存以非同步模式開始)。在需要設(shè)置驅(qū)動器強度和其他初始化參數(shù)的情況下,初始化ROM用于以命令模式在接口上引導(dǎo)命令。一旦所有四個LUN被初始化,主命令輪詢環(huán)被啟動。通常,READ_STATUS_ENHANCED(讀取_狀態(tài)_增強)命令用于查看LUN是否空閑及查看之前的命令是否已經(jīng)完成。該命令還有當(dāng)尋址到特定LUN時所有其他LUN不能驅(qū)動來自8比特數(shù)據(jù)總線的數(shù)據(jù)或不能讀取來自8比特數(shù)據(jù)總線的數(shù)據(jù)的副作用。
如果閃存設(shè)備中的LUN空閑且命令可用,那么命令被發(fā)送至LUN。在寫入的情況下,數(shù)據(jù)還在信道上傳遞至LUN。一旦命令在進行中,內(nèi)部閃存BUSY(忙)狀態(tài)就用READ_STATUS_ENHANCED命令進行輪詢。一旦命令完成,從命令返回的狀態(tài)就返回至LUN控制器。在讀取命令的情況下,數(shù)據(jù)在信道上從閃存設(shè)備讀取并發(fā)送至讀取頁面緩沖存儲器。在擦除的情況下,沒有頁面數(shù)據(jù)需要在閃存信道上傳遞。
數(shù)據(jù)保護可以用三個步驟來執(zhí)行:增加保護校驗比特至原始數(shù)據(jù)、處理數(shù)據(jù)比特和校驗比特以查看是否存在錯誤(產(chǎn)生校驗子(syndrome)以指示哪個比特是錯誤的)及校正發(fā)現(xiàn)的錯誤(如果有的話)并恢復(fù)原始數(shù)據(jù)比特。常常后面二者圍繞FIFO進行結(jié)合。一般來說,數(shù)據(jù)分成塊。一個問題是數(shù)據(jù)校正需要校正比特所在的數(shù)據(jù)塊和信息,并且常常塊在“調(diào)整比特”信息可用的時候已經(jīng)“過去”。圖14顯示了這些塊。特別地,附圖示出了檢查比特的塊1400、調(diào)整比特的塊1402和增加比特的塊1404。
增加DP比特塊1404在其通過頁面解析器被寫入時接受4kB頁面并且每一個512B的數(shù)據(jù)插入額外104B。在我們寫入頁面時,每一個512B變?yōu)榘ㄐr炞止?jié)的616B。在增加DP比特塊1404需要寫入存儲器時,可以暫停頁面流量并使輸入FIFO后退一點,所以校驗比特的插入是相當(dāng)直接的。寫入頁面緩沖區(qū)中的閃存頁面現(xiàn)在被保護并可以被寫出至閃存。
一段時間之后,當(dāng)我們從閃存讀取頁面時,所保護的頁面從閃存讀取并通過檢查DP比特塊。該塊將字節(jié)直接傳送至讀取頁面緩沖區(qū)并使用數(shù)據(jù)字節(jié)和校驗字節(jié)來產(chǎn)生指出每一個塊中有什么錯誤的校驗子。校驗子信息通過LUN控制器以及緩沖地址中的之前非特定的隊列。
在從讀取頁面緩沖區(qū)讀取閃存頁面數(shù)據(jù)時,校驗子中指定的校正可以被應(yīng)用于616字節(jié)的塊并且它們可以被寫入解復(fù)用塊1406作為512B的校正塊。如果校驗子比預(yù)期的大很多,那么可以使用FIFO。
在一個實施方式中,至閃存控制器的輸入包括4線握手及16比特的數(shù)據(jù)。4線是在其他方向流動的start_bit(開始_比特)、end_bit(結(jié)束_比特)、valid(有效)和ready(準(zhǔn)備好)。閃存控制器的底部連接到實際的閃存設(shè)備并因此通過設(shè)備的數(shù)據(jù)表指定端口分配。
系統(tǒng)基板(SBB)經(jīng)由八個連接件附著至計算機機架中四個根接口板(RIB)的一側(cè)的底部。四個存儲模塊基板(MMBB)卡插入SBB頂面上的連接件。除了功率分配,SBB單單是出于簡化至計算機機架的連接的目的的互連機制。
承載卡充當(dāng)用于十六個分支的基板。每個根具有一個承載卡并每個系統(tǒng)高達八個。該板通過合適的連接件向承載卡提供功率分配。冗余的熱插拔功率還向該板供應(yīng)對接。
分支卡被設(shè)計為現(xiàn)場可替換單元(FRU)。該FRU由單個葉子控制器和十六個固態(tài)設(shè)備構(gòu)成。6U附件可以安裝在計算機上的19”架子中。還包括足夠冷卻單元的電源和風(fēng)扇,也是EMI屏蔽。
現(xiàn)成的12V電源能夠以220V AC或110V AC功率運行單元。12V供給電極合適地進行分配并向下調(diào)節(jié)至必要的較低電壓。本地穩(wěn)壓器(VR)和低壓差穩(wěn)壓器(LDO)提供調(diào)整。
為單元供電的12V的使用最終支持電池備份早期寫入終止(EWT)單體。不間斷電源(UPS)以AC輸入水平進行操作。
存儲緩沖區(qū)(如,英特爾7510可擴展存儲緩沖區(qū))在概念上基于如JESD82-20A所描述的JEDEC完全緩沖的雙重內(nèi)聯(lián)存儲模塊(FBDIMN)高級存儲緩沖區(qū)(AMB)。圖15顯示了如兩個獨立的AMB 1500、1502的存儲緩沖區(qū)的邏輯示圖,每一個AMB操作一對DDR3RDIMM。與JEDEC AMB不同,英特爾7510不支持菊花鏈。因此,需要一個7510芯片以用于SMIB卡上的兩個SMI總線中的每一者。
與分支和葉子結(jié)合的根復(fù)合體創(chuàng)建了用于數(shù)據(jù)頁面的分布式網(wǎng)絡(luò),該數(shù)據(jù)頁面將被寫入葉子中的固態(tài)存儲器(如閃存存儲器)頁面。圖16是顯示…的根復(fù)合體的表示。
創(chuàng)建以用于工作模式的軟件包括Linux塊設(shè)備驅(qū)動器和存儲模塊仿真器。仿真和單元測試框架可用于運行Linux塊設(shè)備驅(qū)動器和存儲模塊仿真器。
軟件組件通常包括商業(yè)智能應(yīng)用、欺詐檢測應(yīng)用、程序化交易應(yīng)用或其他需要大型數(shù)據(jù)集及因此的大型存儲器的應(yīng)用。此外,應(yīng)用常常需要對數(shù)據(jù)的隨機接入和高讀取/寫入比率。這些應(yīng)用是擁有者/使用者可以直接將時間結(jié)果轉(zhuǎn)化為利益的類型。需要快速的(通常為實時的)響應(yīng)的其他應(yīng)用(諸如社交網(wǎng)絡(luò)、大量玩家的在線游戲及實時數(shù)據(jù)挖掘)對大型存儲器具有類似需求以保存正在處理的數(shù)據(jù)的。
理想地,應(yīng)用在系統(tǒng)中運行需要很少修改或不需要修改。否則,應(yīng)用的優(yōu)勢可能一直通過調(diào)整/更改應(yīng)用來獲得,以利用系統(tǒng)的硬件和軟件組件。
在一個或多個實施方式中,數(shù)據(jù)庫是數(shù)據(jù)集接近100TB或更多的相關(guān)的或?qū)ο髷?shù)據(jù)庫。這些數(shù)據(jù)集不能使用基于DRAM的存儲系統(tǒng)進行成本有效的處理并且它們不能使用基于磁盤的系統(tǒng)在合理時間處理。設(shè)計用于在多核/多處理器環(huán)境下執(zhí)行的數(shù)據(jù)庫維持支持這些環(huán)境的算法和接口。本發(fā)明可以有效利用這些接口。一些數(shù)據(jù)庫可能為了提供跨多個存儲塊分配數(shù)據(jù)接入的并行執(zhí)行而進行修改。
閃存存儲硬件需要將由操作系統(tǒng)請求的邏輯數(shù)據(jù)地址與閃存存儲硬件的物理地址解耦合。最低限度上,呈現(xiàn)給操作系統(tǒng)的數(shù)據(jù)地址空間與閃存設(shè)備的物理地址空間解耦合。該重新映射以單個儲存數(shù)據(jù)頁面的間隔來執(zhí)行,對于該系統(tǒng),該頁面是4096字節(jié)的頁面。其還有助于能夠重新映射物理級閃存,以處理不良塊替換和執(zhí)行塊重新排序以用于損耗均衡。這種重新映射可以在硬件中處理,但是還可以在軟件中通過在閃存塊上執(zhí)行額外級別的地址轉(zhuǎn)化來執(zhí)行該重新映射。這種塊重新排序在擦除塊級別執(zhí)行。
我們把操作系統(tǒng)查看到的地址空間稱為數(shù)據(jù)地址空間(DAS)。在該空間中的地址稱為數(shù)據(jù)地址(DA)。數(shù)據(jù)地址的頁碼部分是數(shù)據(jù)頁碼(DPN)。
我們把閃存存儲的虛擬地址空間稱為閃存虛擬地址空間(FVAS)。在該空間中的地址稱為閃存虛擬地址(FVA)。閃存虛擬地址的頁碼部分是閃存虛擬頁碼(FVPN)。
最后,我們把閃存存儲的物理地址空間稱為閃存物理地址空間(FPAS)。在該空間中的地址稱為閃存物理地址(FPA)。閃存地址的頁碼部分是閃存物理頁碼(FPPN)。應(yīng)當(dāng)注意的是在x86中存在已知術(shù)語虛擬地址(VA)、虛擬頁碼(VPN)、線性地址(LA)、線性頁碼(LPN)、物理地址(PA)和物理頁碼(PPN)。我們不想使用術(shù)語邏輯地址或物理地址,以避免與x86的具有相同縮寫的術(shù)語混淆。因而我們通過引用閃存虛擬或閃存物理地址替代僅虛擬或物理地址來明確消除混淆。數(shù)據(jù)地址空間、閃存虛擬地址空間和閃存物理地址空間之間的映射如圖17所示。
負責(zé)提供數(shù)據(jù)的固件在可以改變大小的數(shù)據(jù)塊上進行并行操作。較小的塊比較大的塊提供得更快。固件可以在ASIC或其他硬件中實現(xiàn)。
圖18示出了根據(jù)本發(fā)明的一個或多個實施方式的計算系統(tǒng)1800。如所示的,計算系統(tǒng)1800包括處理器復(fù)合體1830、接口復(fù)合體1834、交換機復(fù)合體1840和存儲器復(fù)合體1850。處理器復(fù)合體1830可以包括一個或多個處理器1832。每一個處理器1832可以包括一個或多個通用中央處理單元(CPU)核、一個或多個多線程圖形處理單元(GPU)核或其任何技術(shù)上可行的組合。在一個實施方式中,處理器復(fù)合體1830包括四個處理器1832(0)至1832(3),其中每一個處理器1832包括至少十五個CPU核。至少十五個CPU核中的每一者可以包括本地緩存(如,L0緩存)或包括本地緩存的緩存層級。在另一實施方式中,至少一個處理器1832包括一個或多個GPU核。處理器1832通過處理器存儲接口1833耦合至接口復(fù)合體1834。在一個實施方式中,至少一個處理器1832對應(yīng)圖1中的至少一個CPU 100。
如所示,每一個處理器1832可以耦合至接口復(fù)合體1834內(nèi)的多個存儲控制器(MC)1836。在一個實施方式中,存儲控制器1836對應(yīng)圖1的存儲控制器110。在一個實施方式中,每一個處理器1832耦合至三個或更多存儲控制器1836。每一個存儲控制器1836通過交換機接口1837耦合至交換機復(fù)合體1840,該交換機接口1837包括獨立鏈路。如所示的,每一個存儲控制器1836耦合至在交換機復(fù)合體1840內(nèi)的所關(guān)聯(lián)的交換機1842上的獨立端口。在一個實施方式中,交換機1842耦合在一起以形成非阻塞交換機集群(諸如交叉交換機),該交換機集群配置為將接入請求從存儲控制器1836轉(zhuǎn)發(fā)至存儲復(fù)合體1850并將由接入請求產(chǎn)生的數(shù)據(jù)傳回相應(yīng)的存儲控制器1836。每一個交換機1842可以通過相應(yīng)的閃存控制器接口鏈路1847耦合至存儲復(fù)合體1850內(nèi)的一個或多個閃存控制器1852。在一個實施方式中,交換機1842(2)和1842(3)每一者耦合至閃存控制器1852(0)和1852(1)二者。在此類實施方式中,交換機1842(0)和1842(1)可以包括復(fù)制接口1843,該復(fù)制接口1843配置為將存儲請求復(fù)制到另外的存儲復(fù)合體(未示出)、另外的交換機復(fù)合體(未示出)或其結(jié)合。所復(fù)制的存儲請求可以反映出通過交換機1842(2)和1842(3)傳送至存儲復(fù)合體1850的存儲接入請求(如,讀取、寫入請求)。
存儲復(fù)合體1850包括閃存控制器1852和存儲子系統(tǒng)1854。每一個閃存控制器1852可以通過存儲接口1851耦合至相應(yīng)的存儲子系統(tǒng)1854。在一個實施方式中,每一個閃存控制器1852耦合至多個存儲子系統(tǒng)1854。每一個存儲子系統(tǒng)1854可以包括一個或多個集成電路存儲設(shè)備。在一個實施方式中,每一個存儲子系統(tǒng)1854包括一個或多個閃存存儲設(shè)備。在另一實施方式中,一個或多個存儲子系統(tǒng)1854包括DRAM存儲設(shè)備。在特定實施方式中,每一個存儲子系統(tǒng)1854對應(yīng)圖1的葉子114。
在正常操作期間,存儲接入請求由處理器1832產(chǎn)生。存儲接入請求通過存儲控制器1836傳送,并由交換機1842轉(zhuǎn)發(fā)至合適的閃存控制器1852。每一個閃存控制器1852將給定的存儲接入請求引導(dǎo)至合適的存儲子系統(tǒng)1854,其中與存儲接入請求相關(guān)聯(lián)的數(shù)據(jù)駐留在該存儲子系統(tǒng)。存儲接入請求應(yīng)答從閃存控制器1852返回。給定的應(yīng)答可以包括由存儲讀取請求所請求的數(shù)據(jù)塊或響應(yīng)于存儲寫入請求的寫入應(yīng)答。緩存可以在存儲控制器1836、交換機1842、閃存控制器1852或其任何組合中實現(xiàn)。在特定實施方式中,寫入緩存可以向由處理器1832產(chǎn)生的寫入請求提供更低延遲應(yīng)答。例如,在一個實施方式中,存儲控制器1836實現(xiàn)寫入緩存,從而在所關(guān)聯(lián)的數(shù)據(jù)寫入相應(yīng)的目標(biāo)存儲子系統(tǒng)1854之前,寫入完成應(yīng)答從存儲控制器1836傳送回至處理器1832。
在一個實施方式中,每一個存儲控制器1836被配置為提供請求隊列以容納由多個處理器核和/或與每一個處理器1832關(guān)聯(lián)的多個進程線程產(chǎn)生的多個未決存儲請求。可以對讀寫請求給定比關(guān)聯(lián)于存儲復(fù)合體1850的寫入請求高的隊列優(yōu)先級,從而可以對寫入應(yīng)答給定比關(guān)聯(lián)于處理器復(fù)合體1830的應(yīng)答的讀取應(yīng)答高的優(yōu)先級。請求隊列操作至少在圖7-10中更加具體地描述。容納多個未決的存儲接入請求(如,并發(fā)的、未完成的讀取請求和寫入請求)為存儲控制器1836創(chuàng)建多個設(shè)計結(jié)果和需求。
在一個實施方式中,通過在處理器1832上執(zhí)行的處理產(chǎn)生的存儲地址從數(shù)據(jù)地址空間(DAS)重新映射至閃存虛擬地址(FVA)空間,并且進一步映射至閃存虛擬頁碼(FVPN),并最后映射至閃存物理地址空間(FPAS)。該映射之前在圖17中進行了描述。部分重新映射可以由處理器1832、存儲控制器1836、交換機1842、閃存控制器1852或其任意結(jié)合來執(zhí)行。
計算系統(tǒng)1800的實施方式需要以在規(guī)模上顯著大于(如,數(shù)量級大于)傳統(tǒng)計算機系統(tǒng)的配置來操作,同時對每一個處理器1832保留對大規(guī)模數(shù)據(jù)的共同接入,該大規(guī)模數(shù)據(jù)可以駐留在存儲復(fù)合體1850中。由于大的處理規(guī)模、應(yīng)用數(shù)據(jù)的異常地大的存儲規(guī)模及向處理器1832內(nèi)執(zhí)行的所有處理提供對駐留在存儲復(fù)合體1850內(nèi)的潛在的所有應(yīng)用數(shù)據(jù)的共享接入的需求,特定的額外設(shè)計特征可以在計算系統(tǒng)1800內(nèi)有利地實現(xiàn)。此類設(shè)計特征傳統(tǒng)上在一般計算系統(tǒng)中不需要。與大規(guī)模有效性能相關(guān)聯(lián)的特定設(shè)計特征包括:(1)可擴展分頁操作、(2)存儲容量的可擴展分配和利用、(3)為了容納大型、低延遲讀取和寫入操作進行的可擴展存儲頁面和塊操作、(4)對大量數(shù)據(jù)集的數(shù)據(jù)保護及(5)與傳統(tǒng)固態(tài)存儲設(shè)備(如,閃存存儲器)所關(guān)聯(lián)的操作限制有關(guān)的固態(tài)存儲器的性能優(yōu)化。
更特別地,具有多個執(zhí)行線程的多個處理器上的大型計算一般將產(chǎn)生大量并發(fā)的、獨立的存儲接入請求。此類存儲接入請求可能被引導(dǎo)至存儲復(fù)合體1850中的應(yīng)用數(shù)據(jù)的共享數(shù)據(jù)圖像,導(dǎo)致與傳統(tǒng)計算系統(tǒng)相關(guān)的極其集中的接入利用。
此外,因為給定的應(yīng)用數(shù)據(jù)覆蓋區(qū)(footprint)的數(shù)量級(如,數(shù)百太字節(jié)至數(shù)百拍字節(jié))大于包括少于太字節(jié)的傳統(tǒng)應(yīng)用數(shù)據(jù)覆蓋區(qū),計算系統(tǒng)1800有利地實現(xiàn)了應(yīng)用數(shù)據(jù)的數(shù)據(jù)保護。在此類設(shè)置中的數(shù)據(jù)保護是極其有幫助的,因為主要的固態(tài)存儲技術(shù)中的數(shù)百太字節(jié)的數(shù)據(jù)的物理存儲軟錯誤率可能在目標(biāo)應(yīng)用的運行時間期間產(chǎn)生許多錯誤。特定存儲設(shè)備技術(shù)甚至可能引起相對頻繁比率的多個、并發(fā)的錯誤,導(dǎo)致需要兩層或更多層的數(shù)據(jù)保護。在特定設(shè)置中,數(shù)據(jù)的整個塊可能被破壞或“擦除”,這需要實現(xiàn)擦除碼或技術(shù)等同以提供數(shù)據(jù)保護和恢復(fù)。例如,如果包括存儲子系統(tǒng)1854的固態(tài)閃存存儲設(shè)備失效或如果其中數(shù)據(jù)塊被破壞,那么數(shù)據(jù)塊就會丟失(如,擦除)。可以實施擦除碼來恢復(fù)數(shù)據(jù)塊,該數(shù)據(jù)塊諸如在以上示例中丟失的數(shù)據(jù)塊。導(dǎo)致數(shù)據(jù)顯著損失的失效事件是非常罕見的,其沒有激勵傳統(tǒng)系統(tǒng)設(shè)計者來開發(fā)特征以解決此類失效事件。然而,采用大小在數(shù)百太字節(jié)至許多拍字節(jié)的有效的、固態(tài)存儲器主機應(yīng)用數(shù)據(jù),如果計算系統(tǒng)1800的適當(dāng)操作不是必要的,數(shù)據(jù)保護就會變成非常有利。
在特定實施方式中,計算系統(tǒng)1800可以實現(xiàn)可擴展分頁操作以容納與處理器1832接入存儲復(fù)合體1850相關(guān)聯(lián)的非常高吞吐量的、低延遲的存儲操作。特別地,計算系統(tǒng)1800可以實現(xiàn)用于提供壓縮虛擬頁面表格的機制,該表格實現(xiàn)為執(zhí)行不同的地址空間映射(如,以上所討論的DAS到FVA、到FVPN到FPAS映射)。因為存儲復(fù)合體1850內(nèi)的目標(biāo)塊范圍非常大,所以傳統(tǒng)虛擬頁面映射技術(shù)會導(dǎo)致大的、無效的映射表格。于此公開的虛擬頁面映射技術(shù)針對更多的存儲接入和更高的執(zhí)行效率的減少了整體表格大小。該技術(shù)在圖21A-21D中描述。
此外,計算系統(tǒng)1800可以實現(xiàn)無鎖隊列以用于在兩個處理器之間傳送命令和命令完成應(yīng)答,而無需處理器阻止執(zhí)行進行,前提是在隊列中存在空間。在一個實施方式中,無鎖隊列被實現(xiàn)為循環(huán)緩沖區(qū),如結(jié)合圖22所描述的。額外的用于無鎖緩沖區(qū)操作的技術(shù)結(jié)合圖24和25描述。
在特定實施方式中,計算系統(tǒng)1800可以實現(xiàn)存儲容量的可擴展分配和利用以容納極大量的應(yīng)用數(shù)據(jù)覆蓋區(qū)。特別地,計算系統(tǒng)1800可以實現(xiàn)在沒有處理器干預(yù)的情況下移動存儲復(fù)合體1850內(nèi)的活動(配置為激活應(yīng)用處理)塊的機制。此類移動操作(于此稱為遷移樞軸)結(jié)合圖26和28進行描述。在一個實施方式中,遷移樞軸被實現(xiàn)為容納數(shù)據(jù)保護。此外,計算系統(tǒng)1800可以實現(xiàn)所分配的讀取拷貝操作,以準(zhǔn)備用于擦除操作,從而實現(xiàn)高性能讀取操作。該技術(shù)結(jié)合圖29和30進行討論。該操作可以使包括閃存存儲設(shè)備的存儲復(fù)合體1850有效服務(wù)來自處理器復(fù)合體1830的讀取/寫入請求。同時還收回和準(zhǔn)備最近將要寫入的頁面。計算系統(tǒng)1800還可以實現(xiàn)修剪(trim)范圍功能以結(jié)合駐留在存儲復(fù)合體1850內(nèi)的一個或多個文件系統(tǒng)進行操作。
在一個實施方式中,存儲復(fù)合體1850被配置為儲存與應(yīng)用數(shù)據(jù)相關(guān)聯(lián)的數(shù)據(jù)塊,以及儲存所關(guān)聯(lián)的虛擬映射表格/虛擬化表格、不良塊信息、修剪信息和在技術(shù)上與存儲復(fù)合體1850內(nèi)的數(shù)據(jù)操作和重構(gòu)有關(guān)的其他數(shù)據(jù)。通過將相同保護的數(shù)據(jù)集內(nèi)的虛擬化映射、不良塊映射等儲存為目標(biāo)數(shù)據(jù),數(shù)據(jù)的全部恢復(fù)和與存儲復(fù)合體1850相關(guān)聯(lián)的映射可以僅使用可用于存儲復(fù)合體1850上的數(shù)據(jù)來有利執(zhí)行。作為該技術(shù)的一個示例,圖31示出了處置保護條帶內(nèi)的元數(shù)據(jù)。相反,許多傳統(tǒng)存儲系統(tǒng)儲存獨立于目標(biāo)數(shù)據(jù)的虛擬化表格,在恢復(fù)期間創(chuàng)建效率低下。圖32-34示出了儲存駐留在存儲復(fù)合體1850內(nèi)的塊內(nèi)的虛擬化信息的特定示例。圖35示出了儲存駐留在存儲復(fù)合體1850內(nèi)的塊內(nèi)的不良塊信息。在每一情況下,擦除碼保護可以跨塊實現(xiàn)。
在特定實施方式中,計算系統(tǒng)1800可以實現(xiàn)可擴展存儲頁面和塊操作以容納至存儲復(fù)合體1850的大型、低延遲的讀取和寫入接入。這些操作被實現(xiàn)為在存儲復(fù)合體1850內(nèi)每一個可用存儲子系統(tǒng)1854上獲取總橫截面的帶寬的高度利用,從而向處理器復(fù)合體1830提供極高的存儲帶寬。在一個實施方式中,大型并行存儲架構(gòu)實現(xiàn)可擴展存儲頁面和塊操作。大型并行存儲架構(gòu)的一個實施方式在圖18中示出,并且概念上的細節(jié)在圖36-38中進一步示出。在特定實施方式中,DRAM緩存提供了預(yù)讀取緩存和重構(gòu)相關(guān)的計算資源,例如可以在存儲控制器1836的每一者中實現(xiàn)。用于預(yù)讀取的DRAM緩存進一步在圖39中示出。跟隨在寫入數(shù)據(jù)寫入指定的目標(biāo)之前的應(yīng)答,一個實施方式通過DRAM緩沖區(qū)中的寫入緩沖提供了寫入操作的快速應(yīng)答。DRAM緩沖區(qū)可以在存儲控制器1836內(nèi)實現(xiàn)。該技術(shù)在圖40中示出??商鎿Q地,DRAM緩沖區(qū)可以在系統(tǒng)存儲器(未示出)內(nèi)實現(xiàn),該系統(tǒng)存儲器與處理器1832相關(guān)聯(lián)或直接耦合至處理器1832。
在傳統(tǒng)系統(tǒng)中,存儲接入性能通常在處理較大(如,8MB)塊接入請求時由系統(tǒng)效率限制。操作系統(tǒng)可以提供異步操作,但是與管理大塊接入請求相關(guān)聯(lián)的開銷可以消除通過執(zhí)行異步輸入/輸出操作增加的效率。在一個實施方式中,用于多個、并發(fā)的輸入/輸出操作的技術(shù)改善了與執(zhí)行大量輸入/輸出操作相關(guān)聯(lián)的性能,該大量輸入/輸出操作諸如通過在包括一個或多個處理器1832的多個核上分配相關(guān)的工作量進行的大塊讀取/寫入操作。圖41和42更具體地示出了該技術(shù)。
讀取性能可以通過這里稱為“環(huán)讀”(read-around)的技術(shù)改善,從而與包括存儲子系統(tǒng)1854的忙的存儲資源相關(guān)聯(lián)的數(shù)據(jù)塊被重構(gòu),而不是讀取。存儲資源因為包括存儲資源的塊被寫入而可能是忙的。存儲資源可以包括這里稱為LUN的子電路。在特定情況下,寫入數(shù)據(jù)塊比重構(gòu)數(shù)據(jù)塊耗費時間長很多(如,長20倍)。因此,環(huán)讀技術(shù)與等待和執(zhí)行目標(biāo)數(shù)據(jù)的直接讀取相比可以提供性能優(yōu)勢。該環(huán)讀技術(shù)在圖43中進一步示出。在特定實施方式中,寫入操作被調(diào)度以有利地便于環(huán)讀時機從而改善平均讀取性能。在一個實施方式中,為不同的存儲控制器1836根據(jù)每一者的可用帶寬提供存儲帶寬??捎脦捒梢员硎竟潭ㄏ到y(tǒng)特征或正在進行的工作量。圖44更具體地示出了這個概念。
在特定實施方式中,計算系統(tǒng)1800可以實現(xiàn)大數(shù)據(jù)集的數(shù)據(jù)保護。在一個此類實施方式中,如圖45和46所示,計算系統(tǒng)1800可以結(jié)合序號實現(xiàn)數(shù)據(jù)保護以在系統(tǒng)崩潰的情況下實現(xiàn)頁面虛擬化表格(PVT)的重新創(chuàng)建。在一個實施方式中,如圖47-49所示,計算系統(tǒng)1800可以根據(jù)系統(tǒng)生命期實現(xiàn)針對不同的失效特征的自適應(yīng)數(shù)據(jù)保護。例如,系統(tǒng)最初可以采用較少的保守保護方案和在操作時間的某一時刻過渡至更保守的保護方案而進行操作。在特定設(shè)置中,垃圾收集與數(shù)據(jù)保護方案相互作用。這種相互作用由于與需要在寫入閃存存儲器之前擦除閃存存儲器所關(guān)聯(lián)的實際需求而被進一步復(fù)雜化。在一個實施方式中,計算系統(tǒng)1800實現(xiàn)在垃圾收集期間寫入塊的循環(huán)分配系統(tǒng),及實現(xiàn)可以根據(jù)自由空間閾值觸發(fā)的收回機制。在一個實施方式中,連續(xù)的數(shù)據(jù)保護和連續(xù)的垃圾收集通過自適應(yīng)地平衡應(yīng)用接入請求和垃圾收集活動來提供。本實施方式在圖50-51中示出。以上技術(shù)有利地使計算系統(tǒng)1800能夠有效地在提供高度數(shù)據(jù)保護的同時操作在高性能級別。如之前所討論的,數(shù)據(jù)保護非常有利地給定了計算系統(tǒng)1800支持的應(yīng)用存儲覆蓋區(qū)的規(guī)模。
在特定實施方式中,計算系統(tǒng)1800可以實現(xiàn)固態(tài)存儲器的關(guān)于與傳統(tǒng)固態(tài)存儲設(shè)備(如,閃存存儲器)相關(guān)聯(lián)的操作約束的性能優(yōu)化。一種約束涉及與閃存設(shè)備內(nèi)的接入鄰近數(shù)據(jù)塊相關(guān)聯(lián)的讀取和/或?qū)懭搿案蓴_”。圖52中描述的隨機化技術(shù)用作減少此類干擾效應(yīng)的影響;該技術(shù)因此減少了凈錯誤率和關(guān)聯(lián)的性能減少機制。在一個實施方式中,有效命令處理電路模塊實現(xiàn)了接入抽象,該模塊包括用于實現(xiàn)具體的接入控制的一組狀態(tài)機,狀態(tài)機發(fā)信號至包括存儲子系統(tǒng)1854的閃存設(shè)備。命令處理電路模塊在概念上在圖53-56中示出。計算系統(tǒng)1800的特定實施方式需要高度的故障容差以用于高可用性計算并因此實現(xiàn)組件級冗余。此類冗余的一個示例在圖57中示出。
以上技術(shù)和實施方式可以在各種系統(tǒng)架構(gòu)中獨立實現(xiàn),然而其可以在計算系統(tǒng)1800內(nèi)一起有利地實現(xiàn)以提供高性能、高可用性的用于執(zhí)行需要異常地大的應(yīng)用存儲覆蓋區(qū)的應(yīng)用的計算平臺。
圖19示出了根據(jù)本發(fā)明的一個或多個實施方式的存儲控制器1836。如所示,存儲控制器1836包括處理器接口模塊1960、郵箱獲取引擎1962、一組命令引擎1964、一組接口緩沖區(qū)1966、多個DRAM引擎1968、交換機接口模塊1970、命令解析器1972和命令隊列(CQ)引擎1974。
在一個實施方式中,處理器接口模塊1960通過處理器存儲接口1833耦合至處理器1832。在一個實施方式中,處理器存儲接口1833實現(xiàn)PCI表示(TM)接口。處理器存儲接口1833可以被配置為接收與存儲接入請求有關(guān)的命令,該存儲接入請求包括讀取請求和寫入請求。每一個存儲接入請求可以包括用于待從存儲復(fù)合體1850讀取或待寫入至存儲復(fù)合體1850的任意大小的數(shù)據(jù)的請求。在特定實施方式中,處理器接口模塊1960被配置為實現(xiàn)與圖22有關(guān)的討論的無鎖通信和命令隊列技術(shù)。
郵箱獲取引擎1962通過處理器接口模塊1960檢索命令(如,接入請求)并將請求郵遞至接口緩沖區(qū)1966內(nèi)的合適的執(zhí)行隊列郵箱存儲器。命令解析器1972解碼命令并引導(dǎo)合適的執(zhí)行引擎,諸如一組命令引擎1964內(nèi)的命令引擎。例如,讀取數(shù)據(jù)塊的命令可以通過郵箱獲取引擎1962獲取、向接口緩沖區(qū)1966內(nèi)的執(zhí)行隊列郵箱存儲器郵遞執(zhí)行、通過命令解析器1972解析并向駐留在一組命令引擎1964內(nèi)的RBD命令引擎?zhèn)魉蛨?zhí)行。
在一個實施方式中,DRAM引擎1968包括至少讀取存儲數(shù)據(jù)緩沖區(qū)(RMD)、寫入數(shù)據(jù)存儲緩沖區(qū)(WDM)和寫入存儲閃存緩沖區(qū)(WMF)、復(fù)用器和DRAM特定接口,諸如DDR3存儲控制器。此外,每一個DRAM引擎1968可以包括至少一個DRAM存儲設(shè)備。
包括寫入存儲接入請求的命令可以至少包括目標(biāo)地址、請求范圍(如,大小)和根據(jù)請求范圍即將寫入目標(biāo)地址的寫入數(shù)據(jù)塊。在特定實施方式中,寫入數(shù)據(jù)塊由處理器接口模塊1960接收并直接寫入一個或多個DRAM引擎1968??商鎿Q地,寫入數(shù)據(jù)可以首先寫入包括接口緩沖區(qū)1966的SRAM緩沖區(qū)。一旦寫入數(shù)據(jù)塊寫入SRAM緩沖區(qū)或一個至少一個DRAM引擎1968中,應(yīng)答就可以傳送回至相應(yīng)的請求方(如,處理器1932)。寫入數(shù)據(jù)塊通過WDM緩沖區(qū)寫入至一個或多個DRAM存儲設(shè)備,并且隨后通過即將通過交換機接口模塊1970傳送至存儲復(fù)合體1850的WMF緩沖區(qū)從相同的DRAM存儲設(shè)備進行檢索。在存儲復(fù)合體1850中,寫入數(shù)據(jù)塊寫入包括存儲子系統(tǒng)1854的存儲設(shè)備。
包括讀取存儲接入請求的命令可以包括至少目標(biāo)地址和請求大小。在特定實施方式中,所請求的數(shù)據(jù)塊通過交換機接口模塊1970從存儲復(fù)合體1850接收并寫入包括接口緩沖區(qū)1966的SRAM緩沖區(qū)。可替換地,所請求的數(shù)據(jù)塊可以寫入一個或多個DRAM引擎1968。命令隊列引擎1974完成每一個命令并引起即將通過處理器接口模塊1960傳送回至命令發(fā)起方(如,處理器1832)的應(yīng)答。
如所示,存儲控制器1836包括使用DDR3DRAM設(shè)備實現(xiàn)的三個DRAM引擎1968及使用雙向40GE鏈路每一者實現(xiàn)的包括交換機接口1837的兩個鏈路。在其他實施方式中,可以實現(xiàn)不同數(shù)量的DRAM引擎1968,可以使用不同類型的存儲設(shè)備而不是DDR3DRAM設(shè)備,或者可以實現(xiàn)其任意結(jié)合。此外,不同數(shù)量的鏈路可以被實現(xiàn)用于交換機接口1837、可以使用不同的物理接口技術(shù)而不是40GE,或者可以實現(xiàn)其任意結(jié)合。
圖20示出了根據(jù)本發(fā)明的一個或多個實施方式的閃存控制器1852。如所示,閃存控制器1852包括耦合至閃存控制器接口鏈路1847的接口模塊2080。在一個實施方式中,閃存控制器接口鏈路1847包括耦合至與交換機1842關(guān)聯(lián)的相應(yīng)的端口的一個雙向40GE鏈路。在其他實施方式中,閃存控制器1852包括兩個或更多閃存控制器接口鏈路1847。閃存控制器1852進一步包括多個閃存信道子系統(tǒng)2082,每一個閃存信道子系統(tǒng)耦合至存儲子系統(tǒng),諸如存儲子系統(tǒng)1854。包括每一個閃存新的子系統(tǒng)2082的閃存I/O控制器通過存儲接口1851耦合至相應(yīng)的存儲子系統(tǒng)1854。在一個實施方式中,每一個閃存信道子系統(tǒng)2082被配置為獨立地在相關(guān)聯(lián)的存儲子系統(tǒng)1854上執(zhí)行讀取、寫入和清除操作。這里參考閃存存儲設(shè)備討論了示例性的實施方式;然而,任何技術(shù)上可行類型的存儲設(shè)備可以實現(xiàn)一個或多個存儲子系統(tǒng)1854。雖然閃存存儲器的特征為非易失性,但是在特定實施方式中,易失性存儲器可以被用于實現(xiàn)存儲子系統(tǒng)1854。
本發(fā)明的實施方式在存儲層級中實現(xiàn)了多層獨立操作元件,該存儲層級配置為提供極大的而可靠且可復(fù)原存儲器,該存儲器可以在多個處理器上共享,每一個處理器執(zhí)行多個線程。每一層可以調(diào)度、列隊、轉(zhuǎn)發(fā)、完成和緩存命令和所關(guān)聯(lián)的數(shù)據(jù),因此大量待決的請求可以在整個系統(tǒng)內(nèi)同時共存和進行,從而實現(xiàn)存儲復(fù)合體1850內(nèi)每一個可用存儲子系統(tǒng)1854上的總橫截面的帶寬的高度利用。
在所公開的系統(tǒng)中,數(shù)據(jù)獨立于文件系統(tǒng)進行移動。本發(fā)明的實施方式在沒有文件系統(tǒng)元數(shù)據(jù)改變的情況下使用頁面虛擬化表格(PVT)使得頁面移動。在大型媒介系統(tǒng)中,該表格常常是巨大的(如,對于用于3PB的媒介的64比特頁面虛擬化表格,為6TB)。
為了減少表格大小,表格項被共享。在一個實施方式中,基本量(如,64比特)被儲存用于第一個項且偏移量(如,16比特偏移)被儲存用于共享項。在該示例中,如果共享了16個頁面的項,那么表格可以是三分之一大小。需要確保頁面足夠接近來使用偏置。應(yīng)當(dāng)避免數(shù)據(jù)結(jié)構(gòu)的爭用。最后,數(shù)據(jù)可以暫時被分配從而可以并行讀取。
前述可以通過使中央處理單元的一個核具有至一組頁面表格項的排他接入來獲得。該組頁面表格項是非連續(xù)的從而隨后的讀取將仍然跨核分配。
圖21A示出了具有1太字節(jié)物理存儲或存儲器的設(shè)備的PVT,其中任何時候70%的設(shè)備(或700GB的數(shù)據(jù))被映射。剩余的30%可以被用于可靠性和/或性能目的。利用該設(shè)備的軟件理解其具有700GB的數(shù)據(jù)。
對于第一次寫入,數(shù)據(jù)頁面最終在具有相同或類似索引的頁面上。但是隨著時間流逝,設(shè)備上的頁面可能由于重寫數(shù)據(jù)或設(shè)備管理考慮(如,閃存上的垃圾收集和擦除)而移動至該設(shè)備上的不同位置。圖21B示出了在隨后寫入之后PVT看起來像什么。
在本實施方式中,PVT是相當(dāng)大的。特別地,PVT是設(shè)備大小的0.15%并儲存在類似DRAM的更昂貴的存儲器中。對于100TB來說這個大小是~150GB及對于1PB來說PVT大小是1.5TB。這對系統(tǒng)來說是一種昂貴的負擔(dān)。因此,多個項被壓縮在一起以共享PVT項。在一個實施方式中,基本量(如,完整設(shè)備索引)被儲存以用于第一個頁面并且接著偏置量被儲存以用于共享PVT項中的頁面。這將地址中的每一者從8字節(jié)壓縮到2字節(jié)。該示例在16個頁面之間共享項但可以推廣用于更多頁面。
圖21C描述了共享項。PVT表格具有基本量(4K頁面0指定頁面52)和偏置量(1:34328、2:27、3:1429、4:52890等)。圖中示出了指向存儲器中的頁面52和在位置52942(這是頁面52的偏置加上頁面4的偏置52890)的頁面4的基本量。
該機制限制了共享PVT項中的頁面位置,該位置離索引指標(biāo)至多64K,因此偏移是16比特。這種限制轉(zhuǎn)而將限制分配OS視作連續(xù)的頁面的能力。頁面的那種分配便于與其他公開技術(shù)相關(guān)聯(lián)的優(yōu)化。
可以將相互遠離的固定偏置的頁面儲存在每一個PVT項中。相應(yīng)地,OS可以使用簡單的、固定的算法計算哪個項表示OS索引方案中的特定頁面。所修改的表格在圖21D中顯示。特別地,圖21D用偏置值代替了圖21C顯示的PVT中的頁面參考。
本發(fā)明的實施方式提供了無鎖機制以用于在處理器之間進行通信。圖22示出了具有兩個處理器2200和2202的系統(tǒng),這兩個處理器被編程以使得一個傳送命令而另一個接收和完成命令。系統(tǒng)還具有執(zhí)行隊列2204、完成隊列2206和存儲緩沖區(qū)完成比特2208。執(zhí)行隊列2204和完成隊列2206二者是環(huán)形的。發(fā)送命令的處理器擁有執(zhí)行隊列2204的尾(tail)及接收命令的處理器擁有頭(head)。在完成隊列2206的情況下,反轉(zhuǎn)所有權(quán)。存儲比特用于不要求狀態(tài)的完成。
處理器1 2200將新命令施加在執(zhí)行隊列2204上,及處理器2 2202移除并執(zhí)行命令。因為僅有一個生產(chǎn)商和一個消費者,所以鎖定是不必要的。相反,在多核系統(tǒng)中,如果每一對處理器分配具有單個生產(chǎn)商和單個消費者專用隊列是可以避免鎖定的。應(yīng)當(dāng)注意處理器仍需要從其他處理器讀取尾或頭。
存在兩種涉及一個處理器等待另一方的情況:(1)處理器1等待直至在隊列上存在空間或(2)處理器2發(fā)現(xiàn)沒有項并必須在將來試著獲得。處理器可以通過利用輪詢系統(tǒng)或中斷系統(tǒng)繼續(xù)發(fā)信號。在另一情況下,在完成時,處理器2將項施加在隊列上或者設(shè)置位掩碼2208中的比特以注意事情已完成。處理器1將檢查隊列和位掩碼。位掩碼是潛在比隊列上的項需要更少狀態(tài)的優(yōu)化并允許處理器1通過同時測試完成比特的整個字來同時檢查多個完成比特。
圖23示出了現(xiàn)有技術(shù)系統(tǒng),該系統(tǒng)具有支持操作系統(tǒng)2302的多個處理器核2300_1至2300_N。每一個核2300需要接入IO數(shù)據(jù)結(jié)構(gòu)2304,該IO數(shù)據(jù)結(jié)構(gòu)2304駐留在操作系統(tǒng)(OS)2302中。該單個IO數(shù)據(jù)結(jié)構(gòu)2304可能使系統(tǒng)慢下來。同步機制導(dǎo)致擴展至硬件的串行化操作。硬件常常具有進入該硬件的單個管道,其也可能使操作慢下來。
最后,當(dāng)結(jié)果被返回時,常常通過硬件中斷OS來完成,如塊2306所顯示的。軟件可以選擇以使中斷轉(zhuǎn)到一個或多個核2300。常常選擇核的一個子集來最小化系統(tǒng)上IO操作的廣泛影響。這可能使核接入同步所需的數(shù)據(jù)結(jié)構(gòu),最后返回至原始請求參與的核以返回結(jié)果至應(yīng)用。
本發(fā)明的實施方式利用能夠編程和以多個區(qū)間分區(qū)的IO子系統(tǒng)。僅同步發(fā)生的位置來自/來到用戶應(yīng)用,如圖24所顯示的。如圖所示,單獨的處理器核2400具有單獨的I/O數(shù)據(jù)結(jié)構(gòu)2402、單獨的中斷路徑2404和專用硬件資源2406。因此,每一個核在操作系統(tǒng)和硬件二者中具有專用數(shù)據(jù)結(jié)構(gòu)。此外,向每一個核分配IO區(qū)間的行為具有多生產(chǎn)商單生產(chǎn)商數(shù)據(jù)結(jié)構(gòu)(即,多個IO可以同時出現(xiàn),因而多生產(chǎn)商、而僅核消耗IO)。該結(jié)構(gòu)減少了同步影響。
本發(fā)明包括可以在堆棧中的各個點共享一些數(shù)據(jù)結(jié)構(gòu)的變化,但對其余部分對每一個核保持唯一數(shù)據(jù)結(jié)構(gòu)。還包括輪詢且不使用中斷的系統(tǒng)。在使用輪詢的情況下,每一個核具有其自己的(唯一的)數(shù)據(jù)結(jié)構(gòu)。
因此,該機制跨執(zhí)行程序代碼的CPU核和IO處理器對數(shù)據(jù)結(jié)構(gòu)進行分區(qū),其從硬件接口跨至共享并行儲存設(shè)備進行操作從而通過復(fù)制所需要的數(shù)據(jù)結(jié)構(gòu)和專用設(shè)備接口使每一個核支持儲存設(shè)備的單個部分。這移除了同步單獨的CPU核的需求,單獨的CPU核通常采用操作系統(tǒng)軟件鎖來實現(xiàn)。其延伸至一般地向軟件提供單個接口的硬件,從而降低效率和并行性。
在多核、多線程系統(tǒng)中,便于對具有小誤差容限的事件進行計數(shù)。這種計數(shù)可以被用于決策性且動態(tài)的策略管理。圖25示出了支持事件計數(shù)的系統(tǒng)。累加器的環(huán)形隊列具有存儲區(qū),其中每一個存儲區(qū)表示時間周期。在時間周期期間,生產(chǎn)商增加了相關(guān)聯(lián)的累加器(可以忽視沖突,因而計數(shù)是近似的)。在時間周期+2期間,消費者將原始時間周期的累加器添加至消費者的總累加器(選擇時間周期+2來避免沖突)。在新的時間周期,新的時間周期的累加器從總累加器減去并且新的時間周期被設(shè)置為0。消費者維持當(dāng)前時間周期指針并進行自動更新。
在本實施方式中,生廠商也是消費者。使用該累加器的一個示例是逼近IO系統(tǒng)中最后10MS上的讀取數(shù)量,其中線程(或處理器或核)獨立進行讀取。該機制使得線程有助于總累加器而不使用鎖。時間存儲區(qū)累加器是近似的,但是因為單個線程用其更新總累加器,因此總累加器是一致的并且無鎖。
本發(fā)明的實施方式包括一機制,該機制允許活頁面移動以準(zhǔn)備在設(shè)備附近進行閃存塊擦除,而不需要拷貝以暫時儲存數(shù)據(jù)并然后在較慢總線上再拷貝至閃存另外的地方。在需要擦除存儲的系統(tǒng)中,在將其第二次寫入之前,仍有數(shù)據(jù)在使用或有數(shù)據(jù)是活的的頁面必須移動至最近擦除的頁面,從而系統(tǒng)可以再使用頁面。相同邏輯頁面的第二次寫入一直出現(xiàn)在最近擦除的頁面,使數(shù)據(jù)將不再再次被使用(死的頁面)。除非系統(tǒng)進行“垃圾收集”,設(shè)備將用死的頁面填滿并不能接受任何新數(shù)據(jù)。
包含閃存(FLASH)(閃存存儲器)或其他媒介的需要垃圾收集的存儲系統(tǒng)變得更加復(fù)雜,需要更精細的機制用于垃圾收集。在一個實施方式中,數(shù)據(jù)從用邏輯單元號(LUN)標(biāo)識的多個閃存頁面移動。LUN是閃存存儲器的可單獨編程部分。移動以允許讀取活的頁面的方式進行,其中活的頁面正在并行地進行垃圾收集。在本實施方式中,還需要合并活的頁面以將可以一次被寫入的最大量的數(shù)據(jù)寫入閃存。在現(xiàn)代系統(tǒng)中其可以是64KB或更大,然而之前提到的讀取是4KB。因此我們從不同的LUN并行讀取16個4KB頁面并并行將64KB寫入最近擦除的LUN。在本實施方式中,在并行性的復(fù)雜性之上,我們具有累加了64k校驗的數(shù)據(jù)保護系統(tǒng),同時來自收回的(垃圾收集的)頁面的數(shù)據(jù)被儲存在最近擦除的頁面。
圖26示出了用于獲得十六個不同LUN和相關(guān)聯(lián)的校驗值的三個不同的頁面?,F(xiàn)場可編程門陣列可以使用執(zhí)行內(nèi)核來對來自相同頁面的LUN值執(zhí)行邏輯XOR。對塊中的所有頁面重復(fù)操作,以遷移完成塊群組。在該示例中,256個16KB頁面被遷移。
本發(fā)明的幾個實施方式的區(qū)別在于所合并的緩沖區(qū)的位置和所計算的校驗。在傳統(tǒng)系統(tǒng)中,該操作常常在主CPU上執(zhí)行,該主CPU還用于運行應(yīng)用。這個方法存在兩個問題。第一,其需要在多個總線上移動數(shù)據(jù)。第二,其需要可以用于其他目的(諸如用戶應(yīng)用)的CPU時間。
圖27描述了在現(xiàn)有技術(shù)系統(tǒng)中執(zhí)行垃圾收集的的數(shù)據(jù)流。圖中示出了CPU協(xié)調(diào)操作。本發(fā)明的實施方式將CPU工作卸載至另一資源,諸如存儲控制器或閃存控制器。圖28示出了基于閃存控制的系統(tǒng),該系統(tǒng)消除了對中央處理單元的利用。也就是,諸如閃存控制器1852的閃存控制器用于提供用于RAID系統(tǒng)條帶和校驗管理硬件并行性??梢栽谒袟l帶成員都已經(jīng)被寫入之后寫入校驗。
在需要擦除存儲的系統(tǒng)中,在將其第二次之前,系統(tǒng)需要對仍具有正在使用數(shù)據(jù)的頁面進行“垃圾收集”并將數(shù)據(jù)移動至最近擦除的頁面。系統(tǒng)然后可以擦除和再使用垃圾收集的頁面。相同邏輯頁面的第二次寫入一直存在于使原始數(shù)據(jù)不會再次被使用(死的頁面)的最近擦除的頁面。除了系統(tǒng)收回之前已經(jīng)用于數(shù)據(jù)存儲但現(xiàn)在空閑的頁面,設(shè)備將用死的頁面填滿并不能接受任何新數(shù)據(jù)。該頁面收回的整個過程常常被稱為垃圾收集。
圖29描述了垃圾收集的一個實施方式。當(dāng)活的頁面被垃圾收集(或收回)時,系統(tǒng)可能考慮一個接一個地恢復(fù)在以上圖29的塊0看到的頁面,但是如果應(yīng)用需要系統(tǒng)從塊1讀取數(shù)據(jù),是不可能的,因為(除了在很少的情況下)僅一個頁面(或頁面群組)可以一次被讀取,因而限制了在其他地方讀取。這種同時從多個塊讀取頁面的無能對于類似閃存的設(shè)備來說是常見的并被稱為接入沖突。
圖30展示了沖突和解決方案。該機制在時間上對操作進行了重新排序。這種重新排序通過對垃圾收集推遲讀取一定量時間(在本實施方式中列為1)來實現(xiàn),以使得對閃存LUN的其他要求就可以滿足,從而避免周期性的互斥等待。
修剪是大多數(shù)操作系統(tǒng)支持的功能。其指的是告訴類似閃存的設(shè)備其使用數(shù)據(jù)頁面已完成的文件系統(tǒng)或應(yīng)用的行為。例如,這可能在頁面已經(jīng)被刪除(“死的”頁面)時出現(xiàn)。類似閃存的設(shè)備必須保持死的頁面的尾,以使得在系統(tǒng)進行垃圾收集時,其不會遷移死的頁面。對于系統(tǒng)來說,保持已經(jīng)被重寫的死的頁面的尾是容易的,因為系統(tǒng)看到了寫入,但是刪除的頁面需要修剪功能來通知設(shè)備,因為對正在刪除的一些東西的知識本身不會引起設(shè)備看到的操作。
修剪信息通常保持在一些運行時間數(shù)據(jù)結(jié)構(gòu)中,該數(shù)據(jù)結(jié)構(gòu)通過CPU或設(shè)備保持。還通常在系統(tǒng)的永久存儲上進行記錄和寫入。因此,如果系統(tǒng)崩潰或在重新啟動,那么系統(tǒng)可能具有連續(xù)的修剪尾以作為將來擦除的準(zhǔn)備。
本發(fā)明的實施方式為了減少所要求的記錄修改了包括范圍的修剪記錄。在大型系統(tǒng)中,如果你刪除了太字節(jié)文件,那么文件中每一個頁面的單獨記錄可能共計為260百萬項,每一項花費一個字節(jié)或更多。修剪范圍可能將其減少為低數(shù)量的項——可能是個位數(shù)。
在包括類似閃存的存儲器的系統(tǒng)中,需要在寫入之間進行塊擦除,能夠儲存可以用于重構(gòu)運行時間數(shù)據(jù)結(jié)構(gòu)的元數(shù)據(jù)是非常重要的。許多系統(tǒng)在各種位置記錄該數(shù)據(jù)。它們運作以使數(shù)據(jù)共同位于記錄中。這存在許多問題。第一,在數(shù)據(jù)與元數(shù)據(jù)寫入之間的長時間減少了關(guān)于重構(gòu)的記錄的準(zhǔn)確性。另一個問題是記錄空間的管理,這需要另一個設(shè)備或其自己的垃圾收集算法。
本發(fā)明的實施方式需要儲存元數(shù)據(jù)以及數(shù)據(jù)。本發(fā)明依賴于具有大的并行系統(tǒng),以使得元數(shù)據(jù)可以在重構(gòu)時進行并行讀取。還利用寫入元數(shù)據(jù)以及大量數(shù)據(jù),以利用可以在單個設(shè)備上在同一時間寫入高達64KB和跨系統(tǒng)的數(shù)百萬字節(jié)的設(shè)備及跨數(shù)據(jù)頁面(例如序列號)共享元數(shù)據(jù)。進一步地,元數(shù)據(jù)在支持數(shù)據(jù)保護的系統(tǒng)中可以容易地跨條帶中的頁面或跨條帶共享。
圖31示出了類似于7+1的RAID5的擦除碼。圖中示出的保護條帶可以表示多個數(shù)據(jù)頁面(如,112)和多個校驗頁面(如,16)。這些頁面中的一者或多者用于表示其他數(shù)據(jù)頁面的元數(shù)據(jù)。元數(shù)據(jù)可以包括將塊設(shè)備頁面映射至閃存頁面的頁面虛擬化表格項。元數(shù)據(jù)可以是序列號以區(qū)分哪個元數(shù)據(jù)最后寫入。因為閃存要求重寫操作把最近擦除的頁面當(dāng)作目標(biāo)并不在原始頁面上進行寫入,所以可以具有多個版本的相同頁面。元數(shù)據(jù)可以是用于詳述最近發(fā)現(xiàn)的不良塊的不良塊信息。元數(shù)據(jù)可以是循環(huán)冗余校驗(CRC)信息以提供端對端數(shù)據(jù)保護。元數(shù)據(jù)還可以是修剪信息以表示哪個閃存頁面已經(jīng)被擦除。在各個實施方式中,元數(shù)據(jù)的數(shù)量和種類可能不同、準(zhǔn)確的存儲位置可以改變等等。
當(dāng)頁面重新寫入類似閃存的媒介中時,相同的位置可能在沒有第一次執(zhí)行非常昂貴的擦除操作的情況下不會兩次寫入。在重寫期間,數(shù)據(jù)頁面的位置被虛擬化,以使得操作系統(tǒng)可能將設(shè)備視為一組連續(xù)的頁面,即使這些頁面沒有連續(xù)的次序或沒有在閃存設(shè)備中相應(yīng)的位置。第一次寫入可以采用圖32所示的形式。因為這是第一次寫入,虛擬化的數(shù)據(jù)頁面可能在具有相同或類似的索引的真實的(物理的)頁面。隨著時間流逝,出于重寫或更新數(shù)據(jù)或其他設(shè)備管理考慮(如,閃存上的垃圾收集和擦除),一些頁面被移動至該設(shè)備上的不同位置。圖33顯示了在典型集合的隨后寫入之后的PVT。
如以上所討論的,閃存塊包含頁面。在大多數(shù)閃存設(shè)備中,整個塊必須擦除。頁面不能被獨立擦除。塊極其構(gòu)成頁面不能被寫入直至塊被擦除。隨著時間的過去,塊必須被擦除以使其可再次寫入。因此,一旦第一個頁面被寫入,將塊寫入閃存的第一個頁面是不可能的,即使操作系統(tǒng)或用戶應(yīng)用可以繼續(xù)將其標(biāo)識為第一個頁面。PVT實現(xiàn)這個處理。
如果塊轉(zhuǎn)為不良并變得不可用或采用精細的損耗均衡算法,處理會變得更復(fù)雜。隨著時間的逝去,損耗均衡移動塊,以在一些周期期間創(chuàng)建均勻損耗并在其他周期期間(如,在閃存壽命周期的最后,所以我們不能一次耗盡所有閃存)創(chuàng)建不均勻損耗。
本發(fā)明的實施方式使用兩個等級的虛擬化算法。一個等級用于頁面以及一個等級用于塊,如圖34所示。也就是,圖34顯示了PVT 3400、塊虛擬化表格(BVT)3402和存儲器3404。在經(jīng)由PVT將虛擬頁面地址映射至閃存的物理頁面地址之后,標(biāo)識了塊的地址的一個或多個部分映射至使用塊虛擬化表格(BVT)的地址。使用該技術(shù),可以在系統(tǒng)的其余部分不必理解處理的情況下確定哪個塊被使用,如可以在圖35看到的。
在這種情況下,塊0是不良的并且其中的數(shù)據(jù)移動至塊73。在一些實施方式中,替代塊的選擇被優(yōu)化,從而通過挑選具有相同衰減設(shè)置的替代塊來實現(xiàn)類似RAID的功能。
大多數(shù)IO設(shè)備包括少量的子設(shè)備。這種模型存在問題。第一,這些設(shè)備常常通過條帶化被分組在一起。每一個設(shè)備可并行編程但是它們常常具有少量發(fā)放連續(xù)的或小數(shù)量的IO操作的單個控制器。此外,這些系統(tǒng)有太少的設(shè)備有效。
本發(fā)明的實施方式將大量獨立可編程設(shè)備并入系統(tǒng)以加強基礎(chǔ)設(shè)備從而使其能夠進行并行可編程。圖36顯示了具有稱為LUN的獨立可編程設(shè)備的設(shè)備。所有的LUN可以利用于軟件。在閃存控制器中具有復(fù)制的資源來實現(xiàn)并行數(shù)據(jù)接入。
圖37顯示了40GbE通信協(xié)議,該協(xié)議規(guī)定了處理來自獨立閃存控制器資源的容量。如圖38所示,該分配一直持續(xù)在堆棧頂端。圖38顯示了通過請求的發(fā)起方向CPU一直進行復(fù)制的資源。
實施方式包括使軟件和終端用戶應(yīng)用能夠開發(fā)并行性的可編程設(shè)備和復(fù)制的資源。初級結(jié)果是通過進行并行IO的大型并行操作和性能改善。二級結(jié)果是本發(fā)明使系統(tǒng)能夠在連續(xù)操作和隨機操作上執(zhí)行相同動作。因為進行了如此多的并行操作,所以執(zhí)行同樣好的處理的連續(xù)或隨機請求。
特定計算(諸如之前所討論的環(huán)讀)在無鎖的數(shù)據(jù)頁面上需要邏輯XOR操作及來自條帶的校驗。對此通常的方法是使用CPU,但是這種方法增加了用于CPU的DRAM需求、存儲總線帶寬使用、緩存利用和CPU利用。本發(fā)明的實施方式將非CPU資源用于緩沖數(shù)據(jù)和校驗頁面及非CPU資源用于執(zhí)行邏輯XOR。一旦頁面被重構(gòu),CPU就可以在沒有進一步工作的情況下進行直接讀取。
圖39示出了閃存控制器是斷開CPU資源的實施方式。條帶0是從RAID集合讀取的一個頁面。在讀取值之后,邏輯XOR操作通過閃存控制器執(zhí)行。得到的頁面然后可用于CPU。
在需要寫入緩慢設(shè)備時在計算機系統(tǒng)中會出現(xiàn)問題。需要完成寫入事物以使得應(yīng)用可以繼續(xù)并且不用等待緩慢設(shè)備。解決這個問題的方法是將數(shù)據(jù)拷貝至另一資源上的CPU特定的緩沖區(qū),諸如FPGA、主存儲器緩沖區(qū)或一些其他外部緩沖區(qū)。通過將其與之前進行寫入分配的發(fā)明耦合,可以在進行存儲拷貝的時候完成寫入并且可以通過使用IO處理器避免CPU時間。
圖40示出了系統(tǒng)采用具有DRAM快速寫入緩沖區(qū)的寫入分配的本發(fā)明的實施方式。一般地,系統(tǒng)會在原始8MB IOP中保持拷貝數(shù)據(jù)直至數(shù)據(jù)穩(wěn)定地在非易失性存儲上進行寫入。進行原始IOP的應(yīng)用期望數(shù)據(jù)安全地將其進行存儲并且僅副本置于IOP中。如果IO失敗,那么數(shù)據(jù)就會丟失,除非原始緩沖區(qū)被保持。在本發(fā)明中,我們快速地(快超過2個數(shù)量級)在DRAM緩沖區(qū)中儲存數(shù)據(jù)并信號發(fā)送IOP完成的應(yīng)用。如果IOP后來失敗了,那么系統(tǒng)使用DRAM緩沖區(qū)中的數(shù)據(jù)進行重試。
為了防止電源故障,本系統(tǒng)必須包括不間斷的電源。如果電源故障發(fā)生,不間斷電源可用于允許數(shù)據(jù)從暫時的DRAM緩沖區(qū)拷貝放至非易失性存儲的時間。該機制不能免受其他類型的失敗,例如,操作系統(tǒng)故障或“崩潰”,除非DRAM也是非易失性存儲器。即使有非易失性DRAM緩沖區(qū),免受所有是故障類型也是不可能的。
第一次寫入涉及將應(yīng)用的寫入緩沖區(qū)中的數(shù)據(jù)在其正在被儲存時移動至安全的地方。因此,應(yīng)用可能考慮到寫入完成并因而更快地繼續(xù)。可能在存儲硬件中沒有地方儲存該數(shù)據(jù)。該機制將其儲存在主機的DRAM中直至數(shù)據(jù)確認在非易失性存儲上。
本實施方式在運行原始應(yīng)用的CPU上使用DRAM并將原始IOP用于在DRAM緩沖區(qū)中儲存數(shù)據(jù)。將CPU命令或使用能夠直接存儲接入(DMA)至原始緩沖區(qū)或拷貝緩沖區(qū)的IO設(shè)備來將來自原始緩沖區(qū)的數(shù)據(jù)拷貝至DRAM緩沖區(qū)。
傳統(tǒng)的操作系統(tǒng)通常有多種方式進行IO或從文件進行讀取。最常見的機制是阻塞讀取。也就是,應(yīng)用調(diào)用操作系統(tǒng)和來自設(shè)備或文件(單個大小的單個數(shù)據(jù)集合)的希望儲存在單個目的地的請求,并且應(yīng)用一直等待直至操作系統(tǒng)完成操作。這常常稱為同步IO。
第二個機制常常稱為異步IO。為了使用這個機制,應(yīng)用發(fā)送請求列表至操作系統(tǒng)。每一個請求具有唯一的源、目的地和大小。應(yīng)用沒有等待結(jié)果,因此名字異步。操作系統(tǒng)為應(yīng)用提供各種機制以檢查請求的狀態(tài)。應(yīng)用報告完成的請求直至對所有請求作出解釋。圖41描述了Linux操作系統(tǒng)的各種實現(xiàn)中的該機制。
在大多數(shù)操作系統(tǒng)中,與管理該列表相關(guān)聯(lián)的開銷非常大并且可能引起8MB阻塞請求的速度,與2048個4KB異步請求相比快很多。這個速度因為兩個因素。第一個因素是管理異步請求的花費。第二個因素是操作系統(tǒng)不能利用能夠進行大型并行處理的設(shè)備。此外,如果應(yīng)用試著提交2048個4KB的阻塞請求,那么對于操作系統(tǒng)來說進行那些單個請求的開銷會進一步放慢累積的IO操作。
本發(fā)明的實施方式是用于處理多個同時的同步IO請求的機制,類似異步機制,但具有單獨的阻塞讀取的效率。這需要能夠進行大量并行IO的設(shè)備和具有每個核數(shù)據(jù)結(jié)構(gòu)的操作系統(tǒng)以避免鎖定——二者之前已經(jīng)公開。該特征稱為多IO或MIO。圖42描述了一個架構(gòu)。每一個核4200具有專用IO結(jié)構(gòu)4202和中斷路徑4204。
在N+1數(shù)據(jù)保護層中連續(xù)寫入的讀取寫入比為3:1或更好以及在數(shù)據(jù)保護條帶成員中的一者上存在寫入的情況下,與通過等待寫入相比,通過讀取條帶成員可以更快地重構(gòu)讀取。本發(fā)明尤其適用于寫入比讀取慢很多及讀取可以并行進行的系統(tǒng)。本發(fā)明還包括對按比例下降至0:1的讀取寫入比的使用,從而在沒有足夠的讀取來使用“環(huán)讀”時增加將數(shù)據(jù)保護條帶成員數(shù)據(jù)輸出的寫入并行性。
圖43示出了用于閃存的數(shù)據(jù)保護系統(tǒng)的一個實施方式。如果試著從LUN 0的塊1中的閃存上的頁面進行讀取并且系統(tǒng)也正在寫入至LUN 0,那么讀取必須等待直至寫入完成。本公開中早先時候具有對重建RAS系統(tǒng)的頁面的公開,而不是等待寫入完成。這是可信的,因為在許多設(shè)備中你可以a)比寫入頁面更快地多次讀取頁面及b)你可以從多個LUN并行讀取。參照圖43,可以非??焖俚貜腖UN 1-3進行讀取,并且XOR結(jié)果以得到所要求的頁面。該操作比等待寫入快很多。該技術(shù)稱為“環(huán)讀”。
然而,對于環(huán)讀是有效的,LUN 1-3必須是可用的。特別地,因為它們是具有LUN 0的數(shù)據(jù)保護條帶的一部分,所以系統(tǒng)常常準(zhǔn)備好同時寫入LUN 0-3(小排序需要用于校驗而寫入耗費很長時間,很有可能LUN 3甚至可以重疊在其他LUN中進行寫入,如果它們盡可能快地發(fā)出的話)。
一個解決方案是對條帶內(nèi)的寫入進行排序。換句話說,如果你準(zhǔn)備針對LUN 0-3寫入數(shù)據(jù),那么你僅可以允許其中的一者在一段時間很忙。這確保了你可以進行環(huán)讀而不會被另一寫入堵塞。然而,這是效率低的并且大大限制了寫入帶寬(在這種情況下可能是其可能性的1/4)。
考慮多個因素以確定在哪里對數(shù)據(jù)保護條帶中的寫入進行排序或不排序的自適應(yīng)方案被使用。在一個實施方式中,該因素包括最近歷史上(如,10ms)讀取寫入比和跨系統(tǒng)的IO利用。如果讀取寫入比是3比1或更大,那么更可能存在寫入所堵塞的讀取并且具有該特征是重要的。如果IO利用上升(假設(shè)大于80%),可能希望限制環(huán)讀,因為其由于其讀取了用于在環(huán)讀期間執(zhí)行的每一個讀取的3個頁面而增加了整個IO帶寬利用。本實施方式還包括在讀取寫入比小于3比1并大于0比1及IO利用小于80%時對序列化寫入百分比進行按比例分配以支持環(huán)讀。
關(guān)于N+1數(shù)據(jù)保護,如果保持數(shù)據(jù)的單元為忙,可以通過環(huán)讀忙的單元(讀取N-1數(shù)據(jù)頁面和一個校驗頁面)來重建數(shù)據(jù)以滿足讀取請求。如果1/(N+1)個單元或更少的單元當(dāng)前忙,那么可以確保所有數(shù)據(jù)可以通過均勻地分配寫入進行環(huán)讀。為了滿足需要1/(N+1)以上的單元是忙的寫入負載,將一個寫入分派至每一個PG,然后分配總共N+1個寫入至足夠的單元以滿足寫入負載,從而留下盡可能多的PG具有僅一個寫入。這最大化了環(huán)讀可能的量。
在外圍組件互聯(lián)表達(PCIe)線路的數(shù)量在所有套接口上不同的系統(tǒng)中,不同的套接口中的PCIe卡可能不處理相同大小的負載。否則,總系統(tǒng)帶寬被可用于具有最少數(shù)量的PCIe線路的套接口中的PCIe帶寬制約。該機制基于可用PCIe帶寬調(diào)度閃存控制器上的IO,并使用QPI將到達PCIe總線的數(shù)據(jù)傳遞至用戶緩沖區(qū)駐留的套接口。圖44中的系統(tǒng)展示了PCIe帶寬失衡。
在該系統(tǒng)中具有4個套接口,每一個套接口附著至變化數(shù)量的PCIe線路,所以套接口1和套接口3具有10GB/s的PCIe帶寬,而套接口0具有15GB/s,及套接口2具有5GB/s。每一個PCIe總線具有所附著的多個閃存控制器,該多個閃存控制器能夠在PCIe總線上發(fā)起DMA操作。假定存在待決操作,該操作由CPU密集的部分和在PCIe總線上傳遞數(shù)據(jù)的IO密集部分構(gòu)成。出于多個原因需要在所有4個套接口上調(diào)度相同數(shù)量的操作。第一,可能存在一般的系統(tǒng)寬度調(diào)度算法,該算法對核進行負載均衡。第二,每一個套接口具有相同數(shù)量的核;所以為了在核之間均衡CPU密集部分的工作,將相同數(shù)量的操作分派給每一個核是有意義的。否則可能產(chǎn)生CPU瓶頸,并同時可能仍可能留下CPU資源。然而,平衡CPU密集部分的操作與IO密集部分的操作沖突,因為PCIe帶寬在跨套接口上沒有平衡。
如果IO在4個套接口上平均調(diào)度并且如果每一個核被分配相同數(shù)量的操作去完成,那么整個系統(tǒng)可能僅完成5×4=20GB/s的IO而全部系統(tǒng)能夠達到(15+10+10+5)=40GB/s。一種繞過這個問題的方式是使每一個核處理同等量的CPU密集部分的操作,但是在遠程套接口上的閃存控制器上對核發(fā)起IO密集部分的操作,以使得可以使用每一個PCIe總線的全部帶寬。遠程套接口上的IO需要移動至經(jīng)由QPI總線發(fā)起IO操作的CPU本地的套接口,但是這平衡了CPU密集部分的操作以及IO密集部分的工作。在本特定的示例中,在套接口1和3中處理操作的核不需要從遠程套接口發(fā)起任何IO,因為其具有IO帶寬,該IO帶寬確切地是每一個套接口需要的平均帶寬。當(dāng)操作到達套接口2時,反而需要在套接口0的閃存模塊上發(fā)起50%的IO請求,因為套接口2的PCIe總線相對每一個套接口所需要的平均在預(yù)分配以下的50%(5GB/s相對10GB/s),而套接口0相對平均在預(yù)分配以上的50%(15GB/s相對10GB/s)。最后結(jié)果是5GB/s在QPI總線4400上從套接口0傳遞至套接口2,但是可以使用系統(tǒng)的40GB/s的PCIe帶寬,并且所有CPU核將進行負載均衡并處理相同量的CPU密集部分的操作。
在允許多版本的頁面出現(xiàn)在儲存(如,閃存)的系統(tǒng)中,序列號記錄了版本創(chuàng)建的次序。因而,最近的拷貝將具有最大的序列號。在大型系統(tǒng)中,這些序列號的管理可能是過于繁重的。例如,劃分為4KB的頁面的70TB設(shè)備需要150GB的存儲器來保持所有其頁面的序列號。如果設(shè)備利用擦除碼形成7個數(shù)據(jù)符號(塊)和單個校驗符號(塊)的條帶,稱為7+1編碼,那么用于4平面16KB閃存頁面的序列號所需要的存儲器可以共享整個條帶的序列號,并將所需要的存儲器的大小減小至~1.3GB。
圖45示出了一般如何使用序列號。在系統(tǒng)崩潰時使用序列號來重新創(chuàng)建頁面虛擬化表格(PVT)。PVT將OS頁面索引映射至設(shè)備上的頁面索引。因為在由類似閃存的固態(tài)存儲器構(gòu)成的設(shè)備上的頁面可能由于更新或隨后的垃圾收集而進行移動,儲存在PVT中的位置將隨時間而改變。在崩潰的時候,頁面的多個拷貝可能存在于設(shè)備上。OS將最后寫入的版本選為實際數(shù)據(jù)。OS通過比較序列號進行這個操作。在本實施方式中,序列號在系統(tǒng)上是唯一的。序列號在接入時以原子的方式增加。因而,每一個使用是唯一的,從而保證所寫入的頁面準(zhǔn)確地用標(biāo)識了哪個頁面先寫入的序列號標(biāo)記,即使多個拷貝在時間上相互非常接近地寫入。
本發(fā)明僅使用用于每一個數(shù)據(jù)保護條帶的一個序列號。因為整個條帶同時寫入,所以僅需要一個號表示序列號。圖46顯示了RAS條帶。在本實施方式中,條帶的成員為可以一次寫入閃存LUN的最大項的大?。?4KB,為16個4k OS頁面。因而,整個條帶表示112個OS頁面,對該OS頁面使用一個序列號。所以,總節(jié)省超過2個數(shù)量級。本發(fā)明要求對在時間上非常接近地出現(xiàn)的相同設(shè)備頁面的寫入必須用不同的序列號寫入條帶。因為這不會非常經(jīng)常發(fā)生,所以該機制的一個實施方式可以對在時間上非常接近地出現(xiàn)在相同頁面的寫入進行串行化,從而確保其具有增加的序列號。
包括閃存設(shè)備的設(shè)備的可恢復(fù)性需求隨時間而改變。設(shè)備在其使用的開始需要較少的數(shù)據(jù)保護,因為其失敗常常較少。因而,類似7+1RAID的數(shù)據(jù)保護方案在開始是足夠的,而10+2或3+1數(shù)據(jù)保護方案將例如在壽命周期的75%需要。
在數(shù)據(jù)保護系統(tǒng)的一個實施方式中,系統(tǒng)支持具有7+1(每一個條帶7個數(shù)據(jù)和一個校驗碼)的類似RAID5的數(shù)據(jù)保護。該方案使用簡單的在所有數(shù)據(jù)頁面上使用XOR計算的擦除碼以創(chuàng)建單個校驗頁面。圖47顯示了此類方案。
圖48示出了集成的垃圾收集和數(shù)據(jù)保護。垃圾從多個LUN同時收集。活的頁面寫入新的數(shù)據(jù)保護條帶。每一個LUN當(dāng)作數(shù)據(jù)的環(huán)形列表。寫入針對最近的擦除塊4800。數(shù)據(jù)從寫入塊4802進行檢索及垃圾從最老的寫入塊4804進行收集和擦除。
在需要類似3+1的更保守的數(shù)據(jù)保護方案時,將塊標(biāo)記為參與3+1方案。圖49描述了方案與通過方案進行的塊標(biāo)識之間的轉(zhuǎn)換。本實施方式通過使更保守的方案(3+1)成為較不保守的方案(7+1)的因素而使事情變得容易。本發(fā)明還支持更復(fù)雜的結(jié)合。
在合并了閃存控制器(或需要垃圾收集的其他媒介)上的數(shù)據(jù)保護的傳統(tǒng)系統(tǒng)中,數(shù)據(jù)保護常常在閃存系統(tǒng)的頂部建立,但是使獨立的。當(dāng)系統(tǒng)不得不進行垃圾收集時,垃圾收集的活的數(shù)據(jù)(準(zhǔn)備閃存擦除而必須移動的數(shù)據(jù))必須一直轉(zhuǎn)到數(shù)據(jù)保護驅(qū)動器以維持校正校驗或你必須維持死的頁面(通過用戶重寫的頁面)以維持比需要的更長的條帶。
這個問題在系統(tǒng)包含最有效寫入多平面閃存頁面的閃存時更加復(fù)雜,該閃存頁面比系統(tǒng)的自然頁面大小(如CPU指定的)更大。當(dāng)數(shù)據(jù)保護系統(tǒng)寫入條帶成員時,其不得不寫入例如16CPU大小的頁面以用于每一個成員。在類似RAID的5+1中,每一個條帶可能是484KB的數(shù)據(jù)+64K的校驗(參見圖29)。
在閃存頁面可以再次寫入之前,閃存的工作是擦除整個閃存頁面塊。如果頁面寫入塊并且有必要再次寫入該頁面,那么必須在閃存的其他地方寫入。已經(jīng)重寫的頁面稱為“死的”及還沒有重寫的頁面稱為“活的”。在某一時刻,閃存設(shè)備將充滿包含活的和死的數(shù)據(jù)的頁面的塊,并且沒有或有很少未寫的塊。死的頁面是浪費的空間并且必須收集。通過將活的頁面從塊寫入新的位置并擦除封閉的塊來執(zhí)行收集,從而使其可再次寫入。
一個方法是以循環(huán)的方式使用塊。在未寫的塊的數(shù)量很小時,回收所使用的塊從而其準(zhǔn)備再次寫入。用所采用的數(shù)據(jù)保護,系統(tǒng)還必須重建如圖48所示的校驗,其中塊4804正在回收(垃圾收集)。
實施方式承擔(dān)集成重建數(shù)據(jù)保護校驗和對垃圾收集處理加條紋及對硬件使用進行優(yōu)化。圖26顯示了如何同時移動頁面以在垃圾收集期間建立新的raid條帶。因為我們知道如何同時從不同的LUN讀取活的頁面,所以我們可以實際上從多個塊同時進行垃圾收集并然后具有同時寫入如何工作的知識,我們建立足夠的活的頁面來進行對新位置的多平面16k頁面寫入。
我們還確保我們通過規(guī)定接近閃存的硬件而不會過度地使用CPU來進行這個工作,該硬件可以執(zhí)行之前提到的命令并緩沖如圖28所示的數(shù)據(jù)。命令和硬件的這種結(jié)合比在其他系統(tǒng)中更緊密地集成了垃圾收集和數(shù)據(jù)保護,并提供了唯一的性能改善等級。
如以上所描述的,具有類似閃存的存儲器的系統(tǒng)需要進行垃圾收集以重新使用存儲器。本發(fā)明是利用充足的供應(yīng)及自適應(yīng)地平衡垃圾收集操作和用戶發(fā)起的操作的結(jié)合進行連續(xù)垃圾收集的機制。其他系統(tǒng)常常具有垃圾收集循環(huán)并在那些循環(huán)期間顯示性能問題。本發(fā)明有利于統(tǒng)一的最大化性能。
圖50示出了規(guī)定用于垃圾收集以使其能夠在標(biāo)準(zhǔn)操作期間出現(xiàn)的系統(tǒng)。特別地,在本實施方式中,兩組資源相結(jié)合以確保適當(dāng)處理明顯的窺視(peek)。本系統(tǒng)可以處理70GB/s的寫入。寫入性能由從服務(wù)器框5000到閃存框5002的網(wǎng)絡(luò)帶寬限制在雙向120GB/s。如果我們假定最糟糕的情況,垃圾收集器進行80GB/s的寫入(每個用戶寫入是2個垃圾收集寫入),那么用戶寫入會限制在40GB/s。本實施方式在控制器卡上還具有DRAM緩沖以緩沖窺視寫入。緩沖帶來瞬間高達70GB/s的限制。本實施方式使用系統(tǒng)IO容量和溢出處理的結(jié)合來處理僅寫入工作量。
相同的實施方式還處理讀取和寫入的結(jié)合,其中CPU上的軟件堆棧適于支持讀取。為了從系統(tǒng)得到最大化的帶寬,CPU上的軟件將調(diào)度讀取和寫入以最大化帶寬。
圖51示出了一個實施方式。在本實施方式中,用戶應(yīng)用5100作出讀取和寫入請求,該請求通過分開的隊列進行處理;即,讀取隊列5102和寫入隊列5104。系統(tǒng)產(chǎn)生垃圾收集必要的讀取、寫入和擦除并將其放置在隊列5106中。隊列5104中的項越多,在隊列5106中需要的項越多。系統(tǒng)可以平衡和調(diào)度來自所有三個隊列的請求并確保在沒有渴望寫入(和隨后的垃圾收集操作)的情況下盡快完成讀取。寫入和垃圾收集隊列變得越滿,它們接收的優(yōu)先級越高。這顯示了以連續(xù)的基礎(chǔ)自適應(yīng)處理垃圾收集的一個實施方式。
在多個讀取或?qū)懭氚l(fā)生在接近特定單元的單元中時閃存存儲器遭受比特錯誤率(BER)的顯著上升。這些減少錯誤的“讀取干擾”或“寫入干擾”可以通過改變原始數(shù)據(jù)來減少,以這種方式使將寫入的字符串一或字符串零的出現(xiàn)最小化。完成這種轉(zhuǎn)變的一種方式是通過將合適的偽隨機生成器用于轉(zhuǎn)變數(shù)據(jù)。
本發(fā)明使用每一個閃存頁面(每一者處于不同的偏置)的多個偽隨機序列。這允許單獨的數(shù)據(jù)扇區(qū)在不需要讀取整個閃存頁面的情況下被讀取。現(xiàn)有的實現(xiàn)通過解碼器讀取整個閃存頁面。該技術(shù)允許我們僅讀取我們需要的部分數(shù)據(jù)并因而允許較少的傳輸及由此帶來的改善的讀取時間。
實施方式對每一個儲存的閃存頁面(或其他可接入數(shù)據(jù)單元)利用多個(并行)隨機化流。種子值可以用于從整個16k閃存頁面產(chǎn)生偽隨機流字節(jié)。在一個實施方式中,已知的密鑰撒布偽隨機數(shù)產(chǎn)生器,該產(chǎn)生器在子頁面數(shù)據(jù)單元上生成隨機流字節(jié),在一個實施方式中是閃存頁面的4k部分。圖52示出了具有不同部分5202、5204、5206和5208的閃存頁面5200。每一個部分具有唯一的頁面隨機化。
另一實施方式是至閃存存儲設(shè)備的接口,該接口向存儲控制器及其互連協(xié)議提供所需要的接口。其具有兩個主要接口。在輸入,具有讀取(READ)、寫入(WRITE)和擦除(ERASE)命令。在輸出,具有實際的閃存設(shè)備信號。
將輸入與輸出連接的機制是處理子命令的引擎,該子命令是輸入命令的構(gòu)成部分:開始-RD、開始-WR、得到-狀態(tài)(Get-STATUS)等。閃存控制器具有兩層(1)將輸入命令轉(zhuǎn)換為子命令的每一個LUN的狀態(tài)機及(2)具有將子命令轉(zhuǎn)換為閃存設(shè)備信號的嵌入的微碼機的狀態(tài)機。
對LUN控制器的輸入命令來自經(jīng)由存儲根或存儲控制器的計算應(yīng)用CPU,例如處理器。在一個實施方式中,輸入命令為:
1.擦除-2:立即擦除在2個平面上的塊
2.寫入-1:寫入單獨8k(或16k)頁面
3.寫入-2:寫入2個頁面,2個平面的每一者上一個
4.讀?。鹤x取4k部分的閃存頁面
每一個輸入命令劃分為如圖54所示的子命令。在該機制中,等待準(zhǔn)備好(READY)是圍繞得到狀態(tài)(Get STATUS)的循環(huán),用偽碼表示為:
Repeat
Get STATUS
Until READY bit is set
在本發(fā)明的一個實施方式中,具有7個子命令。最后二者僅用于系統(tǒng)初始化。
1.開始擦除
2.得到狀態(tài)
3.開始寫入
4.開始讀取
5.完成讀取
6.重置
7.得到特征
每一個子命令轉(zhuǎn)而由閃存設(shè)備命令組成,該閃存設(shè)備特別針對所選擇的閃存設(shè)備。圖55提供了示例。
在一個特定閃存設(shè)備的情況下,存在6個閃存命令。(最后二者很少使用)。
1.CMD
2.ADDR
3.Din
4.Dout
5.Idle
6.Standby
在一個實施方式中,處理這些命令的微碼引擎具有如圖56所示的結(jié)構(gòu)。該微碼引擎以所接收的次序一次一個處理閃存命令。每一個子命令為基于存儲器的程序提供“開始”地址,其中該程序驅(qū)動至閃存設(shè)備的閃存命令接口。閃存命令由指令序列產(chǎn)生,并且記錄存儲器的輸出直至完成。引擎具有四個基本的控制功能:
1.控制閃存設(shè)備命令的序列
2.對閃存設(shè)備的數(shù)據(jù)輸入控制輸入字節(jié)的選擇,即在何時選擇哪個尋址字節(jié)
3.基于微控制器主時鐘(200MHz)逐步地控制閃存定時
4.控制重復(fù)命令,即4k Din循環(huán)
常常IO控制器使用專有的或?qū)蛹壍腎O定向通信機制來在CPU與較慢的設(shè)備之間通信。這存在的問題是a)常常是不靈活的或b)可擴展??商鎿Q地,本發(fā)明使用標(biāo)準(zhǔn)通信網(wǎng)絡(luò)將CPU連接至設(shè)備。圖50示出了本發(fā)明的一個實施方式。在本實施方式中,我們從PCIe轉(zhuǎn)換至40GbE。一旦我們處于40GbE網(wǎng)絡(luò),任何組件都可以與任何組件通話。存在與該方法相關(guān)的多個益處。在具有大量設(shè)備的系統(tǒng)中,可以充分地分配工作和數(shù)據(jù),從而保證并行操作。如果增加更多的設(shè)備,可以擴展網(wǎng)絡(luò)。具有故障切換(fail-over)通信路徑是容易的。
為了提供高等級的容錯,常常利用冗余組件和互連路徑。本發(fā)明提供了改善的冗余數(shù)據(jù)傳遞路徑。在一些實施方式中,閃存卡上的主要業(yè)務(wù)路徑使用兩個以太網(wǎng),每一個以太網(wǎng)連接至FPGA。不是僅提供了從FPGA至交換機的輔助以太網(wǎng)鏈接,這可能需要總共4個以太網(wǎng)鏈路,而是我們將FPGA連接在一起并在至其他FPGA的鏈接上提供了輔助的、備用的路徑,如圖57所示。利用該輔助鏈路將使系統(tǒng)用退化的業(yè)務(wù)容量進行操作,但是將在不需要輔助以太網(wǎng)接口的情況下提供冗余路徑。不是將閃存控制器FPGA連接至兩個以太網(wǎng)端口,如塊5700所示,而是“其他”FPGA以太網(wǎng)端口連接作為冗余路徑,如塊5702所示。這節(jié)約了系統(tǒng)和板資源并提供了相同等級的冗余。
本發(fā)明的實施方式涉及具有永久性計算機可讀存儲介質(zhì)的計算機存儲產(chǎn)品,在永久性計算機可讀存儲介質(zhì)上具有用于執(zhí)行各種計算機實現(xiàn)的操作計算機碼。媒介和計算機碼可以是特別設(shè)計的并出于本發(fā)明的目的進行構(gòu)造,或者可以是已知的類型并可用于具有計算機軟件領(lǐng)域的技術(shù)的碼。計算機可讀介質(zhì)的示例包括但不限于:磁介質(zhì)、光介質(zhì)、磁光介質(zhì)和尤其配置為儲存和執(zhí)行編程碼的硬件設(shè)備,諸如應(yīng)用特定的集成電路(“ASIC”)、可編程邏輯設(shè)備(“PLD”)和ROM與RAM設(shè)備。計算機碼的示例包括諸如由編譯器產(chǎn)生的機器碼及包含較高等級碼的文件,該文件由計算機使用解譯器執(zhí)行。例如,本發(fā)明的實施方式可以使用C++、或其他面向?qū)ο缶幊陶Z言和開發(fā)工具實現(xiàn)。本發(fā)明的另一實施方式可以在硬線電路中實現(xiàn),該硬線電路代替機器可執(zhí)行軟件指令或與機器可執(zhí)行軟件指令結(jié)合。
以上描述出于解釋的目的使用特定術(shù)語提供了對本發(fā)明的徹底理解。然而,對本領(lǐng)域技術(shù)人員顯而易見的是實行本發(fā)明不需要具體細節(jié)。因而,本發(fā)明特定實施方式的以上描述出于示出和描述的目的顯示。并不意圖詳盡或?qū)⑾拗票景l(fā)明為所公開的精確形式;顯然,許多修改和改變考慮到以上教示是可能的。實施方式被選擇和描述是為了最好地解釋本發(fā)明的原理及其實際應(yīng)用,其因而使本領(lǐng)域技術(shù)人員能夠最好地利用具有各種修改的本發(fā)明和各個實施方式以適于預(yù)期的特定使用。應(yīng)當(dāng)意識到的是所附權(quán)利要求及其等效限定了本發(fā)明的范圍。