縮短數(shù)據(jù)存儲系統(tǒng)中寫入等待時間的方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明涉及縮短數(shù)據(jù)存儲系統(tǒng)中寫入等待時間的方法和系統(tǒng)。提供的數(shù)據(jù)存儲系統(tǒng)實施縮短等待時間的命令壓入模型。主機系統(tǒng)具有對存儲器控制器的非易失性存儲器(NVM)器件的訪問權(quán)限,以允許主機系統(tǒng)將命令壓入位于NVM器件中的命令隊列中。主機系統(tǒng)在不需要來自存儲器控制器的干預(yù)下完成每次IO,從而避免了對主機系統(tǒng)與存儲控制器之間同步或握手的需要。對于寫入命令,在寫入命令完成后存儲器控制器不需要向主機系統(tǒng)發(fā)出完成中斷,因為主機系統(tǒng)認為在寫入命令被壓入存儲器控制器的隊列中時寫入命令已完成。所有這些特征的結(jié)合引起整體等待時間大幅縮短。
【專利說明】縮短數(shù)據(jù)存儲系統(tǒng)中寫入等待時間的方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]一般來說,本發(fā)明涉及數(shù)據(jù)存儲系統(tǒng),更確切地說,涉及為了縮短寫入等待時間在數(shù)據(jù)存儲系統(tǒng)中使用命令壓入模型的方法和系統(tǒng)。
【背景技術(shù)】
[0002]存儲陣列或磁盤陣列是包括多個硬盤驅(qū)動器(HDD)或類似的永久存儲單元的數(shù)據(jù)存儲器件。存儲陣列能夠允許以高效方式存儲大量數(shù)據(jù)。服務(wù)器或工作站可以被直接連接到存儲陣列,使得存儲陣列對服務(wù)器或工作站為本機器件。在服務(wù)器或工作站被直接連接至IJ存儲陣列的情況下,存儲陣列典型情況下被稱為直接連接存儲(DAS)系統(tǒng)。作為替代,月艮務(wù)器或工作站可以經(jīng)由存儲陣列網(wǎng)絡(luò)(SAN)遠程地連接到存儲陣列。在SAN系統(tǒng)中,盡管存儲陣列對服務(wù)器或工作站不是本機器件,但是該陣列的磁盤驅(qū)動器對服務(wù)器或工作站的操作系統(tǒng)(OS)顯現(xiàn)為本機連接的。
[0003]圖1展示了典型的數(shù)據(jù)存儲系統(tǒng)2的框圖,執(zhí)行命令彈出模型。系統(tǒng)2包括主機系統(tǒng)3、存儲器控制器4以及外設(shè)部件互連(PCI)或PCI Express (PCIe)總線5??刂破?包括中央處理單元(CPU) 6、存儲器器件7和I/O接口器件8。I/O接口器件8被配置為遵照已知的數(shù)據(jù)傳遞協(xié)議標(biāo)準(zhǔn)執(zhí)行數(shù)據(jù)傳遞,比如串行連接SCSI (SAS)標(biāo)準(zhǔn)、串行高級技術(shù)連接(SATA)標(biāo)準(zhǔn)或者非易失性存儲器主機控制器高速接口(NVMe)標(biāo)準(zhǔn)。I/O接口器件8控制著往返多個物理盤(PD)9的數(shù)據(jù)傳遞。存儲器控制器4經(jīng)由PCI總線5與系統(tǒng)CPUll和系統(tǒng)存儲器器件12通信。系統(tǒng)存儲器器件12存儲著由系統(tǒng)CPUll執(zhí)行的軟件程序和數(shù)據(jù)。系統(tǒng)存儲器器件12的一部分被用作命令隊列13。
[0004]在典型的寫入動作期間,系統(tǒng)CPUll運行存儲器驅(qū)動軟件棧14,它存儲著命令隊列13中的命令和數(shù)據(jù)。當(dāng)存儲器驅(qū)動器14存儲著命令隊列13中的命令時,它通知存儲器控制器4命令已準(zhǔn)備好要執(zhí)行。當(dāng)控制器CPU6準(zhǔn)備好執(zhí)行命令時,它使所述命令或多條命令以及相關(guān)聯(lián)的數(shù)據(jù)從系統(tǒng)隊列13經(jīng)由總線5彈出,并向主機系統(tǒng)3發(fā)出完成中斷。當(dāng)這些命令由存儲器控制器執(zhí)行時,控制器CPU6使與這些命令相關(guān)聯(lián)的數(shù)據(jù)被暫時存儲在控制器存儲器器件7中,隨后經(jīng)由I/O接口器件8寫入一個或多個TO9。
[0005]在歷史上,按照輸入/輸出(I O)每秒(IOPS ),在某些情況下,兆字節(jié)每秒(MB/s)已經(jīng)測量了圖1所示類型的基于HDD系統(tǒng)的性能。典型情況下,這樣的存儲器系統(tǒng)的等待時間按下式給出:Latency_0verall=Latency_SW_Stack+Latency_Controller+Latency_HDD=l/10PS,其中Latency_Overall是系統(tǒng)的整體等待時間,Latency_SW_Stack是與存儲器驅(qū)動器14相關(guān)聯(lián)的等待時間,Latency_ControIler是與存儲器控制器4相關(guān)聯(lián)的等待時間,而Latency_HDD是與PD9相關(guān)聯(lián)的等待時間。典型情況下,Latency_Sff_Stack在若干微秒(10_6秒)量級。同樣,典型情況下,Latency_Controller在幾十微秒量級。不過,典型情況下,Latency_HDD在毫秒(10_3秒)或幾十毫秒的量級。近似99%的整體等待時間歸因于HDD中極其緩慢的機械部件。所以,對于實用目的,確定系統(tǒng)性能時可以忽略Latency_SW_Stack和Latency_Controller。換言之,系統(tǒng)性能可以被估計為等于Latency_HDD。[0006]最近,已經(jīng)有了從使用磁性HDD作為PD9到使用固態(tài)驅(qū)動器(SSD)或SSD和HDD的結(jié)合作為ro9的過渡。在行業(yè)中,使用基于SSD的解決方案被視為基于HDD的解決方案的演變。不過,基于SSD的解決方案比基于HDD的解決方案快近似一百倍并且消耗的功率要少得多?;赟SD解決方案的這種觀點已經(jīng)導(dǎo)致本行業(yè)在基于SSD解決方案中繼續(xù)使用先前存在的上述彈出式方法,從命令隊列將命令彈出到存儲器控制器中。同樣,因為基于SSD的解決方案在行業(yè)中已經(jīng)被視為僅僅是基于HDD的解決方案的演變,所以在實施基于SSD解決方案的存儲系統(tǒng)中,IOPS已經(jīng)被用作測量系統(tǒng)性能的性能度量。
[0007]不過,基于SSD的解決方案與基于HDD的解決方案之間的差異比看起來大得多,并且傳統(tǒng)的度量不應(yīng)當(dāng)用于對實施基于SSD的解決方案的系統(tǒng)測量性能。在實施基于SSD解決方案的系統(tǒng)中,存儲系統(tǒng)的整體等待時間按下式給出:Latency_Overall=Latency_SW_Stack+Latency_Controller+Latency_SSD=l/IOPS,其中 Latency_SW_Stack 是與存儲器驅(qū)動器14相關(guān)聯(lián)的等待時間,Latency_Controller是與存儲器控制器4相關(guān)聯(lián)的等待時間,而Latency_SSD是與被用作PD9的SSD相關(guān)聯(lián)的等待時間。不同于HDD的等待時間,SSD的等待時間在幾十至幾百微秒量級,比如,一般在100至300微秒的范圍內(nèi),并且與存儲器驅(qū)動器14和存儲器控制器4相關(guān)聯(lián)的等待時間對整體等待時間增加了比HDD情況下大得多的比例。所以,在實施基于SSD解決方案的存儲系統(tǒng)的整體等待時間計算中,Latency_SW_Stack和Latency_Controller不應(yīng)當(dāng)再被忽略。
[0008]命令彈出的方式需要存儲器驅(qū)動器14與存儲器控制器4之間相當(dāng)多的交互作用。在基于HDD的系統(tǒng)中這是便利的方式,它允許主機系統(tǒng)3的快速的操作系統(tǒng)(OS)側(cè)幾乎完全獨立于更慢的基于HDD的控制器側(cè),從而OS側(cè)可以在隊列13中堆積盡可能多的命令,以提供更大的隊列深度(QD),這在基于HDD的解決方案中是非常可取和普通的。然后存儲器控制器4可以按其自身的步調(diào)使命令從隊列13中彈出。雖然在基于HDD的解決方案中這種方法非常便利,但是它增加了大量的額外等待時間,因為存儲器控制器4與主機系統(tǒng)3之間需要同步,以及因為命令被存儲器控制器4拾取的時間可能比它們被發(fā)出的時間遲得多的事實。此外,如果存儲器控制器4有許多工作要做,如同常有的情況,所有的命令處理都必然與存儲器控制器4的其余工作量競爭,這對整體等待時間增加了更多的等待時間。
[0009]上述命令彈出模型非常適于基于HDD的解決方案,其中對典型情況下可能花費大約10,000微秒來完成的命令增加50至500微秒是可以忽略的,假設(shè)該方法提供了其他優(yōu)點。不過,命令彈出模型在實施基于SSD解決方案的存儲系統(tǒng)中使用時沒有產(chǎn)生可接受的結(jié)果,其中訪問時間可以短至100微秒,或者當(dāng)在存儲器控制器4中使用動態(tài)隨機存取存儲器(DRAM)回寫(WB)緩沖區(qū)的情況下,短至I到5微秒。
[0010]然而,正如上面指出,實施基于SSD的解決方案的存儲系統(tǒng)的整體等待時間仍然被估計為等于 Latency_SSD,而讓 Latency_SW_Stack 和 Latency_Controller 在估計之外。由于這個原因,對實施基于SSD解決方案的存儲系統(tǒng)縮短整體等待時間的嘗試主要地一直集中在縮短 Latency_SSD,而不是縮短 Latency_SW_Stack 或 Latency_Controller。
[0011 ] 對實施基于SSD解決方案并通過顯著縮短Latency_SW_Stack和Latency_Controller之一或二者也顯著縮短了整體等待時間的存儲系統(tǒng)存在著需求。
【發(fā)明內(nèi)容】
[0012]本發(fā)明提供了數(shù)據(jù)存儲系統(tǒng)、存儲器控制器、方法和計算機可讀介質(zhì),它們?nèi)繉嵤┝丝s短等待時間的命令壓入模型。數(shù)據(jù)存儲系統(tǒng)包括主機系統(tǒng)、存儲器控制器、至少一個SSD以及使主機系統(tǒng)與存儲器控制器互連的總線。主機系統(tǒng)包括系統(tǒng)處理器和系統(tǒng)存儲器器件。存儲器控制器包括控制器處理器、非易失性存儲器(NVM)器件和輸入/輸出(I/O)接口器件。NVM器件的一部分被用作命令隊列。SSD被連接到I/O接口器件并被配置為H)的陣列。主機系統(tǒng)經(jīng)由總線訪問NVM器件并經(jīng)由總線將命令壓入NVM器件的命令隊列中。
[0013]所述方法包括:
[0014]在包括控制器處理器、NVM器件以及連接到被配置為H)陣列的至少一個SSD的I/O接口器件的存儲器控制器中,將NVM器件的一部分配置為命令隊列;以及
[0015]利用經(jīng)由總線與存儲器控制器互連的主機系統(tǒng),將命令經(jīng)由總線壓入存儲器控制器中;以及
[0016]在存儲器控制器中,將命令存儲在NVM器件的命令隊列中。
[0017]計算機可讀介質(zhì)具有存儲于其上的用于由主機系統(tǒng)的處理器執(zhí)行的計算機程序,用于將命令經(jīng)由總線壓入連接到主機系統(tǒng)的存儲器控制器的NVM器件的命令隊列中。計算機程序包括第一和第二代碼部分。第一代碼部分接收命令以讀取或?qū)懭氡慌渲脼閞o陣列的SSD的一個或多個地址。第二代碼部分將命令壓入存儲器控制器中。根據(jù)一個展示性實施例,第二代碼部分將命令壓入存儲器控制器的NVM器件的命令隊列中。根據(jù)另一個展示性實施例,第二代碼部分將命令壓入存儲器控制器的直接存儲器訪問(DMA)引擎中,命令被存儲在存儲器控制器的NVM器件的命令隊列中。
[0018]按照以下說明、附圖和權(quán)利要求書,本發(fā)明的這些和其他特征和優(yōu)點將變得顯而易見。
【專利附圖】
【附圖說明】
[0019]圖1展示了實施命令彈出模型的已知數(shù)據(jù)存儲系統(tǒng)的框圖;
[0020]圖2展示了根據(jù)實施命令壓入模型的展示性實施例的數(shù)據(jù)存儲系統(tǒng)的框圖;
[0021]圖3展示了根據(jù)實施命令壓入模型的另一個展示性實施例的數(shù)據(jù)存儲系統(tǒng)的框圖;
[0022]圖4展示的流程圖表示由圖2所示的數(shù)據(jù)存儲系統(tǒng)執(zhí)行的命令壓入方法;
[0023]圖5展示的流程圖表示由圖3所示的數(shù)據(jù)存儲系統(tǒng)執(zhí)行的命令壓入方法。
【具體實施方式】
[0024]根據(jù)本發(fā)明,提供的數(shù)據(jù)存儲系統(tǒng)實施命令壓入模型,它縮短了與存儲器驅(qū)動器和存儲器控制器相關(guān)聯(lián)的等待時間。命令壓入模型消除了因為寫入命令I(lǐng)O在主機系統(tǒng)與存儲器控制器之間的同步需求,從而消除了與同步相關(guān)聯(lián)的等待時間。當(dāng)命令I(lǐng)O在主機系統(tǒng)發(fā)出時,主機系統(tǒng)訪問存儲器控制器的存儲器器件并將命令I(lǐng)O和相關(guān)聯(lián)的數(shù)據(jù)壓入存儲器器件的命令隊列中。所以,主機系統(tǒng)在沒有來自存儲器控制器的任何干預(yù)下完成每個寫入命令10,從而避免了主機系統(tǒng)與存儲器控制器之間的同步或握手的需要。
[0025]存儲器控制器的存儲器件受保護以對抗電源故障和典型的存儲器錯誤,并且這樣就可以被認為是永久存儲元件。所以,主機系統(tǒng)可以認為在它將寫入命令和相關(guān)聯(lián)的數(shù)據(jù)壓入存儲器控制器的存儲器器件的命令隊列中之時寫入命令I(lǐng)O便安全地完成。換言之,從主機系統(tǒng)的觀點,當(dāng)它將寫入命令壓入存儲器控制器的存儲器器件的命令隊列中時,仿佛它已經(jīng)完成了對TO9的寫入。所以,主機系統(tǒng)在沒有來自存儲器控制器的任何干預(yù)下完成每個寫入命令10,從而避免了主機系統(tǒng)與存儲器控制器之間同步或握手的需要。
[0026]不僅如此,與以上參考圖1介紹的命令彈出模型對照,一旦本發(fā)明的存儲器控制器已經(jīng)完成了寫入命令的處理,存儲器控制器不需要向主機系統(tǒng)發(fā)出完成中斷,因為主機系統(tǒng)認為在它將寫入命令壓入存儲器控制器的命令隊列中時寫入命令完成。這種特征允許主機系統(tǒng)和存儲器控制器關(guān)于寫入命令彼此獨立地操作。所有這些特征的結(jié)合引起Latency_Sff_Stack和Latency_Controller都大幅縮短,這引起整體等待時間大幅縮短。
[0027]因此,不是使用以上參考圖1介紹的命令彈出模型,其中命令被準(zhǔn)備在系統(tǒng)存儲器12的命令隊列13中并隨后由存儲器控制器4彈出并處理,而是主機系統(tǒng)將命令和任何相關(guān)聯(lián)的數(shù)據(jù)壓入到位于存儲器控制器的存儲器器件中的命令隊列中。主機系統(tǒng)將命令和任何相關(guān)聯(lián)的數(shù)據(jù)壓入到存儲器控制器的存儲器器件的命令隊列中的方式能夠以許多方式完成。根據(jù)第一個展示性實施例,主機系統(tǒng)的存儲器驅(qū)動器按計劃地將命令和相關(guān)聯(lián)的數(shù)據(jù)壓入存儲器控制器的存儲器器件的命令隊列中。根據(jù)本文介紹的第二個展示性實施例,存儲器控制器的直接存儲器訪問(DMA)引擎將命令和任何相關(guān)聯(lián)的數(shù)據(jù)壓入存儲器控制器的存儲器器件的命令隊列中。這兩個實施例都避免了主機系統(tǒng)與存儲控制器之間的同步或握手的需要。
[0028]圖2展示了根據(jù)實施命令壓入模型的第一個展示性實施例的數(shù)據(jù)存儲系統(tǒng)20的框圖。系統(tǒng)20包括主機系統(tǒng)30、存儲器控制器70、外設(shè)部件互連(PCI)或PCI Express(PCIe)總線65以及包括PD120a的至少一個SSD120。主機系統(tǒng)30包括系統(tǒng)CPU40和系統(tǒng)存儲器器件60。存儲器控制器70包括CPU80、非易失性存儲器(NVM)器件90和I/O接口器件110。典型情況下,NVM器件90是DRAM器件。NVM器件90的一部分被用作命令隊列91。I/O接口器件110被配置為遵照已知的數(shù)據(jù)傳輸協(xié)議標(biāo)準(zhǔn)執(zhí)行數(shù)據(jù)傳輸,比如SAS、SATA和/或NVMe標(biāo)準(zhǔn)。I/O接口器件110控制著往返SSD120的多個H)120a的數(shù)據(jù)傳輸。存儲器控制器70經(jīng)由PCI總線65和存儲器驅(qū)動器50與系統(tǒng)CPU40通信。系統(tǒng)存儲器器件60存儲著由系統(tǒng)CPU40執(zhí)行的軟件程序和數(shù)據(jù)。
[0029]根據(jù)這個展示性實施例,存儲器驅(qū)動器50經(jīng)由總線65與NVM器件90直接通信。在典型的寫入動作期間,系統(tǒng)CPU40運行的軟件棧包括存儲器驅(qū)動器50,它將命令和數(shù)據(jù)壓入NVM器件90的命令隊列91中,并且通知控制器CPU80所述命令和數(shù)據(jù)在隊列91中。執(zhí)行壓入動作不需要主機系統(tǒng)30與存儲器控制器之間的同步或握手。一旦存儲器驅(qū)動器50已經(jīng)將寫入命令和相關(guān)聯(lián)數(shù)據(jù)壓入命令隊列91中,主機系統(tǒng)30的OS便認為寫入命令完成。所以,存儲器控制器70不需要向主機系統(tǒng)30發(fā)出完成中斷以通知主機CPU40所述寫入命令已經(jīng)完成。
[0030]當(dāng)控制器CPU80準(zhǔn)備好執(zhí)行命令時,它從NVM器件90中檢索命令和數(shù)據(jù)并執(zhí)行該命令。在寫入命令的情況下,控制器CPU80使相關(guān)聯(lián)的數(shù)據(jù)經(jīng)由I/O接口器件110寫入到SSD PD120a。在讀取命令的情況下,控制器CPU80檢查NVM90的高速緩存(為清楚起見未顯示)以判斷要讀取的數(shù)據(jù)是否在高速緩存中,如果在,便從高速緩存中讀取數(shù)據(jù)并將其傳送到主機系統(tǒng)30。如果要讀取的數(shù)據(jù)不在高速緩存中,CPU80使數(shù)據(jù)從SSD PD120a中讀取并傳送到主機系統(tǒng)30。
[0031]圖2的命令壓入模型與圖1的命令彈出模型之間的關(guān)鍵差異之一在于,在控制器CPU80意識到命令之前,命令所有權(quán)就從主機系統(tǒng)30傳送到NVM器件90的隊列91。在圖1的命令彈出模型中,在主機系統(tǒng)3從存儲器控制器4收到完成中斷前,與寫入命令相關(guān)聯(lián)的命令所有權(quán)并不傳送。此外,在圖1的命令彈出模型中,同步或握手發(fā)生在控制器CPU6與主機系統(tǒng)3之間,以便將命令從系統(tǒng)存儲器器件12的隊列13彈出到存儲器控制器4中。典型情況下,與圖1所示的命令彈出模型相比,消除這些等待時間將引起寫入等待時間縮短一到兩個量級。
[0032]因為一旦命令已經(jīng)被壓入NVM90的隊列91中,存儲器控制器70便獲得了命令的所有權(quán),所以重要的是保護NVM90以抵抗電源故障。這樣的保護措施能夠以許多方式實現(xiàn),但是一種方式是為NVM90使用備用電池(BBU)、超級電容器(Supercap)動態(tài)隨機存取存儲器(DRAM)器件。本領(lǐng)域的技術(shù)人員將理解可以選擇BBU、Supercap DRAM器件或其他適宜存儲器器件用于這種目的的方式。
[0033]為了使存儲器驅(qū)動器50高效地將命令壓入隊列91中,NMV器件90應(yīng)當(dāng)由存儲器驅(qū)動器50經(jīng)由總線65直接可訪問。這種可訪問性可以以許多方式實現(xiàn)。一種實現(xiàn)它的方式是在NVM器件90中使用的命令和數(shù)據(jù)結(jié)構(gòu)與主機系統(tǒng)30中所用的相同。這在PCIe中通過便利的基址寄存器(BAR)編程是可能的,如本領(lǐng)域的技術(shù)人員將理解。從主機系統(tǒng)30到NVM器件90的數(shù)據(jù)傳輸能夠由存儲器驅(qū)動器50按計劃地實現(xiàn)。
[0034]也應(yīng)當(dāng)為存儲器驅(qū)動器50提供確定NVM器件90中的哪些入口為可用的方式,以便用命令信息映射/標(biāo)注它們。每條命令都由數(shù)據(jù)集和命令信息組成。命令信息包括諸如讀取/寫入、塊地址、指針以及標(biāo)記的信息。命令信息按照命令類型變化,并且與數(shù)據(jù)集獨立地被創(chuàng)建。數(shù)據(jù)集和命令信息都需要被移動到NVM90中,并且數(shù)據(jù)集必須用對應(yīng)的命令信息映射/標(biāo)注,以確保命令信息與數(shù)據(jù)集之間的一致性。實現(xiàn)它的方式將變化,取決于所用的存儲器控制器70的類型或配置。為了提供這種功能全部存儲器控制器都是可配置的,盡管解決方案的效率將取決于存儲器控制器的硬件、軟件和/或固件實施。所以,這個問題將需要針對具體情況來解決,如本領(lǐng)域技術(shù)人員將理解。
[0035]圖3展示了根據(jù)第二個展示性實施例的數(shù)據(jù)存儲系統(tǒng)200的框圖,其中DMA引擎用于將命令和數(shù)據(jù)壓入存儲器控制器的存儲器器件的隊列中。盡管DMA引擎可以是主機系統(tǒng)的一部分也可以是存儲器控制器的一部分,但是出于展示性目的它被顯示和描述為存儲器控制器的一部分。系統(tǒng)200包括主機系統(tǒng)220、存儲器控制器270、PCI或PCIe總線265以及包括多個H)320a的至少一個SSD320。主機系統(tǒng)220包括系統(tǒng)CPU230和系統(tǒng)存儲器器件260。存儲器控制器270包括DMA引擎240、CPU280、NVM器件290以及I/O接口器件310。典型情況下,NVM器件290是DRAM器件,并且它具有的保護措施與以上參考NVM90介紹的相同。NVM器件290的一部分被用作命令隊列291。I/O接口器件310被配置為按照數(shù)據(jù)傳輸協(xié)議標(biāo)準(zhǔn)執(zhí)行數(shù)據(jù)傳輸,比如SAS、SATA和/或NVMe標(biāo)準(zhǔn)。I/O接口器件310控制著往返SSD320的多個H)320a的數(shù)據(jù)傳輸。存儲器控制器270經(jīng)由PCI總線265和存儲器驅(qū)動器250與系統(tǒng)CPU230通信。系統(tǒng)存儲器件260存儲著由系統(tǒng)CPU230執(zhí)行的軟件程序和數(shù)據(jù)。
[0036]根據(jù)這個展示性實施例,DMA引擎240經(jīng)由總線265與存儲器驅(qū)動器250通信并且與NVM器件290直接通信。在典型的寫入動作期間,存儲器驅(qū)動器250經(jīng)由總線265將命令和任何相關(guān)聯(lián)的數(shù)據(jù)壓入DMA引擎240。DMA引擎240將命令和數(shù)據(jù)存儲在NVM器件290的命令隊列291中。執(zhí)行壓入動作不需要主機系統(tǒng)220與存儲控制器270之間的同步或握手。一旦DMA引擎240已經(jīng)將寫入命令和相關(guān)聯(lián)的數(shù)據(jù)存儲到命令隊列291中,優(yōu)選情況下,它通知控制器CPU280命令和數(shù)據(jù)在NVM290中,典型情況下通過發(fā)出中斷。主機系統(tǒng)220的OS認為在命令和數(shù)據(jù)被傳送到DMA引擎240之時寫入命令已完成。所以,存儲器控制器270不需要向主機系統(tǒng)220發(fā)出完成中斷以通知它寫入命令已經(jīng)完成。
[0037]當(dāng)控制器CPU280準(zhǔn)備好執(zhí)行命令時,它從NVM器件290中檢索命令和數(shù)據(jù)并執(zhí)行該命令。在寫入命令的情況下,控制器CPU280使相關(guān)聯(lián)的數(shù)據(jù)經(jīng)由I/O接口器件310寫入到SSD的各H)320a。在讀取命令的情況下,控制器CPU280檢查NVM290的高速緩存(為清楚起見未顯示)以判斷要讀取的數(shù)據(jù)是否在高速緩存中,如果在,便從高速緩存中讀取數(shù)據(jù)并將其傳送到主機系統(tǒng)220。如果要讀取的數(shù)據(jù)不在高速緩存中,CPU280使數(shù)據(jù)從SSD各PD320a中讀取并傳送到主機系統(tǒng)220。
[0038]如同以上參考圖2介紹的命令壓入模型,利用圖3的命令壓入模型,在控制器CPU280意識到命令之前,命令所有權(quán)就從主機系統(tǒng)220傳送到NVM器件290的隊列291。如同以上參考圖2介紹的命令壓入模型,利用圖3的命令壓入模型,為了將命令壓入隊列291中,在控制器CPU280與主機系統(tǒng)220之間不需要同步或握手。所以,消除了以上參考圖1介紹的等待時間。
[0039]圖4展示的流程圖表示根據(jù)部分地由圖2所示的主機系統(tǒng)30部分地由存儲控制器70執(zhí)行的展示性實施例的命令壓入方法。本方法將參考單命令介紹,盡管本方法的若干步驟也可以對多條命令同時執(zhí)行。系統(tǒng)CPU40發(fā)出讀取或?qū)懭朊睿绶娇?01指示。主機系統(tǒng)30的存儲器驅(qū)動器50將命令壓入NVM器件90的隊列91中,并且通知存儲器控制器70所述命令在NVM器件90中,如方框402指示。
[0040]在寫入命令的情況下,與命令相關(guān)聯(lián)的數(shù)據(jù)也被壓入NVM器件90中。隨后,從NVM器件90讀取的命令和數(shù)據(jù)被寫入到SSD120的各H)120a。在已被壓入NVM器件90中的讀取命令的情況下,典型情況下,存儲器控制器70將判斷數(shù)據(jù)是否存儲在NVM器件90的高速緩存中。如果存儲器控制器70判定數(shù)據(jù)存儲在高速緩存中(即一個高速緩存命中),它便從高速緩存中讀取數(shù)據(jù)并傳送到主機系統(tǒng)30。如果存儲器控制器70判定數(shù)據(jù)沒有存儲在高速緩存中(即高速緩存未中),它便從SSD120的各H)120a中讀取數(shù)據(jù)并將數(shù)據(jù)傳送到主機系統(tǒng)30。
[0041]在寫入命令被壓入NVM器件90的隊列91中的情況下,一旦存儲器驅(qū)動器50將寫入命令壓入隊列91中,主機系統(tǒng)30中的IO就完成了。在讀取命令被壓入隊列91中的情況下,在讀取的數(shù)據(jù)被返回到主機系統(tǒng)30前,主機系統(tǒng)30中的IO未完成,這是圖1所示公知存儲系統(tǒng)2中處理讀取命令的方式。由本發(fā)明的方法和系統(tǒng)所實現(xiàn)的等待時間縮短關(guān)于寫入命令最為顯著,因為從主機系統(tǒng)30將寫入命令傳送到存儲器控制器70中不再需要同步的事實,以及因為主機系統(tǒng)30不再必須等待完成中斷才能認為寫入命令已完成的事實。
[0042]圖5展示的流程圖表示根據(jù)部分地由圖3所示的主機系統(tǒng)220部分地由存儲控制器270執(zhí)行的展示性實施例的命令壓入方法。本方法將參考單命令介紹,盡管本方法的若干步驟也可以對多條命令同時執(zhí)行。系統(tǒng)CPU230發(fā)出讀取或?qū)懭朊?,如方?01指示。存儲器驅(qū)動器250將命令壓入DMA引擎240,如方框502指示。DMA引擎240將命令存儲在NVM器件290的隊列291中,并且通知存儲器控制器270該命令在NVM器件290中,如方框503指示。關(guān)于通知存儲器控制器270該命令已經(jīng)被存放到隊列291中的方式,本發(fā)明不受限制。這可以以許多方式實現(xiàn),例如,發(fā)出中斷、更新寄存器中的值等等,正如本領(lǐng)域的技術(shù)
人員將理解。
[0043]主機系統(tǒng)30和220的以及存儲器控制器70和270的功能可以以硬件、軟件、固件或其結(jié)合實施。以軟件或固件實施功能的計算機代碼存儲在計算機可讀介質(zhì)(CRM)上,比如系統(tǒng)存儲器器件60和260或者NVM器件90和290或者某種其他存儲器器件。CRM可以是任何類型的存儲器器件,包括但不限于磁性存儲器件、固態(tài)存儲器件、閃存器件以及光存儲器件。典型情況下,CPU40.80.230和280的每一個都包括至少一個微處理器,但是可以包括能夠提供執(zhí)行相關(guān)聯(lián)任務(wù)所必要或期望的功能的任何類型的處理器,包括例如微控制器、數(shù)字信號處理器(DSP)、專用集成電路(ASIC)以及片上系統(tǒng)(S0C)。本文中所使用的術(shù)語“處理器”意在指示可以被編程或配置為執(zhí)行上述任務(wù)和任何附加任務(wù)的這些和其他類型的計算器件,這些任務(wù)被視為允許CPU40、80、230和280執(zhí)行其角色所需要的。
[0044]應(yīng)當(dāng)注意,為了演示本發(fā)明的原理和概念,參考幾個展示性即示范性實施例已經(jīng)介紹了本發(fā)明。正如本領(lǐng)域技術(shù)人員將理解,可以對上述展示性實施例做出許多改變而在不偏離本發(fā)明的范圍。一切這樣的改變都在本發(fā)明的范圍之內(nèi)。例如,盡管H)120a和320a分別在圖2和圖3中顯示為分別僅僅在至少一個SSD120或320中實施,但是多個H)120a和320a可以實施為一個或多個SSD以及一個或多個HDD的組合。
【權(quán)利要求】
1.一種數(shù)據(jù)存儲系統(tǒng),包括: 主機系統(tǒng),包括系統(tǒng)處理器和系統(tǒng)存儲器器件; 存儲器控制器,包括控制器處理器、非易失性存儲器NVM器件和輸入/輸出I/O接口器件,其中NVM器件的一部分被用作命令隊列; 連接到I/O接口器件的至少一個固態(tài)驅(qū)動器SSD,其中,所述至少一個SSD被配置為物理盤驅(qū)動器H)的陣列;以及 將主機系統(tǒng)與存儲器控制器互連的總線,其中主機系統(tǒng)經(jīng)由總線訪問NVM器件并經(jīng)由總線將命令壓入NVM器件的命令隊列中。
2.根據(jù)權(quán)利要求1的數(shù)據(jù)存儲系統(tǒng),其中,系統(tǒng)處理器執(zhí)行存儲器驅(qū)動器程序,所述存儲器驅(qū)動器程序經(jīng)由總線訪問NVM器件并將命令經(jīng)由總線壓入NVM器件的命令隊列中。
3.根據(jù)權(quán)利要求1的數(shù)據(jù)存儲系統(tǒng),其中,存儲器控制器進一步包括直接訪問NVM器件的直接存儲器訪問DMA引擎,以及其中系統(tǒng)處理器執(zhí)行用于將命令經(jīng)由總線壓入DMA引擎的存儲器驅(qū)動器程序,以及其中DMA引擎將命令存儲在NVM器件的命令隊列中。
4.根據(jù)權(quán)利要求1的數(shù)據(jù)存儲系統(tǒng),其中,主機系統(tǒng)在命令已經(jīng)被壓入NVM器件的命令隊列中時通知存儲器控制器。
5.根據(jù)權(quán)利要求2的數(shù)據(jù)存儲系統(tǒng),其中,主機系統(tǒng)和NVM器件使用相同的命令和數(shù)據(jù)結(jié)構(gòu)。
6.根據(jù)權(quán)利要求5的數(shù)據(jù)存儲系統(tǒng),其中,總線是外設(shè)部件互連高速PCIe總線,存儲器驅(qū)動器程序通過使用PCIe總線的基址寄存器BAR訪問NVM器件。
7.一種存儲器控制器,包括: 輸入/輸出I/O接口器件,其中,NVM器件的一部分被用作命令隊列; 連接到I/O接口器件的至少一個固態(tài)驅(qū)動器SSD,其中,所述至少一個SSD被配置為物理盤驅(qū)動器ro的陣列; 控制器處理器;以及 非易失性存儲器NVM器件,NVM器件的一部分被分配為命令隊列,其中,NVM器件被配置為由主機系統(tǒng)經(jīng)由將主機系統(tǒng)與存儲器控制器互連的總線來訪問,其中NVM器件被配置為允許主機系統(tǒng)經(jīng)由總線將命令壓入NVM器件的命令隊列中。
8.根據(jù)權(quán)利要求7的存儲器控制器,其中,NVM器件由主機系統(tǒng)經(jīng)由主機系統(tǒng)的處理器所執(zhí)行的存儲器驅(qū)動器程序來訪問,以及總線是外設(shè)部件互連高速PCIe總線,以及其中NVM器件能夠由存儲器驅(qū)動器程序通過PCIe總線的基址寄存器BAR來訪問。
9.根據(jù)權(quán)利要求7的存儲器控制器,其中,存儲器控制器進一步包括: 直接存儲器訪問DMA引擎,經(jīng)由總線與主機系統(tǒng)通信并直接與NVM器件通信,其中,DMA引擎由主機系統(tǒng)經(jīng)由總線來訪問,以及DMA引擎接收由存儲器驅(qū)動器程序壓入DMA引擎的命令并將命令存儲在NVM器件的命令隊列中。
10.根據(jù)權(quán)利要求8的存儲器控制器,其中,NVM器件使用與主機系統(tǒng)相同的命令和數(shù)據(jù)結(jié)構(gòu)。
11.一種縮短數(shù)據(jù)存儲系統(tǒng)中的等待時間的方法,所述方法包括: 在包括控制器處理器、非易失性存儲器NVM器件以及連接到被配置為物理盤驅(qū)動器ro陣列的至少一個固態(tài)驅(qū)動器SSD的輸入/輸出I/O接口器件的存儲器控制器中,將NVM器件的一部分配置為命令隊列;以及 利用經(jīng)由總線與存儲器控制器互連的主機系統(tǒng),將命令經(jīng)由總線壓入存儲器控制器中;以及 在存儲器控制器中,將命令存儲在NVM器件的命令隊列中。
12.根據(jù)權(quán)利要求11的方法,其中,主機系統(tǒng)的系統(tǒng)處理器執(zhí)行存儲器驅(qū)動器程序,該存儲器驅(qū)動器程序經(jīng)由總線訪問NVM器件,并將命令經(jīng)由總線壓入NVM器件的命令隊列中。
13.根據(jù)權(quán)利要求11的方法,其中,存儲器控制器進一步包括直接存儲器訪問DMA引擎,以及其中主機系統(tǒng)的系統(tǒng)處理器執(zhí)行用于將來自主機系統(tǒng)的命令經(jīng)由總線壓入DMA引擎的存儲器驅(qū)動器程序,以及其中DMA引擎經(jīng)由總線將命令存儲在NVM器件的命令隊列中。
14.根據(jù)權(quán)利要求12的方法,進一步包括: 其中,主機系統(tǒng)當(dāng)命令已經(jīng)被壓入NVM器件的命令隊列中時通知存儲器控制器。
15.根據(jù)權(quán)利要求12的方法,其中,主機系統(tǒng)和NVM器件使用相同的命令和數(shù)據(jù)結(jié)構(gòu)。
16.根據(jù)權(quán)利要求15的方法,其中,總線是外設(shè)部件互連高速PCIe總線,存儲器驅(qū)動器程序通過使用PCIe總線的基址寄存器BAR訪問NVM器件。
17.一種非暫態(tài)計算機可讀介質(zhì),具有存儲于其上的用于由主機系統(tǒng)的處理器執(zhí)行的計算機程序,用于將命令經(jīng)由總線壓入連接到主機系統(tǒng)的存儲器控制器的非易失性存儲器NVM器件的命令隊列中,計算機程序包括: 第一代碼部分,用于接收命令以讀取或?qū)懭氡慌渲脼槲锢肀P驅(qū)動器H)陣列的固態(tài)驅(qū)動器SSD的一個或多個地址;以及 第二代碼部分,用于將命令壓入存儲器控制器中。
18.根據(jù)權(quán)利要求17的非暫態(tài)計算機可讀介質(zhì),其中,第二代碼部分將命令壓入NVM器件的命令隊列中,以及計算機程序進一步包括: 第三代碼部分,用于當(dāng)命令已經(jīng)被壓入存儲器控制器的NVM器件的命令隊列中時通知存儲器控制器的處理器。
19.根據(jù)權(quán)利要求17的非暫態(tài)計算機可讀介質(zhì),其中,第二代碼部分將命令壓入存儲器控制器的直接存儲器訪問DMA引擎中,DMA引擎直接連接到NVM器件以允許DMA引擎將命令存儲在命令隊列中,以及其中計算機程序進一步包括:。 第三代碼部分,用于當(dāng)命令已經(jīng)被壓入存儲器控制器的NVM器件的命令隊列中時通知存儲器控制器的處理器。
【文檔編號】G06F3/06GK103970688SQ201410042732
【公開日】2014年8月6日 申請日期:2014年1月29日 優(yōu)先權(quán)日:2013年2月4日
【發(fā)明者】L·伯特, A·巴德迪尼, H·西蒙納斯庫, M·艾什 申請人:Lsi公司