国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      具有組播直接存儲器存取和統(tǒng)一地址空間的存儲系統(tǒng)的制作方法

      文檔序號:6533338閱讀:304來源:國知局
      具有組播直接存儲器存取和統(tǒng)一地址空間的存儲系統(tǒng)的制作方法
      【專利摘要】一種使得客戶端、控制模塊和存儲模塊參與到統(tǒng)一地址空間以使用直接存儲器存取進(jìn)行高效讀取和寫入的系統(tǒng)和方法。用于讀取數(shù)據(jù)的方法包括確定用于寫入數(shù)據(jù)的第一副本的位于第一存儲器中的第一位置、用于寫入數(shù)據(jù)的第二副本的位于第二存儲器中的第二位置,其中第一存儲器是位于包括第一永久存儲器的第一存儲模塊中,而第二存儲器是位于包括第二永久存儲器的第二存儲模塊中。該方法進(jìn)一步包括對直接存儲器存取引擎編程以從客戶端存儲器讀取數(shù)據(jù)并向組播地址發(fā)布寫入請求,其中第一位置、第二位置和第三位置是與組播地址相關(guān)。
      【專利說明】具有組播直接存儲器存取和統(tǒng)一地址空間的存儲系統(tǒng) 背景
      [0001] 系統(tǒng)能向永久存儲器寫入數(shù)據(jù)和從永久存儲器讀取數(shù)據(jù)的速度通常是該系統(tǒng)整 體性能中的一個(gè)關(guān)鍵因素。向永久存儲器或者從永久存儲器傳送數(shù)據(jù)的傳統(tǒng)方法要求通過 客戶端系統(tǒng)和永久存儲器系統(tǒng)上的軟件、固件和硬件的多個(gè)層進(jìn)行處理。此外,當(dāng)數(shù)據(jù)在這 些層之間移動(dòng)時(shí),數(shù)據(jù)一般會被復(fù)制。于是,除了在對底層的物理存儲介質(zhì)進(jìn)行讀取或者寫 入所需要的延遲之外,還產(chǎn)生額外的延遲,該額外的延遲降低了系統(tǒng)的整體性能。


      【發(fā)明內(nèi)容】

      [0002] 總體而言,在一方面,本發(fā)明涉及一種用于寫入數(shù)據(jù)的方法。該方法包括從客戶端 接收寫入數(shù)據(jù)的請求,其中數(shù)據(jù)是位于客戶端存儲器中;由存儲裝置確定第一存儲器中的 第一位置以寫入數(shù)據(jù)的第一副本,第二存儲器中的第二位置以寫入數(shù)據(jù)的第二副本,其中 第一存儲器位于包括第一永久存儲器的第一存儲器模塊中,第二存儲器位于包括第二永久 存儲器的第二存儲器模塊中,其中存儲裝置包括第一存儲器模塊和第二存儲器模塊;對直 接存儲器存?。―MA)引擎編程以從客戶端存儲器讀取數(shù)據(jù)并向組播地址發(fā)布第一寫入請 求,其中第一位置、第二位置和第三位置與該組播地址相關(guān)聯(lián)。該方法還包括,在進(jìn)行編程 之后,存儲裝置中的交換機(jī)架構(gòu)(switch fabric)中的交換機(jī)(switch)從DMA引擎接收第 一請求;響應(yīng)于對第一請求的接收,在交換機(jī)中產(chǎn)生用以將第一副本寫入第一位置的第二 請求、用以將第二副本寫入第二位置的第三請求和用以將第三副本寫入第三位置的第四請 求,其中第三位置位于該存儲裝置的控制模塊的第三存儲器中;其中響應(yīng)于第二請求,數(shù)據(jù) 的第一副本被寫入到第一位置,響應(yīng)于該第三請求,數(shù)據(jù)的第二副本被寫入到第二位置,響 應(yīng)于該第四請求,數(shù)據(jù)的第三副本被寫入到第三位置;其中DMA引擎從客戶端存儲器讀取 數(shù)據(jù),第一存儲器、第二存儲器、第三存儲器以及客戶端存儲器的至少一部分是能夠通過統(tǒng) 一地址空間存取的存儲架構(gòu)(storage fabric)的一部分。
      [0003] 總體而言,在一方面,本發(fā)明涉及一種用于讀取數(shù)據(jù)的方法。該方法包括從客戶端 接收用以讀取存儲在存儲裝置中的數(shù)據(jù)的請求,其中該請求包括與數(shù)據(jù)相關(guān)的邏輯地址; 由存儲裝置使用該邏輯地址確定存儲器內(nèi)(in-memory)數(shù)據(jù)結(jié)構(gòu)中的位置,從存儲器內(nèi)數(shù) 據(jù)結(jié)構(gòu)中的位置獲得物理地址,其中物理地址對應(yīng)于永久存儲器中的第一位置,其中永久 存儲器位于存儲裝置的存儲模塊中且其中數(shù)據(jù)位于第一位置;對存儲模塊控制器編程以從 第一位置讀取數(shù)據(jù)并在第二位置存儲數(shù)據(jù)的第一副本,其中第二位置位于存儲模塊的存儲 器中;在對存儲模塊控制器編程之后:由存儲模塊控制器從第一位置讀取數(shù)據(jù),并由存儲 模塊控制器將數(shù)據(jù)的第一副本寫入第二位置;對直接存儲器存?。―MA)引擎編程以從第二 位置讀取數(shù)據(jù)并將數(shù)據(jù)的第二副本寫入客戶端存儲器中的第三位置;在對DMA引擎編程之 后:由DMA引擎從第二位置讀取該數(shù)據(jù)的第一副本,并由DMA引擎將數(shù)據(jù)的第二副本寫入第 三位置,其中永久存儲器、存儲器以及客戶端的至少一部分。
      [0004] 總體而言,在一方面,本發(fā)明涉及一系統(tǒng)。該系統(tǒng)包括包含客戶端處理器和客戶端 存儲器的客戶端,和存儲裝置,該存儲裝置包括:
      [0005] 處理器,其中處理器被配置成對第一直接存儲器存取(DMA)引擎和第二DMA引擎 編程、第一存儲器、包含第二存儲器的第一存儲模塊、第一永久存儲器、第二DMA引擎、包含 第三存儲器和第二永久存儲器的第二存儲模塊、包含被配置成實(shí)現(xiàn)組播的交換機(jī)的交換機(jī) 架構(gòu)、以及包含第一 DMA引擎和非透明橋(non-transparent bridge)的客戶端交換機(jī),其 中非透明橋使得存儲裝置能夠存取客戶端存儲器的至少一部分,其中第一 DMA引擎被配置 成從客戶端存儲器讀取第一數(shù)據(jù)(first datum)并將第一數(shù)據(jù)寫入交換機(jī)中的組播地址,其 中第二DMA引擎被配置成從選自下述組中的至少其中之一讀取第二數(shù)據(jù)(second datum), 所述組由第一永久存儲器和第二永久存儲器組成,第二DMA引擎還被配置成將第二數(shù)據(jù)寫 入客戶端存儲器,其中客戶端存儲器的所述部分、第一存儲器、第二存儲器和第三存儲器是 能夠通過統(tǒng)一地址空間存取的存儲架構(gòu)(storage fabric)的一部分。
      [0006] 本發(fā)明的其他方面將通過下面的描述和所附的權(quán)利要求而變得顯而易見。

      【專利附圖】

      【附圖說明】
      [0007] 圖1A-1E示出了根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的多個(gè)系統(tǒng)。
      [0008] 圖2A-2D示出了根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的多個(gè)存儲裝置。
      [0009] 圖3示出了根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的存儲模塊。
      [0010] 圖4A-4B示出了根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的多個(gè)流程圖。
      [0011] 圖5A-5C不出了根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的多個(gè)不例。
      [0012] 圖6示出了根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的流程圖。
      [0013] 圖7A-7C示出了根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的多個(gè)示例。

      【具體實(shí)施方式】 本發(fā)明的具體實(shí)施例現(xiàn)在將被結(jié)合附圖詳細(xì)描述。在下述的對于本發(fā)明的實(shí)施例的詳 細(xì)描述中,許多具體細(xì)節(jié)被闡述以提供對于本發(fā)明的透徹的理解。然而,對于本領(lǐng)域的普通 技術(shù)人員來說,很明顯本發(fā)明可以以不具備這些具體細(xì)節(jié)的方式被實(shí)現(xiàn)。在其他的示例中, 公知的特征沒有被具體描述,以避免這些描述被不必要的復(fù)雜化。
      [0014] 在下述對于附圖1A-7C的描述中,結(jié)合一附圖所描述的任何組件,在本發(fā)明 的不同的實(shí)施例中,可以等效于結(jié)合任何其他附圖而描述的一個(gè)或多個(gè)被相似命名 (like-named)的組件。為了使得描述簡潔,將不會結(jié)合每一個(gè)附圖而重復(fù)對于這些部 件的描述。因此,在每一個(gè)附圖中這些部件的每一個(gè)(each)和每一個(gè)實(shí)施例(every embodiment)將被以參照的方式引入并被假設(shè)以任意展現(xiàn)在具有一個(gè)或多個(gè)類似命名的部 件的每一個(gè)其他附圖中。此外,按照本發(fā)明的不同的實(shí)施例,一個(gè)附圖中對于這些部件的任 何描述將被解釋為一個(gè)可實(shí)現(xiàn)的可選實(shí)施例,以附加于、結(jié)合于、或者代替結(jié)合任何其他附 圖中對于一個(gè)對應(yīng)的類似命名的部件而描述的實(shí)施例。
      [0015] 總體而言,本發(fā)明的實(shí)施例涉及存儲系統(tǒng)。更具體地說,本發(fā)明的實(shí)施例涉及包括 一個(gè)或多個(gè)存儲裝置的存儲系統(tǒng),每一個(gè)存儲裝置被配置成允許客戶端使用客戶端存儲器 和物理存儲器模塊的存儲器之間的單個(gè)直接存儲器存取(DMA)來將數(shù)據(jù)從客戶端傳送至 存儲裝置,同時(shí)保持存儲裝置能夠控制物理存儲器布局(physical storage layout)并向 其客戶端展示抽象的邏輯布局的能力。該架構(gòu)被稱為零副本(Zer〇-C〇py)DMA,其中除了用 于每一個(gè)讀取或者寫入的唯一 DMA以外,該架構(gòu)中產(chǎn)生數(shù)據(jù)的零副本。具體而言,在本發(fā)明 的一個(gè)或多個(gè)實(shí)施例中,存儲裝置包括存儲模塊,且客戶端能夠使用零副本DMA直接傳送 數(shù)據(jù)至存儲模塊。此外,在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,存儲裝置包括使用零副本DMA直 接將數(shù)據(jù)從存儲模塊傳送到客戶端存儲器的功能。
      [0016] 圖1A-1E揭示了根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的多個(gè)系統(tǒng)。參考圖1A,該 系統(tǒng)包括可操作地連接至存儲裝置(102)的一個(gè)或多個(gè)客戶端(客戶A(100A)、客戶端 M(100M))。
      [0017] 在本發(fā)明的一個(gè)實(shí)施例中,客戶端(100A、100M)對應(yīng)于包括向存儲裝置(102)發(fā) 布讀取請求和/或向存儲裝置(102)發(fā)布寫入請求的功能的任何系統(tǒng)。盡管在圖1A中沒 有示出,客戶端(100AU00M)中的每一個(gè)可包括客戶端處理器和客戶端存儲器。關(guān)于客戶 端中的組件的額外細(xì)節(jié)將在下面的圖1D中描述。在本發(fā)明的一個(gè)實(shí)施例中,客戶端(100A、 100M)被配置成使用下述協(xié)議中的一個(gè)或者多個(gè)來與存儲裝置(102)通信:外圍組件互聯(lián) (PCI)、快速 PCI (PCI-Express,PCIe)、擴(kuò)展 PCI (PCI-eXtended,PCI-X)、快速非易失性存儲 (NVMe)、基于快速PCI架構(gòu)(fabric)的快速非易失性存儲、基于以太網(wǎng)架構(gòu)的快速非易失 性存儲以及基于無限帶寬架構(gòu)(infiniband fabric)的快速非易失性存儲。本領(lǐng)域的技術(shù) 人員將意識到本發(fā)明并不局限于前述的協(xié)議。
      [0018] 在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,如果客戶端執(zhí)行PCI、快速PCI或者NVMe,則該 客戶端包括根組件(root complex)(根組件未示出)。在本發(fā)明的一個(gè)實(shí)施例中,根組件是 將客戶端處理器和客戶端存儲器連接至PCIe架構(gòu)的設(shè)備。在本發(fā)明的一個(gè)實(shí)施例中,根組 件被集成到客戶端處理器中。
      [0019] 在本發(fā)明的一個(gè)實(shí)施例中,PCIe架構(gòu)包括經(jīng)由交換機(jī)(例如圖1D中的客戶端交 換機(jī)(116)和例如圖2A中的交換機(jī)架構(gòu)(206)的交換機(jī)架構(gòu)內(nèi)的交換機(jī))連接的根組件 和端點(diǎn)(endpoint)。在本發(fā)明的一個(gè)實(shí)施例中,端點(diǎn)是除了根組件或者交換機(jī)以外的設(shè)備, 該設(shè)備能發(fā)起PCI交換(例如,讀取請求、寫入請求)或者作為PCI交換的目標(biāo)。
      [0020] 在本發(fā)明的一實(shí)施例中,單個(gè)的客戶端和單個(gè)的存儲裝置可被認(rèn)為是單個(gè)的PCIe 架構(gòu)的一部分。在本發(fā)明的另一個(gè)實(shí)施例中,一個(gè)或者多個(gè)客戶端和一個(gè)或者多個(gè)存儲裝 置的任意組合可被認(rèn)為是單個(gè)PCIe架構(gòu)的一部分。此外,如果存儲裝置中的個(gè)別組件使用 PCIe通信,并且客戶端中的個(gè)別組件(參考圖1D)使用PCIe通信,那么存儲裝置和客戶端 中的所有組件都可被認(rèn)為是單個(gè)PCIe架構(gòu)的一部分。本領(lǐng)域的技術(shù)人員將意識到本發(fā)明 的不同實(shí)施例可使用其他類型的架構(gòu)實(shí)現(xiàn)而不脫離本發(fā)明的范圍。
      [0021] 繼續(xù)參考圖1A,在本發(fā)明的一個(gè)實(shí)施例中,存儲裝置(102)是包括易失存儲器和 永久存儲器的系統(tǒng),并且該系統(tǒng)被配置成服務(wù)來自一個(gè)或多個(gè)客戶端(100AU00M)的讀取 請求和/或?qū)懭胝埱蟆4鎯ρb置(102)的不同實(shí)施例以下在圖2A-2D中被描述。
      [0022] 參考圖1B,圖1B示出了一系統(tǒng),其中客戶端(100A、100M)連接至多個(gè)存儲裝置 (104A、104B、104C、104D),該多個(gè)存儲裝置被布置成網(wǎng)格組態(tài)(mesh configuration)(在 圖1B中被標(biāo)記為存儲裝置網(wǎng)格(104))。如圖1B所示,存儲裝置網(wǎng)格(104)被示為全連接 (full connected)網(wǎng)格組態(tài),也就是說,存儲裝置網(wǎng)格(104)中的每一個(gè)存儲裝置(104A、 104B、104C、104D)與存儲裝置網(wǎng)格(104)中每一個(gè)其他存儲裝置(104A、104B、104C、104D) 直接連接。在本發(fā)明的一個(gè)實(shí)施例中,每一個(gè)客戶端(100A、100M)可直接連接至存儲裝置 網(wǎng)格(104)中的一個(gè)或多個(gè)存儲裝置(104A、104B、104C、104D)。本領(lǐng)域的技術(shù)人員將意識 到存儲裝置網(wǎng)格可使用其他網(wǎng)格組態(tài)(例如,部分連接網(wǎng)格)實(shí)現(xiàn)而不脫離本發(fā)明的范圍。
      [0023] 參考圖1C,圖1C示出了一個(gè)系統(tǒng),其中客戶端(100AU00M)連接至多個(gè)存儲裝置 (104A、104B、104C、104D),該多個(gè)存儲裝置被安排成扇出組態(tài)(fan-out configuration)。 在該組態(tài)中,每一個(gè)客戶端(100A、100M)連接至一個(gè)或多個(gè)存儲裝置(104A、104B、104C、 104D);然而,各個(gè)存儲裝置(104A、104B、104C、104D)之間并不互相通信。
      [0024] 參考圖1D,圖1D示出了根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的客戶端。如圖1D所示, 客戶端(110)包括客戶端處理器(112)、客戶端存儲器(114)和客戶端交換機(jī)(116)。這些 組件中的每一個(gè)在下面進(jìn)行描述。
      [0025] 在本發(fā)明的一個(gè)實(shí)施例中,客戶端處理器(112)是被配置成執(zhí)行指令的具有單個(gè) 核心或者多個(gè)核心的一組電子電路。在本發(fā)明的一個(gè)實(shí)施例中,客戶端處理器(112)可使 用復(fù)雜指令集(CISC)體系結(jié)構(gòu)或精簡指令集(RISC)體系結(jié)構(gòu)實(shí)現(xiàn)。在本發(fā)明的一個(gè)或多 個(gè)實(shí)施例中,客戶端處理器(112)包括(由PCIe協(xié)議定義的)根組件(未示出)。在本發(fā)明 的一個(gè)實(shí)施例中,如果客戶端(110)包括根組件(根組件可被集成至客戶端處理器(112)), 則客戶端存儲器(114)經(jīng)由根組件連接至客戶端處理器(112)?;蛘撸蛻舳舜鎯ζ鳎?14) 使用其他點(diǎn)對點(diǎn)連接機(jī)制直接連接至客戶端處理器(112)。在本發(fā)明的一個(gè)實(shí)施例中,客戶 端存儲器(114)對應(yīng)于任何易失存儲器,包括但不限于,動(dòng)態(tài)隨機(jī)存取存儲器(DRAM)、同步 動(dòng)態(tài)隨機(jī)存取存儲器(SDRAM)、單數(shù)據(jù)速率同步動(dòng)態(tài)隨機(jī)存取存儲器(SDR SDRAM)、雙倍數(shù) 據(jù)速率同步動(dòng)態(tài)隨機(jī)存取存儲器(DDR SDRAM)。
      [0026] 在本發(fā)明的一個(gè)實(shí)施例中,客戶端存儲器(114)包括下述的一個(gè)或者多個(gè):用于 客戶端處理器的提交隊(duì)列和用于客戶端處理器的完成隊(duì)列。在本發(fā)明的一個(gè)實(shí)施例中,存 儲裝置存儲器包括一個(gè)或多個(gè)用于客戶端處理器的提交隊(duì)列,這些提交隊(duì)列對于客戶端是 通過架構(gòu)(fabric)可見的,而客戶端存儲器包括一個(gè)或多個(gè)用于客戶端處理器的完成隊(duì) 列,這些完成隊(duì)列對于存儲裝置是通過架構(gòu)可見的。在本發(fā)明的一個(gè)實(shí)施例中,用于客戶端 處理器的提交隊(duì)列被用于向客戶端處理器發(fā)送命令(例如,讀取請求、發(fā)送請求)。在本發(fā) 明的一個(gè)實(shí)施例中,用于客戶端處理器的完成隊(duì)列被用于發(fā)信號通知(signal)客戶端處 理器由客戶端處理器發(fā)布給另一個(gè)實(shí)體的命令已經(jīng)被完成。本發(fā)明的實(shí)施例可使用其他通 知機(jī)制(notification mechanism)實(shí)現(xiàn)而不脫離本發(fā)明的范圍。
      [0027] 在本發(fā)明的一個(gè)實(shí)施例中,客戶端交換機(jī)(116)僅僅包括一個(gè)單個(gè)的交換機(jī)。在 本發(fā)明的另一個(gè)實(shí)施例中,客戶端交換機(jī)(116)包括數(shù)個(gè)互聯(lián)的交換機(jī)。如果客戶端交換 機(jī)(116)包括數(shù)個(gè)交換機(jī),那么每一個(gè)交換機(jī)可以與每一個(gè)其他交換機(jī)連接,可以與交換 機(jī)架構(gòu)的交換機(jī)子集連接,或者僅僅連接至一個(gè)其他的交換機(jī)。在本發(fā)明的一個(gè)實(shí)施例中, 客戶端交換機(jī)(116)中的每一個(gè)交換機(jī)是硬件和邏輯的組合(比如可以使用集成電路來實(shí) 現(xiàn)),(如由(多個(gè))協(xié)議所定義的,交換機(jī)架構(gòu)執(zhí)行)該組合被配置成允許數(shù)據(jù)和消息在 客戶端(110)和存儲裝置(未示出)之間傳送。
      [0028] 在本發(fā)明的一個(gè)實(shí)施例中,當(dāng)客戶端(100AU00M)執(zhí)行一個(gè)或多個(gè)下述協(xié)議: PCI、PCIe或者PCI-X時(shí),客戶端交換機(jī)(116)是PCI交換機(jī)。
      [0029] 在這些實(shí)施例中,客戶端交換機(jī)(116)包括數(shù)個(gè)端口,每一個(gè)端口可被配置成透 明橋或非透明橋。實(shí)現(xiàn)為透明橋的端口允許根組件繼續(xù)發(fā)現(xiàn)(直接或者間接)連接至該端 口的設(shè)備(可以是其他根組件、交換機(jī)、PCI橋或者端點(diǎn))。相比之下,當(dāng)根組件遇到被實(shí)現(xiàn) 為非透明橋的端口時(shí),根組件不能繼續(xù)發(fā)現(xiàn)連接至該端口的設(shè)備,進(jìn)而,根組件將這種端口 作為端點(diǎn)處理。
      [0030] 當(dāng)端口被實(shí)現(xiàn)為非透明橋時(shí),位于非透明橋任意一側(cè)的設(shè)備可僅使用電子郵箱系 統(tǒng)和(由客戶端交換機(jī)實(shí)現(xiàn)的)門鈴中斷(doorbell interrupt)進(jìn)行通信。門鈴中斷允 許位于非透明橋一側(cè)的處理器向位于非透明橋另一側(cè)的處理器發(fā)布中斷。此外,電子郵箱 系統(tǒng)包括一個(gè)或多個(gè)可供交換機(jī)架構(gòu)任一側(cè)的處理器讀或者寫的寄存器。前述的寄存器使 得位于客戶端交換機(jī)任一側(cè)的處理器能跨越非透明橋而傳送控制和狀態(tài)信息。
      [0031] 在本發(fā)明的一實(shí)施例中,為了從非透明橋一側(cè)的一個(gè)設(shè)備發(fā)送PCI交換 (transaction)至非透明橋另一側(cè)的一個(gè)設(shè)備,PCI交換必須被尋址至實(shí)現(xiàn)該非透明橋的 端口。在接收到PCI交換之后,客戶端交換機(jī)執(zhí)行地址翻譯(使用直接地址翻譯機(jī)制或者 基于查找表的翻譯機(jī)制)。獲得的地址接下來被用于將分組路由至非透明橋另一側(cè)的合適 的設(shè)備。
      [0032] 在本發(fā)明的一個(gè)實(shí)施例中,客戶端交換機(jī)(116)被配置以使得客戶端存儲器 (114)的至少一部分能夠由存儲裝置直接存取。換句話說,在客戶端交換機(jī)一側(cè)的存儲裝置 可經(jīng)由客戶端交換機(jī)直接存取客戶端交換機(jī)另一側(cè)的客戶端存儲器。
      [0033] 在本發(fā)明的一個(gè)實(shí)施例中,客戶端交換機(jī)(116)包括DMA引擎(118)。在本發(fā)明的 一個(gè)實(shí)施例中,DMA引擎(118)可由連接至客戶端交換機(jī)的客戶端處理器或者存儲裝置編 程。如上面所討論的,客戶端交換機(jī)(116)被配置以使得客戶端存儲器(114)的至少一部 分能夠由存儲裝置或者存儲模塊直接存取。因此,DMA引擎(118)可被編程以從客戶端存儲 器中能夠由存儲裝置存取的那部分中的地址讀取數(shù)據(jù),以及直接將上述數(shù)據(jù)的副本寫入存 儲裝置或者存儲模塊的存儲器中。此外,DMA引擎(118)可被編程以從存儲裝置中讀取數(shù) 據(jù)并將上述數(shù)據(jù)的副本直接寫入客戶端存儲器中能夠由存儲裝置存取的那部分中的地址。
      [0034] 在本發(fā)明的一實(shí)施例中,DMA引擎(118)支持組播。在這些實(shí)施例中,存儲裝置中 的處理器(參考圖2A)可創(chuàng)建組播組,其中組播組中的每一個(gè)成員對應(yīng)存儲裝置的存儲器 中的唯一目的地地址。組播組中的每一個(gè)成員與一個(gè)描述符相關(guān)聯(lián),該描述符指定:(i)目 的地地址;(ii)源地址;(iii)傳送尺寸字段;以及(iv)控制字段。用于每一個(gè)描述符的 源地址保持不變,而用于每一個(gè)描述符的目的地地址是變化的。一旦創(chuàng)建組播組,任何通過 交換機(jī)且以組播組地址為目標(biāo)的數(shù)據(jù)傳送,包括由DMA引擎發(fā)起的傳送,將數(shù)據(jù)的一致副 本置于所有與組播組相關(guān)聯(lián)的目的地端口。在本發(fā)明的一個(gè)實(shí)施例中,交換機(jī)并行處理所 有的組播組描述符。
      [0035] 繼續(xù)討論圖1D,本領(lǐng)域的技術(shù)人員將會意識到雖然圖1D示出了位于客戶端(110) 內(nèi)的客戶端交換機(jī)(116),客戶端交換機(jī)(116)可位于該客戶端之外,這并不脫離本發(fā)明的 范圍。此外,本領(lǐng)域的技術(shù)人員將會意識到DMA引擎(118)可位于客戶端交換機(jī)(116)之 夕卜,這也不脫離本發(fā)明的范圍。
      [0036] 參考圖1E,圖1E示出了一個(gè)系統(tǒng),其中客戶端(100AU00M)經(jīng)由客戶端交換機(jī) (108)連接到數(shù)個(gè)被布置成網(wǎng)格組態(tài)(在圖1E中被標(biāo)記為存儲裝置網(wǎng)格(104))的存儲裝 置(104A、104B、104C、104D)。在圖1E所示的實(shí)施例中,每一個(gè)客戶端(100A、100M)并不包 括其自己的客戶端交換機(jī),相反,所有的客戶端共享一個(gè)客戶端交換機(jī)(108)。如圖1E所 示,存儲裝置網(wǎng)格(104)被示為全連接網(wǎng)格組態(tài),也就是說,存儲裝置網(wǎng)格(104)中的每一 個(gè)存儲裝置(l〇4A、104B、104C、104D)直接連接至存儲裝置網(wǎng)格(104)中的每一個(gè)其他存儲 裝置(104A、104B、104C、104D)。在本發(fā)明的一個(gè)實(shí)施例中,客戶端交換機(jī)(108)可直接連接 至存儲裝置網(wǎng)格(104)中的一個(gè)或多個(gè)存儲裝置(104A、104B、104C、104D)。本領(lǐng)域的技術(shù) 人員將會意識到存儲裝置網(wǎng)格可以采用其他網(wǎng)格組態(tài)(例如,部分連接組態(tài))實(shí)現(xiàn)而不脫 離本發(fā)明的范圍。
      [0037] 盡管在圖1E中沒有示出,每一個(gè)客戶端可包括其自己的客戶端交換機(jī)(如在圖 1D中示出的),但客戶端交換機(jī)可使用交換機(jī)架構(gòu)(下面會定義)而連接至存儲裝置網(wǎng)格 (104)。
      [0038] 本領(lǐng)域的技術(shù)人員將會意識到雖然圖1A-1E所示的存儲裝置連接至有限數(shù)量的 客戶端,存儲裝置可以連接至任意數(shù)量的客戶端而并不脫離本發(fā)明的范圍。本領(lǐng)域的技 術(shù)人員將會意識到圖1A-1E示出了不同的系統(tǒng)組態(tài),本發(fā)明并不被局限于前述的系統(tǒng)組態(tài) 中。此外,本領(lǐng)域的技術(shù)人員將會意識到客戶端(不考慮系統(tǒng)的組態(tài))可使用交換機(jī)架構(gòu) (沒有示出)被連接至存儲裝置(下面會進(jìn)行描述)而不脫離本發(fā)明的范圍。
      [0039] 圖2A-2D示出了根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的多個(gè)存儲裝置的實(shí)施例。參考 圖2A,存儲裝置包括控制模塊(200)和存儲模塊組(202)。這些組件中的每一個(gè)將在下面 被描述??傮w而言,控制模塊(200)被配置成管理來自一個(gè)或多個(gè)客戶端的讀取和寫入請 求的服務(wù)。具體而言,控制模塊被配置成通過Ι0Μ(下面會討論)從一個(gè)或多個(gè)客戶端接收 請求,處理該請求(可包括將該請求發(fā)送至存儲模塊),并在請求被服務(wù)后向客戶端提供響 應(yīng)。關(guān)于控制模塊中的組件的其他細(xì)節(jié)包括在下面的描述中。此外,控制模塊關(guān)于讀取和 寫入請求的服務(wù)的操作將在下面結(jié)合附圖4A-7C進(jìn)行描述。
      [0040] 繼續(xù)對于圖2A的討論,在本發(fā)明的一個(gè)實(shí)施例中,控制模塊(200)包括輸入/輸 出模塊(Ι0Μ) (204)、交換機(jī)架構(gòu)(206)、處理器(208)、存儲器(210)以及,可選的,現(xiàn)場可 編程門陣列(FPGA) (212)。在本發(fā)明的一個(gè)實(shí)施例中,I0M(204)是客戶端(圖1A-1E中的 100A、100M)和存儲裝置中的其他組件之間的物理接口(physical interface)。Ι0Μ支持 一個(gè)或者多個(gè)下述協(xié)議:PCI、PCIe、PCI-X、以太網(wǎng)(包括但不限于,由IEEE802.3a-802.3bj 所定義的各種標(biāo)準(zhǔn))、無限帶寬(Infiniband)、融合以太網(wǎng)上的遠(yuǎn)程直接存儲器存取(RDMA) (RoCE)。本領(lǐng)域的技術(shù)人員將會意識到Ι0Μ可以使用上述所列的協(xié)議之外的協(xié)議實(shí)現(xiàn)而不 脫離本發(fā)明的范圍。
      [0041] 繼續(xù)對于圖2A的討論,交換機(jī)架構(gòu)(206)僅包括單個(gè)的交換機(jī)。在本發(fā)明的另一 個(gè)實(shí)施例中,交換機(jī)架構(gòu)(206)包括數(shù)個(gè)互聯(lián)的交換機(jī)。如果交換機(jī)架構(gòu)(206)包括多個(gè) 交換機(jī),那么每一個(gè)交換機(jī)可以連接至每一個(gè)其他交換機(jī),可以連接至交換機(jī)架構(gòu)的交換 機(jī)子集,或者可以僅僅連接至交換機(jī)架構(gòu)中的另一個(gè)交換機(jī)。在本發(fā)明的一個(gè)實(shí)施例中, 交換機(jī)架構(gòu)(206)中的每一個(gè)交換機(jī)是硬件和邏輯的組合(比如可以使用集成電路來實(shí) 現(xiàn)),(如由(多個(gè))協(xié)議所定義的,交換機(jī)架構(gòu)執(zhí)行)該組合被配置成將存儲裝置中的各 個(gè)組件連接在一起并在各個(gè)連接的組件之間(使用該邏輯)路由分組。在本發(fā)明的一個(gè) 實(shí)施例中,交換機(jī)架構(gòu)(206)是物理連接至Ι0Μ(204)、處理器(208)、存儲模塊組(202)以 及,如果存在的話,F(xiàn)PGA(212)。在本發(fā)明的一個(gè)實(shí)施例中,控制模塊(200)中的所有組件間 (inter-component)通信(除了處理器(208)和存儲器(210)之間的通信)都通過交換機(jī) 架構(gòu)(206)。此外,控制模塊(200)和存儲模塊組(202)之間的所有通信都通過交換機(jī)架構(gòu) (206)。在本發(fā)明的一個(gè)實(shí)施例中,交換機(jī)架構(gòu)(206)是使用PCI協(xié)議(例如,PCI、PCIe、 PCI-X或者另一個(gè)PCI協(xié)議)實(shí)現(xiàn)。在這些實(shí)施例中,所有通過交換機(jī)架構(gòu)(206)的通信使 用所對應(yīng)的PCI協(xié)議。
      [0042] 在本發(fā)明的一個(gè)實(shí)施例中,如果交換機(jī)架構(gòu)實(shí)現(xiàn)PCI協(xié)議,則交換機(jī)架構(gòu)(206)包 括用于處理器的端口(或者,更具體地說,用于集成在處理器(208)中的根組件或者用于 連接至處理器的根組件的端口)、一個(gè)或多個(gè)用于存儲模塊組(202)中的存儲模塊(214A、 214N)(參考圖3)的端口、用于FPGA(212)(如果存在的話)的端口以及用于I0M(204)的端 口。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,每一個(gè)上述的端口可被配置為透明橋或者非透明橋 (如上面討論的)。本領(lǐng)域的技術(shù)人員將會意識到雖然交換機(jī)架構(gòu)(206)是關(guān)于PCI實(shí)現(xiàn) 而描述,交換機(jī)架構(gòu)(206)可以使用其他協(xié)議實(shí)現(xiàn)而不脫離本發(fā)明的范圍。
      [0043] 在本發(fā)明的一個(gè)實(shí)施例中,交換機(jī)架構(gòu)(206)中的至少一個(gè)交換機(jī)被配置為實(shí)現(xiàn) 組播。更具體地說,在本發(fā)明的一個(gè)實(shí)施例中,處理器(208)被配置為產(chǎn)生組播組,其中組 播組包括兩個(gè)或多個(gè)成員,每一個(gè)成員指定存儲器(210)和/或存儲模塊(214A、214N)中 的地址。當(dāng)組播組被創(chuàng)建時(shí),組播組與一組播地址相關(guān)。為了實(shí)現(xiàn)組播,交換機(jī)架構(gòu)中的至 少一個(gè)交換機(jī)被配置成:當(dāng)接收到指定組播地址作為目的地地址的寫入時(shí),交換機(jī)被配置 成為組播組中的每一個(gè)成員產(chǎn)生新的寫入,并將這些寫入發(fā)布至存儲裝置中適當(dāng)?shù)牡刂贰?在本發(fā)明的一個(gè)實(shí)施例中,用于由交換機(jī)產(chǎn)生的每一個(gè)寫入的地址是通過在組播地址上增 加特定的偏移而確定。
      [0044] 繼續(xù)對于圖2A的討論,處理器(208)是被配置成執(zhí)行指令的具有單個(gè)核心或者 多個(gè)核心的一組電子電路。在本發(fā)明的一個(gè)實(shí)施例中,處理器(208)可使用復(fù)雜指令集 (CISC)架構(gòu)或精簡指令集(RISC)架構(gòu)實(shí)現(xiàn)。在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,處理器 (208)包括(由PCIe協(xié)議定義的)根組件。在本發(fā)明的一個(gè)實(shí)施例中,如果控制模塊(200) 包括根組件(根組件可被集成在處理器(208)中),那么存儲器(210)經(jīng)由根組件連接至處 理器(208)?;蛘?,存儲器(210)使用其他點(diǎn)對點(diǎn)連接機(jī)制直接連接至處理器(208)。在本 發(fā)明的一個(gè)實(shí)施例中,存儲器(210)對應(yīng)于任何易失存儲器,包括但不限于,動(dòng)態(tài)隨機(jī)存取 存儲器(DRAM)、同步動(dòng)態(tài)隨機(jī)存取存儲器(SDRAM)、單數(shù)據(jù)速率同步動(dòng)態(tài)隨機(jī)存取存儲器 (SDR SDRAM)、雙倍數(shù)據(jù)速率同步動(dòng)態(tài)隨機(jī)存取存儲器(DDR SDRAM)。
      [0045] 在本發(fā)明的一個(gè)實(shí)施例中,處理器(208)被配置成創(chuàng)建并更新存儲器內(nèi) (in-memory)數(shù)據(jù)結(jié)構(gòu)(未示出),其中存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)存儲在存儲器(210)中。在本 發(fā)明的一個(gè)實(shí)施例中,存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)包括在存儲模塊的集合中在邏輯地址和物理地址 之間(直接或者間接)的映射。在本發(fā)明的一個(gè)實(shí)施例中,邏輯地址是從客戶端的角度展 現(xiàn)的數(shù)據(jù)所駐留的地址。在本發(fā)明的一個(gè)實(shí)施例中,邏輯地址是(或者包括)對η元組 (n-tuple)應(yīng)用散列(hash)函數(shù)(例如,SHA-UMD-5等等)而產(chǎn)生的散列值。在本發(fā)明 的一個(gè)實(shí)施例中,η元組是〈對象ID,偏移> (〈object ID, offset〉),其中對象ID定義文件 而偏移定義相對于該文件的起始地址的位置。在本發(fā)明的另一個(gè)實(shí)施例中,η元組是〈對 象ID,偏移,出生時(shí)間> (〈object ID, off set, birth time〉),其中出生時(shí)間對應(yīng)于(使用對 象ID標(biāo)識)文件被創(chuàng)建的時(shí)間?;蛘?,邏輯地址可包括邏輯對象ID和邏輯字節(jié)(byte)地 址,或者邏輯對象ID和邏輯地址偏移。在本發(fā)明的另一個(gè)實(shí)施例中,邏輯地址包括對象ID 和偏移。本領(lǐng)域的技術(shù)人員將會意識到多個(gè)邏輯地址可被映射到單個(gè)的物理地址,因此邏 輯地址并不被限制于上述的實(shí)施例。
      [0046] 在本發(fā)明的一個(gè)實(shí)施例中,物理地址可對應(yīng)于(i)存儲器(210)中的位置、(ii)彎 曲存儲器(vaulted memory)(例如圖3中的324)中的位置、(iii)固態(tài)存儲器模塊(例如 圖3中的330A)中的位置。在本發(fā)明的一個(gè)實(shí)施例中,如果在存儲裝置中存在數(shù)據(jù)的多個(gè) 副本,則存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)可將單個(gè)的散列值映射到多個(gè)物理地址。
      [0047] 在本發(fā)明的一個(gè)實(shí)施例中,存儲器(210)包括下述中的一個(gè)或多個(gè):用于處理器 的提交隊(duì)列、用于處理器的完成隊(duì)列、用于存儲裝置中的每一個(gè)存儲模塊的提交隊(duì)列和用 于存儲裝置中的每一個(gè)存儲模塊的完成隊(duì)列。在本發(fā)明的一個(gè)實(shí)施例中,用于處理器的提 交隊(duì)列被用于向處理器發(fā)送命令(例如,讀取請求、寫入請求)。在本發(fā)明的一個(gè)實(shí)施例中, 用于處理器的完成隊(duì)列被用于發(fā)信號通知(signal)處理器由處理器發(fā)布給另一個(gè)實(shí)體的 命令已經(jīng)被完成。用于存儲模塊的提交和完成隊(duì)列以類似的方式運(yùn)作。
      [0048] 在本發(fā)明的一個(gè)實(shí)施例中,(經(jīng)由交換機(jī)架構(gòu))處理器被配置為將各種類型的處 理卸載(offload)至FPGA (212)。在本發(fā)明的一個(gè)實(shí)施例中,F(xiàn)PGA (212)包括為正寫入至 存儲模塊和/或正從存儲模塊中讀取的數(shù)據(jù)計(jì)算校驗(yàn)和的功能。此外,為了使用RAID方案 (例如RAID 2-RAID 6)將數(shù)據(jù)存儲在存儲模塊中,F(xiàn)PGA(212)可包括計(jì)算P和/或Q奇偶 校驗(yàn)信息的功能,和/或,F(xiàn)PGA(212)還可包括執(zhí)行各種計(jì)算的功能,這些計(jì)算是恢復(fù)采用 RAID方案(例如RAID 2-RAID 6)保存但被損壞的數(shù)據(jù)所需要的。在本發(fā)明的一個(gè)實(shí)施例 中,存儲模塊組(202)包括一個(gè)或多個(gè)存儲模塊(214A、214N),每一個(gè)存儲模塊被配置成存 儲數(shù)據(jù)。存儲模塊在下面的圖3中描述。
      [0049] 在本發(fā)明的一個(gè)實(shí)施例中,處理器(208)被配置成對系統(tǒng)中的一個(gè)或多個(gè)DMA引 擎編程。例如,處理器(208)被配置成對客戶端交換機(jī)(參見圖1D)中的DMA引擎編程。處 理器(208)也可被配置成對存儲模塊(參考圖3)中的DMA引擎編程。在本發(fā)明的一個(gè)實(shí) 施例中,對客戶端交換機(jī)中的DMA引擎編程可包括創(chuàng)建組播組和產(chǎn)生用于組播組中的每一 個(gè)成員的描述符。
      [0050] 轉(zhuǎn)到圖2B,圖2B示出了按照本發(fā)明的一個(gè)或多個(gè)實(shí)施例的存儲裝置。該存儲裝 置包括控制模塊(216)和至少兩個(gè)存儲模塊組(236、238)。控制模塊(216)包括交換機(jī)架 構(gòu)(234),交換機(jī)架構(gòu)直接連接至IOM A (218)、IOM B (220)、處理器A (222)、處理器B (224)、 FPGA A (230)(如果存在的話)、FPGA B (232)(如果存在的話)、存儲模塊組A (236)中的存 儲模塊(236A、236N)和存儲模塊組B(238)中的存儲模塊(238A、238N)。所有上述組件之間 的通信(除了處理器A(222)和處理器B(224)之間的通信)都通過交換機(jī)架構(gòu)(234)。在 本發(fā)明的一個(gè)實(shí)施例中,控制模塊(216)內(nèi)的處理器(222、224)能夠使用諸如丨nte_)快速 通道互聯(lián)(Intel? QuickPath Interconnect)的點(diǎn)對點(diǎn)互聯(lián)直接通信。本領(lǐng)域的技術(shù)人員 將會意識到其他點(diǎn)對點(diǎn)通信機(jī)制可被用于允許處理器(222、224)之間的直接通信而不脫 離本發(fā)明的范圍。
      [0051] 繼續(xù)參考圖2B,在本發(fā)明的一個(gè)實(shí)施例中,控制模塊(216)與圖2A中的控制模塊 (200)基本上相似。在本發(fā)明的一個(gè)實(shí)施例中,交換機(jī)架構(gòu)(234)與圖2A中的交換機(jī)架構(gòu) (206)基本上相似。在本發(fā)明的一個(gè)實(shí)施例中,每一個(gè)處理器(222、224)與圖2A中的處理 器(208)基本上相似。在本發(fā)明的一個(gè)實(shí)施例中,存儲器(226、228)與圖2A中的存儲器 (210)基本上相似。在本發(fā)明的一個(gè)實(shí)施例中,I0M(218、220)與圖2A中的I0M(204)基本 上相似。在本發(fā)明的一個(gè)實(shí)施例中,F(xiàn)PGA(230、232)與圖2A中的FPGA(212)基本上相似。 最后,存儲模塊組(236、238)與圖2A中的存儲模塊組(202)基本上相似。
      [0052] 在本發(fā)明的一個(gè)實(shí)施例中,控制模塊(216)中的兩個(gè)Ι0Μ (218、220)使得用于控制 模塊(216)的I/O帶寬(相對于具有單個(gè)Ι0Μ的控制模塊的I/O帶寬)加倍。此外,添加 第二Ι0Μ(或者額外的Ι0Μ)增加了可連接至給定的控制模塊的客戶端的數(shù)量,以及,通過擴(kuò) 展,增加了可連接至存儲裝置的客戶端的數(shù)量。在本發(fā)明的一個(gè)實(shí)施例中,使用交換機(jī)架構(gòu) (234)來處理各個(gè)相連接的組件之間的通信(如上面所描述的)允許每一個(gè)處理器(222、 224)(經(jīng)由交換機(jī)架構(gòu)(234))直接存取連接至該交換機(jī)架構(gòu)(234)的所有的FPGA(230、 232)和所有的存儲模塊(236A、236N、238A、238N)。
      [0053] 參考圖2C,圖2C示出了一存儲裝置,該存儲裝置包括(通過交換機(jī)架構(gòu)(246))連 接至存儲模塊組(256、258、260、262)中的多個(gè)存儲模塊(未示出)的控制模塊(240)。如 圖2C所示,存儲模塊(240)包括兩個(gè)Ι0Μ (242、244)、兩個(gè)處理器(248、250)和存儲器(252、 254)。在本發(fā)明的一個(gè)實(shí)施例中,控制模塊(240)中的所有組件經(jīng)由交換機(jī)架構(gòu)(246)通 信。此外,處理器(248、250)可使用交換機(jī)架構(gòu)(246)或者直接連接(如圖2C所示)而與 彼此通信。在本發(fā)明的一個(gè)實(shí)施例中,控制模塊(240)中的處理器(248、250)可使用諸如 丨ntel?快速通道互聯(lián)(Intel? QuickPath Interconnect)的點(diǎn)對點(diǎn)互聯(lián)直接通信。本領(lǐng)域 的技術(shù)人員將會意識到其他點(diǎn)對點(diǎn)通信機(jī)制可被用于處理器(248、250)之間的直接通信 而不脫離本發(fā)明的范圍。
      [0054] 在本發(fā)明的一個(gè)實(shí)施例中,處理器A (248)被配置成主要處理涉及存儲模塊組A和 B(256、258)的存儲和提?。╮etrieval)數(shù)據(jù)的請求,而處理器B(250)被配置成主要處理 涉及存儲模塊組C和D(260、262)的存儲和提取(retrieval)數(shù)據(jù)的請求。然而,處理器 (248、250)被配置成(經(jīng)由交換機(jī)架構(gòu)(246))與所有的存儲模塊組(256、258、260、262)通 信。這種組態(tài)使得控制模塊(240)能夠擴(kuò)展處理之間的I/O請求的處理,和/或,提供內(nèi)置 的冗余度來處置其中一個(gè)處理器失效的情況。
      [0055] 繼續(xù)參考圖2C,在本發(fā)明的一個(gè)實(shí)施例中,控制模塊(240)基本上與圖2A中的控 制模塊(200)相似。在本發(fā)明的一個(gè)實(shí)施例中,交換機(jī)架構(gòu)(246)基本上與圖2A中的交換 機(jī)架構(gòu)(206)相似。在本發(fā)明的一個(gè)實(shí)施例中,每一個(gè)處理器(248、250)基本上與圖2A中 的處理器(208)相似。在本發(fā)明的一個(gè)實(shí)施例中,存儲器(252、254)基本上與圖2A中的存 儲器(210)相似。在本發(fā)明的一個(gè)實(shí)施例中,Ι0Μ (242、244)基本上與圖2A中的Ι0Μ (204) 相似。最后,存儲模塊組(256、258、260、262)基本上與圖2A中的存儲模塊組(202)相似。
      [0056] 參考圖2D,圖2D示出了包括兩個(gè)控制模塊(264、266)的存儲裝置。每一個(gè)控制 模塊包括 Ι0Μ (296、298、300、302)、處理器(268、270、272、274)、存儲器(276、278、280、282) 和(如果存在的話)??6八(288、290、292、294)。每一個(gè)存儲模塊(264、266)包括交換機(jī)架構(gòu) (284、286),控制模塊內(nèi)的部件經(jīng)由交換機(jī)架構(gòu)通信。
      [0057] 在本發(fā)明的一個(gè)實(shí)施例中,控制模塊中的多個(gè)處理器(268、270、272、274)可使用 諸如Intel?快速通道互聯(lián)(丨ntel? QuickPath Interconnect)的點(diǎn)對點(diǎn)互聯(lián)直接彼此通 信。本領(lǐng)域的技術(shù)人員將會意識到其他點(diǎn)對點(diǎn)通信機(jī)制可被用于允許多個(gè)處理器(268、 270、272、274)之間的直接通信而不脫離本發(fā)明的范圍。此外,控制模塊A中的處理器(268、 270)可經(jīng)由與控制模塊B中的交換機(jī)架構(gòu)(286)的直接連接而與控制模塊B中的組件通 信。類似的,控制模塊B中的處理器(272、274)可經(jīng)由與控制模塊A中的交換機(jī)架構(gòu)(284) 的直接連接而與控制模塊A中的組件通信。
      [0058] 在本發(fā)明的一個(gè)實(shí)施例中,每一個(gè)控制模塊連接至(被標(biāo)記為存儲模塊組(304、 306、308、310)的)各個(gè)存儲模塊。如圖2D所示,每一個(gè)控制模塊可與連接至控制模塊中的 交換機(jī)架構(gòu)的存儲模塊通信。此外,控制模塊A (264)中的處理器可使用交換機(jī)架構(gòu)B (286) 與連接至控制模塊B (266)的存儲模塊通信。類似的,控制模塊B (266)中的處理器可使用 交換機(jī)架構(gòu)A (284)與連接至控制模塊A (264)的存儲模塊通信。
      [0059] 控制模塊之間的互聯(lián)允許存儲控制在整個(gè)存儲裝置上分配I/O負(fù)載而不需要考 慮是哪一個(gè)控制模塊接收了該I/O請求。此外,控制模塊的互聯(lián)使得存儲裝置能夠處理更 大數(shù)量的I/O請求。更進(jìn)一步,控制模塊的互聯(lián)提供在一個(gè)控制模塊(或者其中的一個(gè)或 多個(gè)組件)失效的情況下內(nèi)置的冗余度。
      [0060] 參考圖2B-2D,在本發(fā)明的一個(gè)或多個(gè)實(shí)施例中,存儲器內(nèi)(in-memory)數(shù)據(jù)結(jié) 構(gòu)跨控制模塊中的存儲器被鏡像。在這種情況下,控制模塊中的處理器發(fā)布所必要的命令 來更新存儲裝置中的所有存儲器,使得存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)跨所有的存儲器被鏡像。在這種 方式中,任何處理器可使用其自己的存儲器來確定存儲裝置中數(shù)據(jù)的位置(如上面所討論 的,由η元組定義)。這個(gè)功能允許任何存儲器服務(wù)于任何關(guān)于存儲模塊中數(shù)據(jù)的位置的 I/O請求。此外,通過鏡像存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu),存儲裝置可在其中一個(gè)存儲器失效時(shí)繼續(xù)進(jìn) 行運(yùn)行。
      [0061] 本領(lǐng)域的技術(shù)人員將會意識到雖然圖2A-2D所示的存儲模塊連接至有限數(shù)量的 存儲模塊,該存儲模塊可連接至任意數(shù)量的存儲模塊而不脫離本發(fā)明的范圍。本領(lǐng)域的技 術(shù)人員將會意識到雖然圖2A-2D示出了存儲裝置的不同組態(tài),存儲裝置可使用其他組態(tài)實(shí) 現(xiàn)而不脫離本發(fā)明的范圍。
      [0062] 圖3示出了根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的存儲模塊。存儲模塊(320)包括存 儲模塊控制器(322)、存儲器(324)以及一個(gè)或多個(gè)固態(tài)存儲器模塊(330Α、330Ν)。這些組 件中的每一個(gè)將在下面被描述。
      [0063] 在本發(fā)明的一個(gè)實(shí)施例中,存儲模塊控制器(322)被配置成接收多個(gè)請求,這些 請求從一個(gè)或多個(gè)控制模塊讀取數(shù)據(jù)和/或向一個(gè)或多個(gè)控制模塊寫入數(shù)據(jù)。此外,存儲 模塊控制器(322)被配置成是使用存儲器(324)和/或固態(tài)存儲器模塊(330Α、330Ν)來服 務(wù)于多個(gè)讀取請求和寫入請求。盡管在圖3中沒有示出,存儲模塊控制器(322)可包括DMA 引擎,其中DMA引擎被配置成從存儲器(324)或者從其中一個(gè)固態(tài)存儲器模塊(330A、330N) 讀取數(shù)據(jù),并將數(shù)據(jù)的副本寫入客戶端存儲器(圖ID中的114)中的物理地址。此外,DMA 引擎可被配置成將數(shù)據(jù)從存儲器(324)寫入到一個(gè)或多個(gè)固態(tài)存儲器模塊。在本發(fā)明的一 個(gè)實(shí)施例中,DMA引擎被配置成由處理器(例如圖2A中的208)編程。本領(lǐng)域的技術(shù)人員 將會意識到存儲模塊可包括位于該存儲模塊之外的DMA引擎而不脫離本發(fā)明的范圍。
      [0064] 在本發(fā)明的一個(gè)實(shí)施例中,存儲器(324)對應(yīng)于任何易失存儲器,包括但不限于, 動(dòng)態(tài)隨機(jī)存取存儲器(DRAM)、同步動(dòng)態(tài)隨機(jī)存取存儲器(SDRAM)、單數(shù)據(jù)速率同步動(dòng)態(tài)隨 機(jī)存取存儲器(SDR SDRAM)、雙倍數(shù)據(jù)速率同步動(dòng)態(tài)隨機(jī)存取存儲器(DDR SDRAM)。
      [0065] 在本發(fā)明的一個(gè)實(shí)施例中,存儲器(324)可被邏輯上或者物理上劃分成彎曲存儲 器(vaulted memory) (326)和高速緩存(328)。在本發(fā)明的一個(gè)實(shí)施例中,存儲模塊控制器 (322)被配置成在被通知存儲模塊中的電源失效(或者在另一種存儲模塊可能失電)的情 況下,將彎曲存儲器(326)中的全部內(nèi)容寫入到一個(gè)或多個(gè)固態(tài)存儲器模塊(330A、330N) 中。在本發(fā)明的一個(gè)實(shí)施例中,存儲模塊控制器(322)被配置成在被通知電源失效的時(shí)間 和存儲模塊實(shí)際失電的時(shí)間之間將彎曲存儲器(326)中的全部內(nèi)容寫入到一個(gè)或多個(gè)固 態(tài)存儲器模塊(330A、330N)中。相反,高速緩存(328)中的內(nèi)容在電源失效(或者在另一 種存儲模塊可能失電)的情況下會丟失。
      [0066] 在本發(fā)明的一個(gè)實(shí)施例中,固態(tài)存儲器模塊對應(yīng)于任何使用固態(tài)存儲器來存儲永 久數(shù)據(jù)的數(shù)據(jù)存儲設(shè)備。在本發(fā)明的一個(gè)實(shí)施例中,固態(tài)存儲器可包括但不限于,NAND閃 存(NAND flash)存儲器、N0R閃存(NOR flash)存儲器、磁隨機(jī)存?。∕-RAM)存儲器、自旋 磁隨機(jī)存?。⊿T-MRAM)存儲器、相變存儲器(PCM)、憶阻內(nèi)存(memrisitive memory)或者任 何其他被定義為非易失性存儲級存儲器(SCM)的存儲器。本領(lǐng)域的技術(shù)人員將會意識到本 發(fā)明的實(shí)施例并不限制于存儲級存儲器。
      [0067] 在本發(fā)明的一個(gè)實(shí)施例中,下述的存儲位置是統(tǒng)一地址空間的一部分:(i)經(jīng)由 客戶端交換機(jī)可存取的客戶端存儲器的部分、(ii)控制模塊的存儲器、(iii)存儲模塊中 的存儲器以及(iv)固態(tài)存儲器模塊。因此,從存儲裝置中的處理器的角度看,上述的存儲 位置(在物理上是分離的)表現(xiàn)為物理地址的單一池 (single pool)。換句話說,處理器可 以對存儲在該統(tǒng)一地址空間中的任何物理地址的數(shù)據(jù)發(fā)布讀取和/或?qū)懭胝埱?。上述的?儲位置可被稱為是使用統(tǒng)一地址空間可存取的存儲架構(gòu)(storage fabric)。
      [0068] 在本發(fā)明的一個(gè)實(shí)施例中,統(tǒng)一地址空間部分地(in part)是通過客戶端交換機(jī) 中的非透明橋創(chuàng)建,非透明橋允許控制模塊中的處理器"看見"客戶端存儲器的一部分。因 此,控制模塊中的處理器在其能夠"看見"的客戶端存儲器的部分中執(zhí)行讀取和/或?qū)懭胝?求。
      [0069] 圖4A-4B示出了根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的多個(gè)流程圖。更具體地,圖 4A-4B示出了根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的用于在存儲裝置中存儲數(shù)據(jù)的方法。雖然 流程圖中的各個(gè)步驟被展示并描述為按順序的,本領(lǐng)域的技術(shù)人員將會意識到一些步驟或 者全部的步驟可以以不同的順序執(zhí)行、可被組合或者省略,以及一些或者全部的步驟可被 并行執(zhí)行。在本發(fā)明的一個(gè)實(shí)施例中,圖4A中所示的步驟與圖4B中所示的步驟可被并行 執(zhí)行。
      [0070] 參考圖4A,在步驟400,客戶端向控制模塊中的處理器(圖2A中的208)的提交隊(duì) 列(SQ)寫入一寫入命令(寫入請求)。在本發(fā)明的一個(gè)實(shí)施例中,寫入命令指定客戶端存 儲器中數(shù)據(jù)的邏輯地址(也可以被稱為是"源地址")。在本發(fā)明的一個(gè)實(shí)施例中,寫入命 令在達(dá)到處理器的提交隊(duì)列(SQ)之前通過至少客戶端交換機(jī)和交換機(jī)架構(gòu)。
      [0071] 在步驟402,客戶端向提交隊(duì)列尾部門鈴寄存器(SQ Tail doorbell register)寫 入新的提交隊(duì)列尾部(SQ Tail)。在本發(fā)明的一個(gè)實(shí)施例中,通過向提交隊(duì)列尾部門鈴寄存 器進(jìn)行寫入,客戶端通知處理器在其提交隊(duì)列中有新的命令需要處理。
      [0072] 在步驟404,處理器從提交隊(duì)列獲得該寫入命令。在步驟406,處理器確定將要寫 入該數(shù)據(jù)的物理地址。在本發(fā)明的一個(gè)實(shí)施例中,物理地址對應(yīng)于固態(tài)存儲器模塊中的位 置。在本發(fā)明的一個(gè)實(shí)施例中,處理器選擇兩個(gè)將要寫入該數(shù)據(jù)的副本的物理地址,其中每 一個(gè)物理地址是位于分開的固態(tài)存儲器模塊中。
      [0073] 在步驟408,處理器對DMA引擎編程以向組播地址發(fā)布寫入。在本發(fā)明的一個(gè)實(shí)施 例中,組播地址與組播組相關(guān),其中組播組指定控制模塊的存儲器中的第一存儲位置、第一 彎曲存儲器中的第二存儲位置以及第二彎曲存儲器中的第三存儲位置。在本發(fā)明的一個(gè)實(shí) 施例中,第一彎曲存儲器與包括由處理器指定的物理地址的固態(tài)存儲器模塊是位于同一個(gè) 存儲模塊中。在本發(fā)明的一個(gè)實(shí)施例中,第二從固態(tài)存儲器以相似的方式確定。在本發(fā)明 的一個(gè)實(shí)施例中,為每一個(gè)在步驟406中由處理器確定的物理地址選擇一個(gè)彎曲存儲器位 置。
      [0074] 在步驟410, DMA引擎從客戶端存儲器中的源地址讀取用戶數(shù)據(jù),并將該數(shù)據(jù)寫入 由控制模塊所指向的組播地址。在本發(fā)明的一個(gè)實(shí)施例中,交換機(jī)架構(gòu)中的交換機(jī)與組播 地址相關(guān)。在接收到該地址后,交換機(jī)對組播地址執(zhí)行必要的翻譯以獲得三個(gè)地址一每一 個(gè)對應(yīng)一個(gè)上述的存儲器位置。交換機(jī)然后將用戶數(shù)據(jù)的副本發(fā)送至三個(gè)存儲器位置。本 領(lǐng)域的技術(shù)人員將會意識到執(zhí)行組播的特定交換機(jī)可以根據(jù)交換機(jī)架構(gòu)的實(shí)現(xiàn)而變化。在 該實(shí)施例中,在客戶端與存儲裝置之間僅有一個(gè)寫入被發(fā)布。
      [0075] 在本發(fā)明的另一個(gè)實(shí)施例中,在步驟408,處理器對DMA引擎編程以并行發(fā)布三個(gè) 寫入請求一每一個(gè)對應(yīng)一個(gè)上述的存儲器位置。在該實(shí)施例中,在步驟410, DMA引擎并行 發(fā)布該三個(gè)寫入請求。在該實(shí)施例中,在客戶端和存儲裝置之間有三個(gè)寫入被發(fā)布。
      [0076] 繼續(xù)參考圖4A,在步驟412,處理器更新存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)以反映該數(shù)據(jù)的三個(gè) 副本被存儲在存儲裝置中。在步驟414,處理器將(標(biāo)識處理器的提交隊(duì)列的)提交隊(duì)列標(biāo) 識符(SQ Identifier)和(標(biāo)識由客戶端發(fā)布給處理器的具體寫入命令的)寫入命令標(biāo)識 符(Write Command Identifer)寫入客戶端的完成隊(duì)列(CQ)。
      [0077] 在步驟416,處理器為客戶端處理器產(chǎn)生中斷。在本發(fā)明的一個(gè)實(shí)施例中,處理器 使用由非透明橋提供的門鈴中斷來向客戶端處理器發(fā)布中斷。在步驟418,客戶端處理其完 成隊(duì)列(CQ)中的數(shù)據(jù)。在這一階段,客戶端被通知寫入請求已經(jīng)被處理(serviced)。在步 驟420,一旦客戶端處理完成處于完成隊(duì)列頭部的數(shù)據(jù)時(shí),客戶端向完成隊(duì)列(CQ)頭部門 鈴寫入新的完成隊(duì)列(CQ)頭部。這對于處理器來說,表示在完成隊(duì)列中用于未來提供給客 戶端的通知的下一個(gè)位置。
      [0078] 參考圖4B,在步驟422,控制模塊中的處理器開始從彎曲存儲器向在步驟406中標(biāo) 識的物理地址寫入數(shù)據(jù)。在本發(fā)明的一個(gè)實(shí)施例中,控制模塊中的處理器對存儲模塊控制 器中的DMA引擎編程,以從彎曲存儲器中讀取數(shù)據(jù)并將數(shù)據(jù)的副本寫入固態(tài)存儲器模塊中 的物理地址。
      [0079] 在步驟424,延續(xù)步驟422,控制模塊中的處理器請求彎曲存儲器中對應(yīng)于在步驟 422中被寫入至固定存儲器模塊的數(shù)據(jù)的所有副本被移除。在步驟426,對于移除的確認(rèn)由 每一個(gè)在它們各自的彎曲存儲器中包括(在步驟410被寫入的)數(shù)據(jù)的副本的存儲模塊發(fā) 送至控制模塊中的處理器。
      [0080] 圖5A-5C示出了在根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的存儲裝置中存儲數(shù)據(jù)的示 例。該示例并不意圖限制發(fā)明的范圍。此外,為了清楚的目的,在圖5A-5C中客戶端和存儲 裝置中的各個(gè)部件被省略。
      [0081] 轉(zhuǎn)到圖5A,考慮客戶端(500)發(fā)布請求以將(由黑色圈所標(biāo)記)的數(shù)據(jù)寫入存儲 裝置的情況。響應(yīng)于該請求,控制模塊(504)中的處理器(514)確定數(shù)據(jù)的第一副本應(yīng)當(dāng) 被寫入存儲模塊A(518)中的固態(tài)存儲器模塊A(526)中的第一物理位置,而數(shù)據(jù)的第二副 本應(yīng)當(dāng)被寫入存儲模塊B (520)中的固態(tài)存儲器模塊B (528)中的第二物理位置。
      [0082] 根據(jù)該判斷,處理器(514)創(chuàng)建具有三個(gè)成員的組播組。第一成員具有彎曲存儲 器A(522)中的目的地地址,第二成員具有彎曲存儲器B(524)中的目的地地址,而第三成員 具有存儲器(512)中的目的地地址。處理器(514)之后對交換機(jī)架構(gòu)(516)中的交換機(jī) (未示出)編程以實(shí)現(xiàn)該組播組。
      [0083] DMA引擎繼續(xù)向與組播組相關(guān)聯(lián)的組播地址發(fā)布寫入。該寫入被發(fā)送至交換機(jī)架 構(gòu)并最終抵達(dá)實(shí)現(xiàn)組播組的交換機(jī)(未示出)。交換機(jī)然后創(chuàng)建三個(gè)寫入(每一個(gè)寫入對 應(yīng)一個(gè)由該組播組指定的目標(biāo))并將寫入發(fā)布至目標(biāo)存儲位置。在本發(fā)明的一個(gè)實(shí)施例 中,三個(gè)寫入是并行發(fā)生的。
      [0084] 將在不同的目的地地址被寫入的數(shù)據(jù)的副本通過交換機(jī)架構(gòu)(516)。一旦寫入完 成,在存儲裝置中有數(shù)據(jù)的三個(gè)副本。一旦寫入完成,存儲器(512)中的存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu) (未示出)被更新以反映該數(shù)據(jù)在存儲裝置內(nèi)的三個(gè)位置被存儲。此外,客戶端(500)被通 知寫入已完成。
      [0085] 參考圖5B,在晚一些的時(shí)間點(diǎn)上,處理器(514)向存儲模塊A(518)發(fā)布請求將彎 曲存儲器A(522)中當(dāng)前的數(shù)據(jù)的副本寫入固態(tài)存儲器模塊A(526)的物理地址。響應(yīng)于該 請求,存儲模塊控制器(未示出)將彎曲存儲器A(522)中的數(shù)據(jù)的副本寫入固態(tài)存儲器模 塊A(526)。處理器(514)在寫入完成時(shí)被通知。處理器(514)可在從存儲模塊A(518)接 收到該通知時(shí)更新存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)。
      [0086] 此外,獨(dú)立于存儲裝置的運(yùn)行,客戶端(500)可從客戶端存儲器(508)移除(已經(jīng) 被寫入至存儲裝置的)數(shù)據(jù)。
      [0087] 參考圖5C,一旦數(shù)據(jù)的副本已被寫入固態(tài)存儲器模塊A,處理器(514)向所有在彎 曲存儲器中包括數(shù)據(jù)的副本的存儲模塊發(fā)布請求,要求從它們各自的彎曲存儲器中移除數(shù) 據(jù)的副本。在完成該請求后,各存儲模塊各自通知控制模塊。圖5C示出了在所有的存儲模 塊完成該請求后系統(tǒng)的狀態(tài)。處理器(514)可在從存儲模塊接收到彎曲存儲器內(nèi)所有數(shù)據(jù) 的副本被移除的通知后更新存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)。
      [0088] 圖6示出了根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的流程圖。更具體地,圖6示出了根 據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的從存儲裝置中讀取數(shù)據(jù)的方法。雖然流程圖中的各個(gè)步驟 被展示并描述為按順序的,本領(lǐng)域的技術(shù)人員將會意識到一些步驟或者全部的步驟可以以 不同的順序執(zhí)行、可被組合或者省略,以及一些或者全部的步驟可被并行執(zhí)行。
      [0089] 在步驟600,客戶端向控制模塊中的處理器的提交隊(duì)列(SQ)寫入讀取命令(讀取 請求)。在本發(fā)明的一個(gè)實(shí)施例中,讀取命令包括邏輯地址。如上面所討論的,邏輯地址的 內(nèi)容可根據(jù)實(shí)現(xiàn)方式而變化。
      [0090] 在步驟602,客戶端向提交隊(duì)列尾部門鈴寄存器(SQ Tail doorbell register)寫 入新的提交隊(duì)列尾部(SQ Tail)。在本發(fā)明的一個(gè)實(shí)施例中,通過對提交隊(duì)列尾部門鈴寄存 器的寫入,客戶端通知處理器在其提交隊(duì)列中有新的命令要處理。在步驟604,處理器從提 交隊(duì)列(SQ)獲取讀取命令。在步驟606,處理器基于邏輯地址確定存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)中的 物理地址的位置。
      [0091] 在步驟608,處理器從在步驟606確定的位置獲取物理地址。在本發(fā)明的一個(gè)實(shí)施 例中,物理地址對應(yīng)于存儲裝置中的數(shù)據(jù)的一個(gè)或多個(gè)位置。例如,數(shù)據(jù)的位置可以包括下 述中的一個(gè)或多個(gè):處理器的存儲器中的位置、存儲模塊的存儲器中的位置和/或固態(tài)存 儲器模塊中的位置。
      [0092] 在本發(fā)明的一個(gè)變化實(shí)施例中,如果存儲器中數(shù)據(jù)結(jié)構(gòu)包括邏輯地址至物理地址 的直接映射,則步驟606和608可被合并成單個(gè)的查找,在該單個(gè)的查找中邏輯地址被用于 直接獲取物理地址。
      [0093] 在步驟610,做出其中一個(gè)數(shù)據(jù)位置是否在控制模塊的存儲器中的決定 (determination)。如果其中一個(gè)數(shù)據(jù)位置是在控制模塊的存儲器中,該過程繼續(xù)至步驟 622 ;否則,該過程繼續(xù)至步驟612。在本發(fā)明的一個(gè)實(shí)施例中,在存儲裝置中有數(shù)據(jù)的多個(gè) 副本的情況下,數(shù)據(jù)優(yōu)先從控制模塊的存儲器中讀取。如果該數(shù)據(jù)在控制模塊的存儲器中 不存在,數(shù)據(jù)優(yōu)先從彎曲存儲器(如果存在彎曲存儲器的話)中讀取,之后從固態(tài)存儲器模 塊(如果數(shù)據(jù)的副本在彎曲存儲器中不存在)中讀取。
      [0094] 在步驟612,處理器向存儲模塊的提交隊(duì)列(SQ)寫入讀取物理數(shù)據(jù)命令(Read Physical Data Command)〇
      [0095] 在步驟614,存儲模塊將數(shù)據(jù)從固態(tài)存儲器模塊中的物理位置傳送到存儲模塊存 儲器(例如圖3中的324),發(fā)起從存儲模塊存儲器到客戶端存儲器的數(shù)據(jù)的DMA傳送,并在 DMA完成之后,向處理器的完成隊(duì)列(CQ)寫入讀取命令完成。在本發(fā)明的一個(gè)實(shí)施例中,如 果所請求的物理位置是在彎曲存儲器中,則存儲模塊不需要將數(shù)據(jù)從固態(tài)存儲器模塊中的 物理位置傳送至存儲模塊存儲器。
      [0096] 在本發(fā)明的一個(gè)實(shí)施例中,DMA引擎位于數(shù)據(jù)所處的存儲模塊的存儲模塊控制器 中。在本發(fā)明的一個(gè)實(shí)施例中,DMA引擎被配置成向客戶端交換機(jī)發(fā)送數(shù)據(jù)的副本??蛻?端交換機(jī)收到后,客戶端交換機(jī)執(zhí)行必要的映射(或者翻譯)以標(biāo)識客戶端存儲器中的適 當(dāng)?shù)奈恢?。該?shù)據(jù)的副本然后被寫入客戶端存儲器中所標(biāo)識的位置。
      [0097] 在步驟616中,存儲模塊為處理器產(chǎn)生中斷。在步驟618,處理器處理其完成隊(duì)列 (CQ)中的數(shù)據(jù)。在這個(gè)階段,處理器已經(jīng)被通知讀取請求已經(jīng)被服務(wù)。在步驟620,一旦處 理器處理完位于完成隊(duì)列頭部的數(shù)據(jù),客戶端向完成隊(duì)列頭部門鈴(CQ head doorbell)寫 入新的完成隊(duì)列頭部(CQhead)。對于存儲模塊來說,這表示在完成隊(duì)列中用于未來提供給 處理器的通知的下一個(gè)位置。該過程然后繼續(xù)至步驟624。
      [0098] 在步驟622,處理器對(可位于存儲裝置或者客戶端交換機(jī)中的)DMA引擎編程以 從控制模塊的存儲器中讀取數(shù)據(jù)并將數(shù)據(jù)的副本寫入可經(jīng)由非透明橋存取的客戶端存儲 器中的位置。DMA引擎然后從控制模塊中的存儲器讀取數(shù)據(jù)并將數(shù)據(jù)的副本寫入客戶端存 儲器。
      [0099] 在步驟624,處理器向客戶端的完成隊(duì)列(CQ)寫入(確定處理器的提交隊(duì)列 (SQ))的提交隊(duì)列標(biāo)識符(SQ Identifier)和(確定客戶端發(fā)布給處理器的具體讀取命令) 的讀取命令標(biāo)識符(Read Command Identifier)。在步驟626,處理器為客戶端處理器產(chǎn)生 中斷。在本發(fā)明的一個(gè)實(shí)施例中,處理器使用由非透明橋提供的門鈴中斷來向客戶端處理 器發(fā)布中斷。在步驟628,客戶端在其完成隊(duì)列(CQ)中處理數(shù)據(jù)。在這個(gè)階段,客戶端已經(jīng) 被通知該讀取請求已經(jīng)被服務(wù)。在步驟630, 一旦客戶端處理完位于完成隊(duì)列頭部的數(shù)據(jù), 客戶端向完成隊(duì)列頭部門鈴(CQ head doorbell)寫入新的完成隊(duì)列頭部(CQ head)。對于 處理器來說,這表示在完成隊(duì)列中用于未來提供給客戶端的通知的下一個(gè)位置。
      [0100] 圖7A-7C示出了從根據(jù)本發(fā)明的一個(gè)或多個(gè)實(shí)施例的存儲裝置中讀取數(shù)據(jù)的多 個(gè)示例。這些示例并不意圖限制本發(fā)明的范圍。
      [0101] 參考圖7A,考慮客戶端(500)發(fā)布從存儲裝置讀?。ㄓ煤谏Ρ硎镜模?shù)據(jù)的請 求的情況。響應(yīng)于該請求,控制模塊(504)中的處理器(514)確定數(shù)據(jù)的第一副本是位于 存儲器(512)中而數(shù)據(jù)的第二副本是位于固態(tài)存儲器模塊B (528)中。根據(jù)該確定,處理器 (514)對DMA引擎(為示出)編程以從存儲器(512)讀取數(shù)據(jù)并將數(shù)據(jù)的副本寫入客戶端 存儲器(508)中的物理地址。當(dāng)被編程后,DMA引擎從存儲器(512)讀取數(shù)據(jù)并向客戶端 存儲器(508)發(fā)布寫入。當(dāng)將要被寫入的數(shù)據(jù)的副本抵達(dá)客戶端交換機(jī)(502)時(shí),客戶端 交換機(jī)將DMA引擎提供的目的地地址映射(或翻譯)成客戶端存儲器(508)中的地址。數(shù) 據(jù)的副本然后被寫入到客戶端存儲器(508)中由客戶端交換機(jī)(502)所確定的地址。在這 個(gè)示例中,DMA引擎可位于客戶端交換機(jī)(502)中。
      [0102] 參考圖7B,考慮客戶端(500)發(fā)布從存儲裝置讀?。ㄓ煤谏Ρ硎镜模?shù)據(jù)的請 求的情況。響應(yīng)于該請求,控制模塊(504)中的處理器(514)確定數(shù)據(jù)的副本是位于固態(tài) 存儲器模塊B (528)中。根據(jù)該確定,處理器發(fā)起從固態(tài)存儲器模塊B (528)至可由DMA引 擎(未示出)存取的存儲器(例如彎曲存儲器B(524))的數(shù)據(jù)傳送,接下來對DMA引擎編 程以從該存儲位置讀取數(shù)據(jù)并將數(shù)據(jù)的副本寫入客戶端存儲器(508)中被請求的位置。當(dāng) 將要被寫入的數(shù)據(jù)的副本抵達(dá)客戶端交換機(jī)(502)時(shí),客戶端交換機(jī)將DMA引擎提供的目 的地地址映射(或翻譯)成客戶端存儲器(508)中的地址。該數(shù)據(jù)的副本然后被寫入到客 戶端存儲器(508)中由客戶端交換機(jī)(502)所確定的地址。在這個(gè)示例中,DMA引擎可位 于存儲模塊B (520)中。
      [0103] 參考圖7C,考慮客戶端(500)發(fā)布從存儲裝置讀取(用黑色圈表示的)數(shù)據(jù)的請 求的情況。響應(yīng)于該請求,控制模塊(504)中的處理器(514)確定數(shù)據(jù)的第一副本是位于彎 曲存儲器B(524)中而數(shù)據(jù)的第二副本是位于固態(tài)存儲器模塊B(528)中。根據(jù)該確定,處理 器(514)對DMA引擎(未示出)進(jìn)行編程以從彎曲存儲器B(524)中讀取數(shù)據(jù)并將數(shù)據(jù)的副 本寫入客戶端存儲器(508)的物理地址中。當(dāng)被編程后,DMA引擎從彎曲存儲器B (524)中 讀取數(shù)據(jù)并向客戶端存儲器(508)發(fā)布寫入。當(dāng)將要被寫入的數(shù)據(jù)的副本抵達(dá)客戶端交換 機(jī)(502)時(shí),客戶端交換機(jī)將DMA引擎提供的目的地地址映射(或翻譯)成客戶端存儲器 (508)中的地址。數(shù)據(jù)的副本然后被寫入到客戶端存儲器(508)中由客戶端交換機(jī)(502) 所確定的地址。在這個(gè)示例中,DMA引擎可位于存儲模塊B(520)中。
      [0104] 本發(fā)明的一個(gè)或多個(gè)實(shí)施例可使用由該系統(tǒng)中的一個(gè)或多個(gè)處理器執(zhí)行的指令 實(shí)現(xiàn)。此外,這些指令可對應(yīng)于存儲在一個(gè)或多個(gè)非暫時(shí)性的計(jì)算機(jī)可讀介質(zhì)上的計(jì)算機(jī) 可讀指令。
      [0105] 雖然本發(fā)明是結(jié)合有限數(shù)量的實(shí)施例被描述,本領(lǐng)域的技術(shù)人員,從本發(fā)明中受 益后,將會意識到其他的實(shí)施例也能夠被設(shè)計(jì)出而不脫離此處所揭示的發(fā)明的范圍。因此, 本發(fā)明的范圍不應(yīng)當(dāng)僅被所附的權(quán)利要求所限制。
      【權(quán)利要求】
      1. 一種寫入數(shù)據(jù)的方法,包括 從客戶端接收寫入數(shù)據(jù)的請求,其中所述數(shù)據(jù)是位于客戶端存儲器中; 由存儲裝置確定第一存儲器中的第一位置以寫入數(shù)據(jù)的第一副本、第二存儲器中的第 二位置以寫入數(shù)據(jù)的第二副本,其中所述第一存儲器位于包括第一永久存儲器的第一存儲 模塊中,而所述第二存儲器位于包括第二永久存儲器的第二存儲模塊中,其中所述存儲裝 置包括第一存儲模塊和第二存儲模塊; 對直接存儲器存?。―MA)引擎編程以從客戶端存儲器讀取數(shù)據(jù)并向組播地址發(fā)布第 一寫入請求,其中所述第一位置、所述第二位置和一第三位置是與該組播地址相關(guān); 在編程后: 在所述存儲裝置的交換機(jī)架構(gòu)中的交換機(jī)處從DMA引擎接收所述第一請求; 響應(yīng)于接收第一請求,在所述交換機(jī)中產(chǎn)生將第一副本寫入所述第一位置的第二請 求、將第二副本寫入所述第二位置的第三請求以及將第三副本寫入所述第三位置的第四請 求,其中所述第三位置是位于存儲裝置中的控制模塊的第三存儲器中; 其中響應(yīng)于所述第二請求,數(shù)據(jù)的第一副本被寫入所述第一位置; 其中響應(yīng)于所述第三請求,數(shù)據(jù)的第二副本被寫入所述第二位置; 其中響應(yīng)于所述第四請求,數(shù)據(jù)的第三副本被寫入所述第三位置; 其中DMA引擎從客戶端存儲器讀取數(shù)據(jù); 其中所述第一存儲器、所述第二存儲器、所述第三存儲器和所述客戶端存儲器的至少 一部分是能通過統(tǒng)一地址空間存取的存儲架構(gòu)的一部分。
      2. 如權(quán)利要求1所述的方法,還包括: 在數(shù)據(jù)的第一副本被寫入第一位置、數(shù)據(jù)的第二副本被寫入第二位置以及數(shù)據(jù)的第三 副本被寫入第三位置后: 通知客戶端寫入數(shù)據(jù)的請求已經(jīng)被完成。
      3. 如權(quán)利要求2所述的方法,還包括: 在通知客戶端后: 將數(shù)據(jù)的第一副本寫入所述第一永久存儲器;以及 在寫入之后,將數(shù)據(jù)的第一副本從所述第一存儲器移除。
      4. 如權(quán)利要求3所述的方法,其中所述存儲裝置中的處理器發(fā)起向所述第一永久存儲 器寫入數(shù)據(jù)的第一副本。
      5. 如權(quán)利要求3所述的方法,其中所述第一永久存儲器是固態(tài)存儲器模塊。
      6. 如權(quán)利要求5所述的方法,其中所述固態(tài)存儲器模塊包括數(shù)個(gè)NAND管芯(NAND die)。
      7. 如權(quán)利要求3所述的方法,還包括: 在通知客戶端后: 從所述第二存儲器移除數(shù)據(jù)的第二副本;以及 從所述第三存儲器移除數(shù)據(jù)的第三副本。
      8. 如權(quán)利要求1所述的方法,其中所述寫入數(shù)據(jù)的請求是經(jīng)由客戶端交換機(jī)從客戶端 接收,其中客戶端使用快速外圍組件互聯(lián)(PCIe)與客戶端交換機(jī)通信,存儲裝置使用PCIe 與客戶端交換機(jī)通信。
      9. 如權(quán)利要求8所述的方法, 其中所述客戶端是第一根組件, 其中所述存儲裝置包括處理器,其中該處理器是第二根組件, 其中該客戶端交換機(jī)包括非透明橋, 其中數(shù)據(jù)的至少一個(gè)副本通過該非透明橋被發(fā)送至所述存儲裝置。
      10. 如權(quán)利要求8所述的方法,其中所述DMA引擎是位于所述客戶端交換機(jī)中。
      11. 如權(quán)利要求1所述的方法,其中所述存儲裝置中的處理器對DMA引擎編程。
      12. 如權(quán)利要求1所述的方法,其中所述第一位置、所述第二位置以及所述第三位置是 由DMA引擎所實(shí)現(xiàn)的組播組中的一部分。
      13. -種讀取數(shù)據(jù)的方法,包括: 從客戶端接收讀取保存在存儲裝置中的數(shù)據(jù)的請求,其中所述請求包括與所述數(shù)據(jù)相 關(guān)的邏輯地址; 由所述存儲裝置使用所述邏輯地址確定存儲器內(nèi)(in-memory)數(shù)據(jù)結(jié)構(gòu)中的位置; 從存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)中的所述位置獲取物理地址,其中該物理地址對應(yīng)于永久存儲器 中的第一位置,其中所述永久存儲器位于存儲裝置的存儲模塊中,其中所述數(shù)據(jù)位于所述 第一位置; 對存儲模塊控制器編程以從所述第一位置讀取數(shù)據(jù)并將數(shù)據(jù)的第一副本保存在第二 位置,其中所述第二位置是在所述存儲裝置的存儲器中; 在編程后,所述存儲模塊控制器: 由存儲模塊控制器從所述第一位置讀取所述數(shù)據(jù);以及 由存儲模塊控制器將數(shù)據(jù)的第一副本寫入所述第二位置; 對直接存儲器存?。―MA)引擎編程以從第二位置讀取所述數(shù)據(jù)并將數(shù)據(jù)的第二副本 寫入客戶端存儲器中的第三位置; 在編程所述DMA引擎后: 由DMA引擎從所述第二位置讀取數(shù)據(jù)的第一副本; 由DMA引擎將數(shù)據(jù)的第二副本寫入所述第三位置, 其中將數(shù)據(jù)的第二副本寫入所述第三位置包括通過非透明橋?qū)?shù)據(jù)的第二副本發(fā)送 至客戶端, 其中所述永久存儲器、所述存儲器以及所述客戶端存儲器的至少一部分是能通過統(tǒng)一 地址空間存取的存儲架構(gòu)的一部分。
      14. 如權(quán)利要求13所述的方法,其中DMA引擎是位于所述存儲器模塊中,且其中所述存 儲裝置中的處理器對DMA引擎編程。
      15. 如權(quán)利要求13所述的方法,其中客戶端使用快速外圍組件互聯(lián)(PCIe)與客戶端交 換機(jī)通信,而存儲裝置使用PCIe與客戶端交換機(jī)通信,以及其中客戶端交換機(jī)實(shí)現(xiàn)非透明 橋。
      16. 如權(quán)利要求15所述的方法,其中所述客戶端存儲器的至少一部分是DMA引擎經(jīng)由 非透明橋能夠直接存取的。
      17. 如權(quán)利要求13所述的方法,其中所述第一位置是在位于所述永久存儲器中的NAND 閃存(NAND flash)中。
      18. -種系統(tǒng),包括: 客戶端,包括客戶端處理器和客戶端存儲器; 存儲裝置,包括: 處理器,其中該處理器被配置成對第一直接存儲器存?。―MA)引擎和第二DMA引擎編 程; 第一存儲器; 第一存儲模塊,包括第二存儲器、第一永久存儲器和所述第二DMA引擎; 第二存儲模塊,包括第三存儲器和第二永久存儲器;以及 交換機(jī)架構(gòu),包括被配置成實(shí)現(xiàn)組播的交換機(jī);以及 客戶端交換機(jī),包括所述第一 DMA引擎和非透明橋,其中所述非透明橋使得該存儲裝 置能夠存取所述客戶端存儲器的至少一部分; 其中第一 DMA引擎被配置成從所述客戶端存儲器讀取第一數(shù)據(jù)(first datum)并將第 一數(shù)據(jù)寫入交換機(jī)中的組播地址, 其中第二DMA引擎被配置成從選自由第一永久存儲器和第二永久存儲器所組成的組 中的至少其中之一讀取第二數(shù)據(jù)(second datum),并將該第二數(shù)據(jù)寫入所述客戶端存儲 器, 其中客戶端存儲器的所述部分、所述第一存儲器、所述第二存儲器以及所述第三存儲 器是能夠由統(tǒng)一地址空間存取的存儲架構(gòu)的一部分。
      19. 如權(quán)利要求18所述的系統(tǒng),其中所述第一存儲器包括存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu),且其中 所述處理器使用存儲器內(nèi)數(shù)據(jù)結(jié)構(gòu)來確定所述第二數(shù)據(jù)的位置,其中該位置被用于對所述 第二DMA引擎編程。
      20. 如權(quán)利要求18所述的系統(tǒng),其中所述處理器進(jìn)一步被配置成對所述第二DMA引擎 編程,以將所述第二存儲器中的第一數(shù)據(jù)的副本寫入所述第一永久存儲器。
      21. 如權(quán)利要求18所述的系統(tǒng),其中客戶端使用快速外圍組件互聯(lián)(PCIe)與客戶端交 換機(jī)通信,且存儲裝置使用PCIe與客戶端交換機(jī)通信。
      【文檔編號】G06F9/50GK104272257SQ201380015061
      【公開日】2015年1月7日 申請日期:2013年3月21日 優(yōu)先權(quán)日:2012年3月23日
      【發(fā)明者】M·W·夏皮羅, J·S·邦威克, W·H·穆爾 申請人:Dssd股份有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1