發(fā)明領(lǐng)域
本發(fā)明大體上涉及計(jì)算機(jī)系統(tǒng)和用于計(jì)算機(jī)系統(tǒng)的操作的方法,并且更具體地涉及計(jì)算機(jī)系統(tǒng)中的持久性存儲(chǔ)器設(shè)備的使用。
背景
術(shù)語“持久性存儲(chǔ)器”用于本說明書的上下文和權(quán)利要求中以表示支持?jǐn)?shù)據(jù)到存儲(chǔ)器的隨機(jī)存取寫入和從存儲(chǔ)器的隨機(jī)存取讀取以及在電源關(guān)閉時(shí)保留數(shù)據(jù)的任何種類的半導(dǎo)體存儲(chǔ)器。當(dāng)前使用的持久性存儲(chǔ)器的示例包括各種類型的非易失性隨機(jī)存取存儲(chǔ)器(nvram)(包括閃速存儲(chǔ)器)以及電池支持的ram設(shè)備。新型的持久性存儲(chǔ)器在研發(fā)中,諸如最近由intel和microntechnology公布的“3dxpoint”存儲(chǔ)器。
概述
在下文描述的本發(fā)明的實(shí)施方式提供用于經(jīng)由計(jì)算機(jī)總線與持久性存儲(chǔ)器設(shè)備交互的改進(jìn)技術(shù)。
因此,根據(jù)本發(fā)明的實(shí)施方式提供了存儲(chǔ)器設(shè)備,其包括具有存儲(chǔ)器地址空間的目標(biāo)存儲(chǔ)器以及易失性緩沖存儲(chǔ)器,該易失性緩沖存儲(chǔ)器被耦合以接收通過總線寫入到存儲(chǔ)器設(shè)備以用于在存儲(chǔ)器地址空間中的指定地址中存儲(chǔ)的數(shù)據(jù)。存儲(chǔ)器控制器被配置為經(jīng)由總線接收刷新(flush)指令并響應(yīng)于該刷新指令以將在存儲(chǔ)器地址空間內(nèi)具有指定地址的在緩沖存儲(chǔ)器中保存的數(shù)據(jù)立即刷新到目標(biāo)存儲(chǔ)器。
在公開的實(shí)施方式中,目標(biāo)存儲(chǔ)器包括持久性存儲(chǔ)器。
在一個(gè)實(shí)施方式中,刷新指令使存儲(chǔ)器控制器將在刷新指令先前投遞(posted)的寫入命令中通過總線傳送到目標(biāo)存儲(chǔ)器的所有數(shù)據(jù)刷新到目標(biāo)存儲(chǔ)器。可選地,刷新指令識(shí)別在存儲(chǔ)器地址空間內(nèi)將被刷新的范圍,并使存儲(chǔ)器控制器將保存在被識(shí)別的范圍內(nèi)的具有指定地址的在緩沖存儲(chǔ)器中的數(shù)據(jù)立即刷新到目標(biāo)存儲(chǔ)器。通常,存儲(chǔ)器控制器被配置為響應(yīng)于刷新指令來刷新僅在被識(shí)別的范圍內(nèi)的數(shù)據(jù),同時(shí)將在被識(shí)別范圍之外的具有指定地址的其它數(shù)據(jù)留在緩沖存儲(chǔ)器中,而不立即刷新到目標(biāo)存儲(chǔ)器。
在所公開的實(shí)施方式中,存儲(chǔ)器控制器被配置為在將數(shù)據(jù)刷新到目標(biāo)存儲(chǔ)器后通過總線將完成消息發(fā)送到刷新指令的發(fā)送者。
在一個(gè)實(shí)施方式中,數(shù)據(jù)和刷新指令通過其寫入的總線是計(jì)算機(jī)的外圍組件總線,該總線具有總線地址空間,其中,將被刷新的范圍根據(jù)存儲(chǔ)器頁面被識(shí)別,并且存儲(chǔ)器控制器被配置為將存儲(chǔ)器頁面的被識(shí)別的范圍從總線地址空間轉(zhuǎn)換成存儲(chǔ)器塊,以用于在存儲(chǔ)器地址空間中刷新。
在一些實(shí)施方式中,存儲(chǔ)器控制器被配置為識(shí)別在存儲(chǔ)器地址空間內(nèi)的多個(gè)區(qū)并被配置為將各自的刷新屬性與這些區(qū)相關(guān)聯(lián),其中,刷新指令使存儲(chǔ)器控制器根據(jù)各自的刷新屬性刷新在任何給定區(qū)內(nèi)的具有指定地址的在緩沖存儲(chǔ)器中保存的數(shù)據(jù)。在一個(gè)實(shí)施方式中,各自的刷新屬性指示給定區(qū)是否對應(yīng)于目標(biāo)存儲(chǔ)器中包括持久性存儲(chǔ)器的范圍。
根據(jù)本發(fā)明的實(shí)施方式還提供計(jì)算裝置,其包括上面所描述的存儲(chǔ)器設(shè)備和網(wǎng)絡(luò)接口控制器(nic),該網(wǎng)絡(luò)接口控制器被耦合以經(jīng)由網(wǎng)絡(luò)從對等節(jié)點(diǎn)接收遠(yuǎn)程直接存儲(chǔ)器存取(rdma)寫入包,該寫入包包含將被寫入到存儲(chǔ)器設(shè)備的數(shù)據(jù)并指定數(shù)據(jù)將被寫入的地址,以及該網(wǎng)絡(luò)接口控制器被耦合以接收rdma刷新包,并且該網(wǎng)絡(luò)接口控制器被配置為響應(yīng)于rdma寫入包和rdma刷新包來通過總線將數(shù)據(jù)和刷新指令傳送到存儲(chǔ)器設(shè)備。
通常,數(shù)據(jù)和刷新指令從nic被傳送到存儲(chǔ)器設(shè)備,并且數(shù)據(jù)由存儲(chǔ)器控制器從緩沖存儲(chǔ)器刷新到目標(biāo)存儲(chǔ)器,而不生成對耦合到裝置中的總線的中央處理單元(cpu)的中斷。
在一些實(shí)施方式中,nic被配置為通過在nic和對等節(jié)點(diǎn)之間建立的傳輸服務(wù)實(shí)例來從對等節(jié)點(diǎn)接收rdma寫入包和rdma刷新包,其中,存儲(chǔ)器設(shè)備中的存儲(chǔ)器區(qū)與傳輸服務(wù)實(shí)例相關(guān)聯(lián),其中,寫入包使nic將數(shù)據(jù)寫入到相關(guān)聯(lián)的存儲(chǔ)器區(qū),并且其中,刷新包使nic發(fā)布與相關(guān)聯(lián)的存儲(chǔ)器區(qū)有關(guān)的刷新指令。在公開的實(shí)施方式中,nic被配置為將各自的刷新屬性與存儲(chǔ)器區(qū)相關(guān)聯(lián),并且刷新指令使存儲(chǔ)器控制器根據(jù)相關(guān)聯(lián)的刷新屬性刷新由nic寫入到存儲(chǔ)器區(qū)內(nèi)的指定地址的數(shù)據(jù)。
在公開的實(shí)施方式中,裝置包括部署在對等節(jié)點(diǎn)處的對等nic,其中,對等nic被配置為響應(yīng)于由運(yùn)行在對等節(jié)點(diǎn)上的進(jìn)程提交到對等nic的rdma寫入和刷新工作請求,通過網(wǎng)絡(luò)傳輸rdma寫入包和rdma刷新包。
根據(jù)本發(fā)明的實(shí)施方式,另外提供存儲(chǔ)器設(shè)備,其包括具有存儲(chǔ)器地址空間的目標(biāo)存儲(chǔ)器以及易失性緩沖存儲(chǔ)器,該易失性緩沖存儲(chǔ)器被耦合以接收通過總線在事務(wù)包中寫入到存儲(chǔ)器設(shè)備的數(shù)據(jù)以用于在存儲(chǔ)器地址空間內(nèi)的指定地址中存儲(chǔ),每個(gè)事務(wù)包包括事務(wù)描述符,其包括刷新標(biāo)志。存儲(chǔ)器控制器被配置為經(jīng)由總線接收刷新指令并響應(yīng)于該刷新指令以立即將緩沖存儲(chǔ)器中保存的、對于其的刷新標(biāo)志在將其傳送到存儲(chǔ)器設(shè)備的事務(wù)包中被設(shè)置的數(shù)據(jù)刷新到目標(biāo)存儲(chǔ)器。
在公開的實(shí)施方式中,存儲(chǔ)器控制器被配置為響應(yīng)于刷新指令來僅刷新對于其刷新標(biāo)志被設(shè)置的數(shù)據(jù),同時(shí)將在其中刷新標(biāo)志未被設(shè)置的事務(wù)包中到達(dá)的其它數(shù)據(jù)留在緩沖存儲(chǔ)器中,而不立即刷新到目標(biāo)存儲(chǔ)器。
在一個(gè)實(shí)施方式中,事務(wù)描述符包括“nosnoop”屬性字段,其包括刷新標(biāo)志。
根據(jù)本發(fā)明的實(shí)施方式還提供計(jì)算裝置,其包括上面所描述的存儲(chǔ)器設(shè)備和網(wǎng)絡(luò)接口控制器(nic),該網(wǎng)絡(luò)接口控制器被耦合以經(jīng)由網(wǎng)絡(luò)接收遠(yuǎn)程直接存儲(chǔ)器存取(rdma)寫入包,該寫入包包含將被寫入到存儲(chǔ)器設(shè)備的數(shù)據(jù)、指定數(shù)據(jù)將被寫入的地址,并指示數(shù)據(jù)將被刷新到目標(biāo)存儲(chǔ)器,并且該網(wǎng)絡(luò)接口控制器被耦合以在接收rdma寫入包后接收rdma刷新包,并且該網(wǎng)絡(luò)接口控制器被配置為響應(yīng)于rdma寫入包來通過總線將數(shù)據(jù)在其中刷新標(biāo)志被設(shè)置的事務(wù)包中傳送到存儲(chǔ)器設(shè)備,并響應(yīng)于rdma刷新包將刷新指令傳送到存儲(chǔ)器設(shè)備。
根據(jù)本發(fā)明的實(shí)施方式另外提供用于在存儲(chǔ)器設(shè)備中的數(shù)據(jù)存儲(chǔ)的方法,該存儲(chǔ)器設(shè)備包括目標(biāo)存儲(chǔ)器和易失性緩沖存儲(chǔ)器。方法包括在易失性緩沖存儲(chǔ)器中接收通過總線寫入到存儲(chǔ)器設(shè)備的數(shù)據(jù),以用于在存儲(chǔ)器設(shè)備的存儲(chǔ)器地址空間內(nèi)的指定地址中存儲(chǔ)。刷新指令經(jīng)由總線被接收。響應(yīng)于刷新指令,在存儲(chǔ)器地址空間內(nèi)具有指定地址的在緩沖存儲(chǔ)器中保存的數(shù)據(jù)被立即刷新到目標(biāo)存儲(chǔ)器。
根據(jù)本發(fā)明的實(shí)施方式還另外提供用于在存儲(chǔ)器設(shè)備中的數(shù)據(jù)存儲(chǔ)的方法,該存儲(chǔ)器設(shè)備包括目標(biāo)存儲(chǔ)器和易失性緩沖存儲(chǔ)器。方法包括在易失性緩沖存儲(chǔ)器中接收通過總線在事務(wù)包中被寫入到存儲(chǔ)器設(shè)備的數(shù)據(jù),以用于在存儲(chǔ)器設(shè)備的存儲(chǔ)器地址空間內(nèi)的指定地址中存儲(chǔ),每個(gè)事務(wù)包包括事務(wù)描述符,其包括刷新標(biāo)志。刷新指令經(jīng)由總線被接收。響應(yīng)于刷新指令,在將數(shù)據(jù)傳送到存儲(chǔ)器設(shè)備的事務(wù)包中設(shè)置刷新標(biāo)志的、在緩沖存儲(chǔ)器中保存的數(shù)據(jù)被立即刷新到目標(biāo)存儲(chǔ)器。
從結(jié)合附圖進(jìn)行的本發(fā)明的實(shí)施方式的以下詳細(xì)描述中,本發(fā)明將得到更完全地理解,其中:
附圖簡述
圖1是根據(jù)本發(fā)明的實(shí)施方式示意地示出計(jì)算機(jī)系統(tǒng)的方框圖;
圖2是根據(jù)本發(fā)明的實(shí)施方式示意性示出用于控制持久性存儲(chǔ)器設(shè)備的方法的流程圖;
圖3是根據(jù)本發(fā)明的實(shí)施方式示意性示出用于被寫入到存儲(chǔ)器設(shè)備的數(shù)據(jù)的遠(yuǎn)程刷新的方法的梯形圖。
實(shí)施方式的詳細(xì)描述
使用持久性存儲(chǔ)器的軟件應(yīng)用一般依賴于以下假設(shè):一旦數(shù)據(jù)已經(jīng)被寫入到持久性存儲(chǔ)器設(shè)備,該數(shù)據(jù)將實(shí)際上保存。換句話說,該應(yīng)用假設(shè)寫操作已經(jīng)被提交到持久性存儲(chǔ)器并且將保持不受任何隨后的斷電或其他系統(tǒng)故障的影響。
然而,實(shí)際上,這種假設(shè)不總是正確的,特別是當(dāng)持久性存儲(chǔ)器設(shè)備由投遞式(posted)寫入操作經(jīng)由諸如pci
作為另一個(gè)示例,當(dāng)諸如網(wǎng)絡(luò)接口控制器(nic)的外圍設(shè)備通過總線將數(shù)據(jù)寫入到持久性系統(tǒng)存儲(chǔ)器時(shí),數(shù)據(jù)沿著諸如在屬于總線的根復(fù)合體的緩存中的易失性存儲(chǔ)器中的路徑被緩存??偩€將立即向投遞寫入操作的設(shè)備返回確認(rèn),并且設(shè)備通常不接收數(shù)據(jù)實(shí)際上已經(jīng)從緩存被刷新到持久性存儲(chǔ)器的任何確認(rèn)。
本文描述的本發(fā)明的實(shí)施方式通過提供設(shè)備架構(gòu)和技術(shù)來解決這些困難,該設(shè)備架構(gòu)和技術(shù)使得實(shí)體能夠通過總線將數(shù)據(jù)寫入到持久性存儲(chǔ)器設(shè)備以確保數(shù)據(jù)實(shí)際上已經(jīng)被刷新到持久性存儲(chǔ)器。這些技術(shù)可通過諸如應(yīng)用程序的軟件實(shí)體和諸如nic的硬件實(shí)體來應(yīng)用,該軟件實(shí)體和硬件實(shí)體將數(shù)據(jù)寫入到這樣的持久性存儲(chǔ)器設(shè)備并從這樣的持久性存儲(chǔ)器設(shè)備讀取數(shù)據(jù)。
當(dāng)由nic應(yīng)用時(shí),所公開的技術(shù)可用于實(shí)現(xiàn)由跨網(wǎng)絡(luò)的對等節(jié)點(diǎn)發(fā)起的遠(yuǎn)程直接存儲(chǔ)器存取(rdma)操作,同時(shí)最小化或完全消除對中斷與這些操作有關(guān)的中央處理單元(cpu)的需要。在對等節(jié)點(diǎn)處部署的對等nic可被配置為響應(yīng)于由運(yùn)行在對等節(jié)點(diǎn)上的應(yīng)用程序提交到對等nic的rdma寫入和刷新工作請求而通過網(wǎng)絡(luò)傳輸rdma寫入和刷新包。在接收側(cè)的nic然后在向?qū)Φ萵ic發(fā)信號(hào)通知已經(jīng)完成操作之前驗(yàn)證數(shù)據(jù)已經(jīng)被寫入并實(shí)際上刷新到持久性存儲(chǔ)器。
所公開的實(shí)施方式在通過諸如pcie總線的外圍組件總線存取和控制持久性存儲(chǔ)器設(shè)備中是特別有用的,并且因此實(shí)現(xiàn)在標(biāo)準(zhǔn)計(jì)算機(jī)系統(tǒng)中的持久性存儲(chǔ)器的更通用、規(guī)模擴(kuò)大的用途。此外,這些實(shí)施方式的原理可通過其它種類的總線加以必要的變更來被應(yīng)用,其它種類的總線諸如雙列直插式存儲(chǔ)器模塊(dimm),其通常用于中央處理器(cpu)和系統(tǒng)存儲(chǔ)器之間的通信。
另外,盡管所公開的實(shí)施方式主要涉及數(shù)據(jù)到持久性存儲(chǔ)器的刷新,但是本文描述的刷新技術(shù)和語義可類似地用于確保數(shù)據(jù)僅僅被刷新成一致的,即,從諸如緩存的任何中間緩沖器刷新到諸如主機(jī)系統(tǒng)存儲(chǔ)器的目標(biāo)存儲(chǔ)器,其中,確保數(shù)據(jù)對于在計(jì)算機(jī)上運(yùn)行的其它應(yīng)用和設(shè)備是可見的。主機(jī)計(jì)算機(jī)上的任何給定的存儲(chǔ)器區(qū)的刷新性質(zhì)(例如,刷新操作是否使數(shù)據(jù)被刷新到持久性存儲(chǔ)器或僅僅被刷新成一致的)可在主機(jī)計(jì)算機(jī)上被本地設(shè)置,這取決于應(yīng)用和系統(tǒng)需求。在這個(gè)模型中,當(dāng)對等nic通過網(wǎng)絡(luò)將rdma刷新操作引導(dǎo)到主機(jī)計(jì)算機(jī)上的特定存儲(chǔ)器區(qū)時(shí),nic操作的語義對區(qū)的實(shí)際刷新性質(zhì)是不可知的。
因此,在隨后的描述中的“持久性存儲(chǔ)器”的引用應(yīng)作為刷新到無論是否是持久性的目標(biāo)存儲(chǔ)器的更一般的示例被理解。出于同樣的原因,術(shù)語“緩沖器”應(yīng)被理解為不僅是指與給定存儲(chǔ)器設(shè)備中的目標(biāo)存儲(chǔ)器特定相關(guān)聯(lián)的ram緩沖器,而且還指任何種類的緩存或其中可在刷新到目標(biāo)存儲(chǔ)器之前暫時(shí)保存數(shù)據(jù)的其它存儲(chǔ)器。下文描述的一些實(shí)施方式利用“持久性標(biāo)志”,但是該術(shù)語也應(yīng)當(dāng)被理解為“刷新標(biāo)志”的一個(gè)示例,其用于標(biāo)記在給定事務(wù)中的數(shù)據(jù)以用于立即刷新,如下文所述。
在所公開的實(shí)施方式中,持久性存儲(chǔ)器設(shè)備包括易失性緩沖存儲(chǔ)器,其接收由儲(chǔ)存發(fā)起者通過總線寫入的數(shù)據(jù),以用于在持久性存儲(chǔ)器的存儲(chǔ)器地址空間內(nèi)的指定地址中儲(chǔ)存。在將數(shù)據(jù)寫入到總線后,發(fā)起者將刷新指令發(fā)送到持久性存儲(chǔ)器設(shè)備。這個(gè)刷新指令可應(yīng)用到在該刷新指令之前投遞的寫入命令中通過總線傳送到存儲(chǔ)器設(shè)備的所有數(shù)據(jù),或者其可指示應(yīng)被刷新到持久性存儲(chǔ)器的、緩沖存儲(chǔ)器中的特定數(shù)據(jù)(但是可能不是所有數(shù)據(jù))。響應(yīng)于這個(gè)刷新指令,持久性存儲(chǔ)器設(shè)備中的存儲(chǔ)器控制器立即實(shí)施所請求的刷新操作。如果刷新指令應(yīng)用到存儲(chǔ)器地址空間中的指定范圍,則在該范圍之外的數(shù)據(jù)可留在緩沖存儲(chǔ)器中(至少暫時(shí)地)而不立即刷新到持久性存儲(chǔ)器。在將數(shù)據(jù)刷新到持久性存儲(chǔ)器后,存儲(chǔ)器控制器通過總線將完成消息發(fā)送到發(fā)起者。
當(dāng)刷新指令識(shí)別在存儲(chǔ)器地址空間內(nèi)的特定范圍,其使存儲(chǔ)器控制器將在被識(shí)別的范圍內(nèi)的具有指定地址的在緩沖存儲(chǔ)器中保存的數(shù)據(jù)刷新到持久性存儲(chǔ)器。通常,其中范圍將被刷新的總線地址空間根據(jù)存儲(chǔ)頁面被識(shí)別,并且存儲(chǔ)器控制器將用于刷新的存儲(chǔ)頁面的被識(shí)別的范圍從總線地址空間轉(zhuǎn)換成存儲(chǔ)器地址空間中的存儲(chǔ)器塊。在這些實(shí)施方式中的存儲(chǔ)器控制器包括在硬件邏輯和/或軟件中實(shí)現(xiàn)的邏輯組件,其在本文中被稱作“持久性代理”,其負(fù)責(zé)與數(shù)據(jù)到持久性存儲(chǔ)器的刷新相關(guān)的管理、地址轉(zhuǎn)換和消息傳遞。
在其它實(shí)施方式中,儲(chǔ)存發(fā)起者通過總線在事務(wù)包中將數(shù)據(jù)寫入到持久性存儲(chǔ)器設(shè)備,該事務(wù)包包括包含持久性標(biāo)志的事務(wù)描述符,即,描述符中可由發(fā)起者設(shè)置以標(biāo)記用于從緩沖器到持久性存儲(chǔ)器的立即刷新的數(shù)據(jù)的一個(gè)或多個(gè)位。發(fā)起者然后通過總線發(fā)送刷新指令,這使存儲(chǔ)器控制器將保存在緩沖存儲(chǔ)器中的數(shù)據(jù)立即刷新到持久性存儲(chǔ)器,其持久性標(biāo)志在將數(shù)據(jù)傳送到存儲(chǔ)器設(shè)備的事務(wù)包中被設(shè)置。
圖1是根據(jù)本發(fā)明的實(shí)施方式示意地示出計(jì)算機(jī)系統(tǒng)20的方框圖。系統(tǒng)20包括計(jì)算機(jī)22和24,其作為網(wǎng)絡(luò)26的節(jié)點(diǎn)被連接。為了簡單起見,僅兩臺(tái)計(jì)算機(jī)22和24在圖1中被示出,并且僅計(jì)算機(jī)22的組件被詳細(xì)示出。實(shí)際上,系統(tǒng)20通常包括大量的計(jì)算機(jī),每個(gè)可以以類似于計(jì)算機(jī)22的方式來構(gòu)建和操作。網(wǎng)絡(luò)26是分組數(shù)據(jù)網(wǎng)絡(luò),諸如適當(dāng)?shù)膇nfiniband或以太網(wǎng),其能夠進(jìn)行rdma傳輸。
計(jì)算機(jī)22包括cpu28和系統(tǒng)存儲(chǔ)器30。根復(fù)合體32用作存儲(chǔ)器30的存儲(chǔ)器控制器并且還將cpu28和存儲(chǔ)器30耦合到外圍組件總線34,諸如pcie總線。存儲(chǔ)器30通常包括在dimm封裝中的一個(gè)或多個(gè)集成電路芯片,包括持久性存儲(chǔ)器(pmem)37。cpu28和根復(fù)合體32包括各自的存儲(chǔ)器緩存35和36,存儲(chǔ)器緩存35和36用作將被儲(chǔ)存在存儲(chǔ)器30的地址空間內(nèi)的指定地址中的數(shù)據(jù)的緩沖器。
計(jì)算機(jī)22通過nic38被連接到網(wǎng)絡(luò)26,nic38與對等節(jié)點(diǎn)的nic通信,其包括計(jì)算機(jī)24的nic39。nic38和nic39通過在nic之間建立的傳輸服務(wù)實(shí)例交換rdma請求和響應(yīng)。在infiniband和一些其它rdma協(xié)議的背景下,傳輸服務(wù)實(shí)例采取隊(duì)列對(qp)的形式,這使運(yùn)行在計(jì)算機(jī)22上的軟件進(jìn)程與計(jì)算機(jī)24上的進(jìn)程能夠交換數(shù)據(jù)和指令。
計(jì)算機(jī)22還包括被連接到總線34的持久性存儲(chǔ)器設(shè)備40。設(shè)備40包括一個(gè)或多個(gè)存儲(chǔ)器芯片,一個(gè)或多個(gè)存儲(chǔ)器芯片包括持久性存儲(chǔ)器42和通常包括ram的易失性緩沖存儲(chǔ)器(vmem)44。存儲(chǔ)器控制器46通過總線34接收和發(fā)送數(shù)據(jù)和指令并控制持久性存儲(chǔ)器42和緩沖存儲(chǔ)器44的操作,包括數(shù)據(jù)從緩沖存儲(chǔ)器到持久性存儲(chǔ)器的指定刷新。在其中總線34被配置為pcie總線的圖示實(shí)施方式中,這些數(shù)據(jù)和指令以事務(wù)級包(tlp)的形式通過總線34被傳送。這種包也被簡稱為事務(wù)包。
設(shè)備40將存儲(chǔ)器地址空間暴露在總線34上,使得包括軟件進(jìn)程和諸如nic38的硬件部件的其他實(shí)體能夠經(jīng)由總線從地址空間中的指定地址讀取或?qū)懭氲降刂房臻g中的指定地址。在一些實(shí)施方式中,設(shè)備40使用內(nèi)部地址來在持久性存儲(chǔ)器42中存儲(chǔ)和接收數(shù)據(jù),該內(nèi)部地址與在這些讀取和寫入操作中使用的總線地址空間中的地址不同。在一些這樣的情況下,控制器46維護(hù)用于在總線地址空間和內(nèi)部地址空間之間轉(zhuǎn)換的地址轉(zhuǎn)換表和地址轉(zhuǎn)換邏輯。用于使用和維護(hù)這樣的表的方案例如在2015年11月30日提交的美國專利申請14/953,462中被描述,其被轉(zhuǎn)讓給本專利申請的受讓人并且其公開內(nèi)容通過引用被并入本文。通常,控制器46的功能包括總線34上的數(shù)據(jù)事務(wù)的粒度和持久性存儲(chǔ)器42中存儲(chǔ)的可能更大或更小的數(shù)據(jù)塊的粒度之間的轉(zhuǎn)換,數(shù)據(jù)事務(wù)的粒度通常以頁來表達(dá)(例如,如在pcie標(biāo)準(zhǔn)中使用的4kb的單位)。
在一些實(shí)施方式中,如下文進(jìn)一步描述的,控制器46包括持久性代理(pa)48,其處理與從緩沖存儲(chǔ)器44到持久性存儲(chǔ)器42的數(shù)據(jù)的刷新有關(guān)的命令的消息傳遞和執(zhí)行。pa48可作為控制器46的邏輯和處理組件的一部分在合適的嵌入式處理器上以軟件或固件或以硬件邏輯來實(shí)現(xiàn)。用作系統(tǒng)存儲(chǔ)器30的控制器的根復(fù)合體32通常包括類似的pa48,如可能是nic38和總線34上的其它組件。
pa48提供消息傳遞接口,其使得總線34上諸如nic38的實(shí)體能夠?qū)⑺⑿轮噶顐鬟f到持久性存儲(chǔ)器設(shè)備40。這些指令可以涉及到在總線34上的所有先前投遞的寫入,或者它們可以識(shí)別設(shè)備40的存儲(chǔ)器地址空間內(nèi)的將被刷新到持久性存儲(chǔ)器42的范圍。如前所述,將被刷新的范圍通常根據(jù)總線34的總線地址空間中的頁來指定,并且pa48將該范圍轉(zhuǎn)換為用于在設(shè)備40的存儲(chǔ)器地址空間內(nèi)刷新的存儲(chǔ)器塊。為了有效和可靠的消息流控制,pa48可以向nic38和其它總線實(shí)體發(fā)布持久性信用,其在刷新指令被提交時(shí)被消耗。在將指定范圍內(nèi)的數(shù)據(jù)刷新到持久性存儲(chǔ)器42之后,pa48通過總線34向刷新指令的發(fā)送者發(fā)送完成消息,并發(fā)布附加信用以供后續(xù)使用。
作為由pa48提供的持久性消息傳遞接口的替代或除其之外,在總線34上傳送的tlp的報(bào)頭內(nèi)的一個(gè)或多個(gè)位(例如報(bào)頭的事務(wù)描述符字段中的一個(gè)或多個(gè)位)可以被定義為持久性標(biāo)志。在pciexpress基本規(guī)范(版本3.0,2010年11月10日由pci-sig出版)中,事務(wù)描述符在2.2.6節(jié)中被定義為tlp報(bào)頭的一部分,其用于運(yùn)載在總線上的請求者和完成者之間的事務(wù)信息。事務(wù)描述符的“屬性”字段包括四個(gè)位,其中之一可以被設(shè)置為將給定tlp中的數(shù)據(jù)標(biāo)記為需要持久性存儲(chǔ)。例如,只要總線34上的實(shí)體被編程為將它如此識(shí)別,則在2.2.6.5節(jié)中定義的“nosnoop”屬性字段可以被用于這個(gè)目的。該方法的優(yōu)點(diǎn)在于,其利用現(xiàn)有的總線協(xié)議特征,而不需要定義新的消息傳遞接口。
因此,當(dāng)nic38(或總線34上的另一實(shí)體)在尋址到存儲(chǔ)器設(shè)備40的寫入tlp中通過總線34傳送數(shù)據(jù)時(shí),nic可在tlp描述符中設(shè)置持久性標(biāo)志以標(biāo)記持久性地?cái)?shù)據(jù)。存儲(chǔ)器設(shè)備40中的控制器46跟蹤其中保存這種標(biāo)記數(shù)據(jù)的緩沖器44中的地址范圍。在投遞寫入操作之后,nic38通過總線34向設(shè)備40發(fā)送刷新指令,例如,具有設(shè)置了相同持久性標(biāo)志的零長度讀取。控制器46識(shí)別這個(gè)刷新指令,并將在緩沖存儲(chǔ)器44中保存的所有標(biāo)記的數(shù)據(jù)立即刷新到持久性存儲(chǔ)器42。在將標(biāo)記數(shù)據(jù)刷新到持久性存儲(chǔ)器42之后,控制器46通過總線34發(fā)送尋址到刷新指令的發(fā)起者的完成消息,諸如對零長度讀取的響應(yīng)。
圖2是根據(jù)本發(fā)明的實(shí)施方式示意性示出用于控制持久性存儲(chǔ)器設(shè)備40的方法的流程圖。為了完整性,該方法結(jié)合了上述兩種持久性控制協(xié)議的特征:持久性代理48和用于持久性的事務(wù)包的標(biāo)記之間的消息傳遞接口??蛇x地,這些協(xié)議中的任一個(gè)可獨(dú)立于其它協(xié)議而單獨(dú)在計(jì)算機(jī)22中使用。此外,雖然為了清楚和方便起見具體參考設(shè)備40描述了該方法,但是,它可以可選地應(yīng)用于將持久性數(shù)據(jù)寫入系統(tǒng)存儲(chǔ)器30以及其它總線連接的持久性存儲(chǔ)器組件。
當(dāng)設(shè)備40通過總線34接收tlp時(shí),圖2的方法在tlp接收步驟50處啟動(dòng)。在解析步驟52處,控制器46讀取tlp報(bào)頭以便確定所請求的操作的類型。當(dāng)tlp是寫入包時(shí),在持久性檢查步驟54處,控制器46檢查事務(wù)描述符以確定持久性標(biāo)志是否被設(shè)置。如果沒有被設(shè)置,則在投遞式寫入步驟56處,存儲(chǔ)器設(shè)備40將tlp處理為包含在tlp有效載荷中的數(shù)據(jù)的普通的投遞式寫入。在這種情況下,數(shù)據(jù)可被寫入緩沖存儲(chǔ)器44,并且然后根據(jù)由控制器46設(shè)置的優(yōu)先級被刷新到持久性存儲(chǔ)器42,而沒有立即刷新或在故障情況下的持久性的任何保證。如果持久性標(biāo)志被設(shè)置,并且數(shù)據(jù)被寫入緩沖存儲(chǔ)器44,則控制器46在持久性寫入步驟58處標(biāo)記用于刷新的數(shù)據(jù)。
另一方面,當(dāng)在步驟52處發(fā)現(xiàn)在步驟50處接收的tlp不是寫入包時(shí),在刷新檢查步驟60處,控制器46檢查tlp以確定其是否包含刷新指令。如果不包含,則控制器46在非刷新操作步驟62處繼續(xù)由tlp指示的適當(dāng)操作,例如數(shù)據(jù)讀取操作。否則,控制器將根據(jù)刷新指令繼續(xù)將數(shù)據(jù)從緩沖存儲(chǔ)器44刷新到持久性存儲(chǔ)器42。
如前所述,本發(fā)明的實(shí)施方式提供兩種互補(bǔ)類型的刷新操作:到pa48的刷新消息,其指定將被刷新到持久性存儲(chǔ)器42的存儲(chǔ)器范圍;以及刷新tlp,諸如零長度讀取,其指示先前標(biāo)記用于持久性的所有數(shù)據(jù)應(yīng)該被刷新到持久性存儲(chǔ)器??刂破?6在刷新類型檢查步驟64處檢查這兩種類型的操作中的哪一種被調(diào)用。如果在步驟50處接收的tlp是具有設(shè)置了持久性標(biāo)志的刷新tlp,則控制器46識(shí)別當(dāng)前保存在緩沖存儲(chǔ)器44中的所有標(biāo)記的數(shù)據(jù),即,在具有設(shè)置了持久性標(biāo)志的寫入tlp中到達(dá)的數(shù)據(jù),并且在標(biāo)記的刷新步驟66處將這些數(shù)據(jù)刷新到持久性存儲(chǔ)器42??刂破?6然后用指示已標(biāo)記的數(shù)據(jù)已被刷新并且現(xiàn)在被存儲(chǔ)在持久性存儲(chǔ)器42中的tlp來響應(yīng)nic38。
可選地,如果在步驟50處接收到的tlp包含指定要刷新的存儲(chǔ)器范圍的消息,則pa48在范圍刷新步驟68處將指定范圍中的所有數(shù)據(jù)刷新到持久性存儲(chǔ)器42(無論數(shù)據(jù)是否被標(biāo)記)。pa48然后向nic38發(fā)送完成消息,報(bào)告指定范圍中的數(shù)據(jù)現(xiàn)在存儲(chǔ)在持久性存儲(chǔ)器42中。
上述技術(shù)可以用于實(shí)現(xiàn)rdma持久性寫入語義。這樣的語義允許網(wǎng)絡(luò)26上的對等節(jié)點(diǎn)中的nic(諸如計(jì)算機(jī)24的nic39)將數(shù)據(jù)寫入計(jì)算機(jī)22上的存儲(chǔ)器(諸如設(shè)備40或系統(tǒng)存儲(chǔ)器30),并接收指示數(shù)據(jù)實(shí)際上已被刷新到持久性存儲(chǔ)器42或37的完成報(bào)告。為了使計(jì)算機(jī)22上的實(shí)體能夠調(diào)用這些類型的操作,新的rdma動(dòng)詞可被定義為:rdma刷新,以及可能的rdma持久性寫入。這些動(dòng)詞由在計(jì)算機(jī)22上運(yùn)行的軟件進(jìn)程在向nic39提交工作請求時(shí)使用,這使nic39通過網(wǎng)絡(luò)26將對應(yīng)的rdma寫入包和rdma刷新包傳輸?shù)絥ic38。(后一種包類型在這里被稱為“rdma刷新”,因?yàn)槠渑crdma寫入操作的關(guān)聯(lián)性,但是它實(shí)際上可以作為具有在有效載荷中的刷新控制描述的send包來傳輸)。
例如,nic39可以通過網(wǎng)絡(luò)26傳輸包含將被寫入存儲(chǔ)器設(shè)備40的數(shù)據(jù)并指定數(shù)據(jù)將被寫入的地址的一個(gè)或多個(gè)rdma寫入包。nic39然后傳輸指示所有先前投遞的寫入將被刷新到持久性存儲(chǔ)器42或識(shí)別存儲(chǔ)器設(shè)備40中將被刷新到持久性存儲(chǔ)器42的地址范圍的rdma刷新包。在接收到rdma寫入包時(shí),nic38通過總線34將一個(gè)或多個(gè)對應(yīng)的寫入tlp發(fā)送到設(shè)備40,設(shè)備40可以將數(shù)據(jù)臨時(shí)放置在緩沖存儲(chǔ)器44中。然后,響應(yīng)于rdma刷新包,nic38通過總線34向pa48發(fā)送刷新消息,該pa48將適當(dāng)?shù)臄?shù)據(jù)從緩沖存儲(chǔ)器44刷新到持久性存儲(chǔ)器42。通常,數(shù)據(jù)和刷新指令從nic38傳送到存儲(chǔ)器設(shè)備40,并且數(shù)據(jù)被存儲(chǔ)器控制器46從緩沖存儲(chǔ)器44刷新到持久性存儲(chǔ)器42,而不生成對cpu28的中斷。
存在rdma刷新包可識(shí)別將被刷新的地址范圍的各種方式。例如,計(jì)算機(jī)24上的刷新工作請求可以包括將被刷新為持久性的地址條目的列表,然后該列表被包括(在任何所需的地址轉(zhuǎn)換之后)在由nic39傳輸?shù)膶?yīng)rdma刷新包中以及由nic38發(fā)送到存儲(chǔ)器設(shè)備40的刷新消息中。另外或可選地,待刷新的地址的范圍可以根據(jù)nic39和nic38在發(fā)送和接收所討論的rdma包中使用的qp來識(shí)別。例如,在給定qp上接收的rdma刷新包可以使nic38指示pa48刷新在該qp上接收到的所有數(shù)據(jù),或者刷新在與qp相關(guān)聯(lián)的特定存儲(chǔ)器區(qū)中的、在給定qp上接收的所有數(shù)據(jù)。
在這點(diǎn)上,存儲(chǔ)器控制器46通常識(shí)別設(shè)備40的存儲(chǔ)器地址空間內(nèi)的多個(gè)區(qū)。每個(gè)這樣的區(qū)可以與給定的qp相關(guān)聯(lián),并且具有由對應(yīng)的存儲(chǔ)器密鑰(mkey)指示的屬性,其由包括nic38的計(jì)算機(jī)22的元件在訪問存儲(chǔ)器區(qū)時(shí)使用。根復(fù)合體32在其作為系統(tǒng)存儲(chǔ)器30的存儲(chǔ)器控制器的角色時(shí),可以識(shí)別系統(tǒng)存儲(chǔ)器中的類似種類的區(qū)和屬性。在一些實(shí)施方式中,每個(gè)存儲(chǔ)器區(qū)的屬性包括刷新屬性,其向適當(dāng)?shù)拇鎯?chǔ)器控制器指示如何處理關(guān)于該區(qū)的刷新命令。例如,刷新屬性可以指示給定區(qū)是否對應(yīng)于包括持久性存儲(chǔ)器的范圍,使得對應(yīng)的數(shù)據(jù)被刷新成持久性,或者該區(qū)是否僅針對一致性而不是持久性被刷新。對于每個(gè)存儲(chǔ)器區(qū)的刷新屬性可以由在cpu28上運(yùn)行的軟件設(shè)置,并且因此確定存儲(chǔ)器控制器在接收到刷新命令時(shí)如何處理每個(gè)這樣的區(qū)中的數(shù)據(jù)。
可選地,nic39可以傳輸包含將被寫入存儲(chǔ)器設(shè)備40的數(shù)據(jù)的一個(gè)或多個(gè)rdma寫入包,其中這些包指定在設(shè)備40中數(shù)據(jù)將被寫入的地址,并指示數(shù)據(jù)將被刷新到持久性存儲(chǔ)器。在接收到這些rdma寫入包時(shí),nic38通過總線34向設(shè)備40發(fā)送具有在tlp描述符中設(shè)置的持久性標(biāo)志的一個(gè)或多個(gè)對應(yīng)的tlp。nic39然后發(fā)送rdma刷新包,這使得nic38向存儲(chǔ)器設(shè)備40發(fā)送刷新tlp,例如具有設(shè)置了持久性標(biāo)志的零長度讀取tlp。響應(yīng)于這些tlp,控制器46將接收數(shù)據(jù)并將數(shù)據(jù)刷新到持久性存儲(chǔ)器42,如上所述。在這種情況下,同樣,數(shù)據(jù)和刷新指令從nic38傳送到存儲(chǔ)器設(shè)備40,并且數(shù)據(jù)被控制器46從緩沖存儲(chǔ)器44刷新到持久性存儲(chǔ)器42,而不生成對cpu28的中斷。
在任何情況下(無論所有數(shù)據(jù)還是指定范圍或所有標(biāo)記的數(shù)據(jù)都要被刷新),一旦所有所需的數(shù)據(jù)已被成功地刷新到持久性存儲(chǔ)器42,控制器46將通過總線34向nic38報(bào)告刷新操作已完成。響應(yīng)于該報(bào)告,nic38將通過網(wǎng)絡(luò)26將確認(rèn)包發(fā)送回nic39,然后nic39將投遞完成報(bào)告(通常以完成隊(duì)列元素[cqe]的形式)。一旦啟動(dòng)數(shù)據(jù)傳輸?shù)挠?jì)算機(jī)24上的進(jìn)程接收到完成報(bào)告,它就可以認(rèn)為數(shù)據(jù)已經(jīng)以完全可信度被存儲(chǔ)在持久性存儲(chǔ)器中。
圖3是根據(jù)本發(fā)明的實(shí)施方式示意性示出用于被寫入到存儲(chǔ)器設(shè)備的數(shù)據(jù)的遠(yuǎn)程刷新的以上技術(shù)的示例實(shí)現(xiàn)的梯形圖。為了具體性和清楚起見,圖3中的操作中涉及的組件被認(rèn)為是圖1所示的那些,如上文所述。然而,可選地,圖3中所示的通信和操作的流程可以在本領(lǐng)域中已知的其它類型的系統(tǒng)架構(gòu)中實(shí)現(xiàn)。
作為預(yù)備步驟,主機(jī)計(jì)算機(jī)22的cpu28通過向nic38發(fā)送注冊指令70來將一個(gè)或多個(gè)存儲(chǔ)器區(qū)注冊在目標(biāo)存儲(chǔ)器中。注冊指令包括刷新屬性,指示刷新指令在每個(gè)存儲(chǔ)器區(qū)中如何被處理。
主機(jī)計(jì)算機(jī)24的cpu提交rdma寫入工作請求72,這使得nic39通過網(wǎng)絡(luò)26向nic38傳輸一個(gè)或多個(gè)rdma寫入包74,其包含在工作請求72中指示的數(shù)據(jù)。當(dāng)在給定qp上接收到包74時(shí),nic38使用對應(yīng)的存儲(chǔ)器區(qū)的存儲(chǔ)器密鑰(如由注冊指令70所指示的),在一個(gè)或多個(gè)總線事務(wù)76上通過總線34將數(shù)據(jù)寫入系統(tǒng)存儲(chǔ)器30或設(shè)備40中的指定地址。nic38向nic39返回一個(gè)或多個(gè)rdma寫入確認(rèn)78。在接收到所有rdma寫入包74的確認(rèn)后,nic39向主機(jī)計(jì)算機(jī)24的cpu發(fā)布寫入完成報(bào)告80(諸如cqe)。
在rdma寫入工作請求72后,主機(jī)計(jì)算機(jī)24的cpu向nic39提交rdma刷新工作請求82,使得nic39向nic38傳輸rdma刷新包84。因?yàn)閷⒃谟?jì)算機(jī)22中的每個(gè)存儲(chǔ)器區(qū)上執(zhí)行的刷新操作的性質(zhì)由注冊指令70所指示的相應(yīng)的刷新屬性來確定,所以工作請求82和包84的語義對于將被執(zhí)行的特定類型的刷新是不可知的(例如,如上所解釋的,數(shù)據(jù)是被刷新成持久性還是一致性)。在接收到rdma刷新包84時(shí),nic38通過總線34啟動(dòng)定向到所討論的存儲(chǔ)器區(qū)的刷新事務(wù)86。
響應(yīng)于刷新事務(wù)86,存儲(chǔ)器控制器(諸如控制器46或根復(fù)合體32)執(zhí)行適當(dāng)?shù)乃⑿虏僮?,例如,將緩沖的數(shù)據(jù)刷新到持久性存儲(chǔ)器42或37。在完成刷新時(shí),存儲(chǔ)器控制器通過總線34向nic38返回刷新通知88,指示數(shù)據(jù)已經(jīng)根據(jù)需要被刷新。nic38然后向nic39返回刷新確認(rèn)90,然后nic39向主機(jī)計(jì)算機(jī)24的cpu發(fā)布刷新完成報(bào)告92。在這個(gè)時(shí)刻,啟動(dòng)圖3所示的交換的主機(jī)進(jìn)程被確保所討論的數(shù)據(jù)已經(jīng)根據(jù)需要全部成功地寫入且刷新。
將認(rèn)識(shí)到,以上描述的實(shí)施方式是通過示例的方式引用的,并且本發(fā)明不限于上文中已經(jīng)特別示出和描述的那些。相反,本發(fā)明的范圍包括上文所描述的各種特征的組合和子組合以及本領(lǐng)域技術(shù)人員在閱讀以上描述之后將想到的且未在現(xiàn)有技術(shù)中公開的其變型和修改。