共享的虛擬化本地存儲裝置的製作方法
2023-06-03 11:18:06 2

本公開涉及向計算設備提供虛擬化本地存儲裝置。
背景技術:
伺服器(例如,機架安裝的刀片式伺服器)通常具有處理器、存儲器、本地存儲裝置、以及板上網絡接口。本地存儲磁碟可以是伺服器的物理足跡的重要部分,特別是在獨立磁碟冗餘陣列(raid)設備需要多個磁碟的情況下。網絡連接存儲裝置很昂貴,這增大了每個伺服器的成本並且複雜化了伺服器管理員進行的配置。
附圖說明
圖1是根據示例實施例的被配置為向多個主機提供對於數據存儲裝置的虛擬化本地訪問的系統的框圖。
圖2是根據示例實施例的被配置為向多個伺服器提供對於數據存儲裝置的本地訪問的適配器的框圖。
圖3是根據示例實施例的共享的虛擬化本地存儲系統的簡化框圖。
圖4是根據示例實施例的共享的虛擬化本地存儲系統中的各種數據隊列的簡化框圖。
圖5是根據示例實施例的輸入/輸出(i/o)請求通過適配器從主機傳遞至存儲裝置控制器的框圖。
圖6是根據示例實施例的描繪適配器向主機提供虛擬化本地存儲裝置的操作的流程圖。
具體實施方式
綜述
本文提出了用於嵌入式處理器的使用虛擬存儲裝置控制器處理來自主機的i/o請求的裝置和方法。嵌入式處理器將第一虛擬存儲裝置控制器與第一主機相關聯。第一虛擬存儲裝置控制器使用第一傳輸協議。嵌入式處理器使用第一網絡傳輸協議從第一虛擬存儲裝置控制器接收去往存儲設備的第一i/o請求。嵌入式處理器確定存儲設備所使用的第二傳輸協議,並且將第一i/o請求從根據第一傳輸協議的格式轉換成根據第二傳輸協議的格式。嵌入式處理器使用第二傳輸協議將第一i/o請求傳送至存儲設備。
示例實施例
本文提出的示例提出在伺服器和共享的虛擬化存儲系統之間設置接口。在具體示例中,虛擬接口卡(vic)被用於在pcie總線上將虛擬的外圍組件快速互連(pcie)小型計算機系統接口(scsi)存儲裝置控制器提供給伺服器。vic固件使用針對scsi設備的標準輸入/輸出(i/o)機制與伺服器作業系統進行交互。發布至虛擬scsi控制器的i/o請求被引導至共享驅動的為伺服器保留的部分。
虛擬pcie存儲裝置控制器可以同時存在於多個伺服器的pcie總線上。每個伺服器將一個或多個共享驅動的為該伺服器保留的部分視作它自己的專用本地驅動,並且相應地發布i/o請求。i/o請求由vic固件管理,並且當物理i/o完成時i/o完成被遞送至發布伺服器。在下文中,術語「伺服器」和「主機」可以被可交換地用於描述匿名計算節點,該匿名計算節點具有可能不維持持續狀態的處理器和存儲器。缺乏持續狀態允許針對故障進行簡單替換或者隨著處理器技術的改進進行升級。
參考圖1,系統100被示出為包括通過vic110與多個存儲設備通信的多個主機。vic110包括一個或多個嵌入式中央處理單元(ecpu),以通過發送和接收來自主機120、130、140、和150的i/o請求來處理ecpu固件112。一個ecpu可以被指定作為管理cpu(mcpu)來處理mcpu固件114,mcpu固件114包括使得vic110能夠與一個或多個不同類型的存儲設備通信的一個或多個存儲裝置驅動器116。主機120上的作業系統包括文件系統122、scsi層124、和scsi虛擬網絡接口卡(vnic)126。主機120與具有邏輯單元號(lun)的存儲設備128通信,該存儲設備128作為通過scsivnic126訪問的本地存儲裝置。類似地,主機130、140、和150包括文件系統132、142、和152、scsi層134、144、和154、以及scsivnic136、146、和156,以分別與存儲設備138、148、和158通信。在下文中,術語scsivnic和snic被可交換地用於指代主機用來將i/o請求定向到一個或多個存儲設備的接口。
存儲裝置控制器160控制存儲裝置驅動162和164,並且通過存儲裝置驅動器116來向vic110提供對於存儲裝置的訪問。類似地,存儲裝置控制器170控制驅動172和174。在一個示例中,驅動162、164、172、和/或174中的一個或多個可以是由存儲裝置控制器160和/或存儲裝置控制器170定義的虛擬驅動。在另一示例中,存儲裝置驅動可以包括獨立磁碟冗餘陣列(raid)設備。在又一示例中,存儲裝置控制器160以及驅動162和164可以形成以下系統中的一個系統:網絡連接存儲(nas)系統、直接連接存儲(das)系統、光纖通道(fc)存儲區域網(san)、網際網路scsi(iscsi)san、或串行連接scsi(sas)系統。
圖1示出了具有一定數量的組件(例如,4個主機、2個存儲裝置控制器等)的系統100,但其他示例可以包括更多或更少的主機、存儲裝置控制器、存儲裝置驅動或邏輯驅動。此外,ecpu固件112可以在多個ecpu單元上同時運行。在一個示例中,每個主機被分配給運行ecpu固件112的特定ecpu單元,以使得該主機能夠訪問其相應的存儲裝置驅動。
現在參考圖2,簡化框圖示出了根據一個示例實施例的用於實現系統100的組件。主機120、130、140、和150被耦合至vic110,vic110除了其他可能的組件以外包括用於處理與使得伺服器能夠訪問共享的虛擬化本地存儲裝置相關的指令的一個或多個處理器220、以及用於存儲各種數據和軟體指令(例如,ecpu固件112、mcpu固件114等)的存儲器230。pcie根埠橋(rootportbridge)240將流量從處理器總線橋接至pcie總線。在一個示例中,pcie根埠橋240包括使得vic110能夠與存儲裝置控制器160通信以訪問一個或多個磁碟驅動250的根複合體(rc)240。vic110還包括網絡接口單元260,以使能針對所有主機120、130、140、和150的網絡通信。
存儲器230可以包括只讀存儲器(rom)、隨機訪問存儲器(ram)、磁碟存儲介質設備、光存儲介質設備、閃速存儲設備、電的、光的、或其他物理的或有形的(例如,非暫態)存儲器存儲設備。處理器220例如是執行用於實現本文所描述的處理的指令的微處理器或微控制器。因此,存儲器230通常可以包括利用軟體編碼的一個或多個有形(非暫態)計算機可讀存儲介質(例如,存儲器設備),該軟體包括計算機可執行指令並且當軟體(由處理器220)執行時,可操作來執行本文所描述的操作。
現在參考圖3,示出了通過特定的ecpu單元連接主機和存儲裝置控制器的簡化框圖。vic110包括mcpu310、和ecpu312、314、316、和318,這些ecpu分別被配置為處理來自主機320、330、340、和350的i/o請求。在一個示例中,主機和ecpu單元之間存在一對一的對應關係,但在其他示例中,可以將不止一個主機分配給ecpu單元。每個主機通過snic與vic通信,snic允許主機使用共同的scsi驅動器來發布i/o請求。每個ecpu和mcpu可以將消息幀地址提交至存儲裝置控制器160的請求隊列,以向前傳遞來自主機的i/o請求。
在一個示例中,所有snic被綁定至運行存儲裝置驅動器的mcpu。這種選擇可以被用於改善(bringup)snic主機驅動器和/或了解性能問題。在這個示例中,主機通過請求來自mcpu的解析來請求i/o操作,mcpu準備針對內核異步i/o的scsi請求。mcpu設置直接存儲器訪問(dma)至主機i/o緩衝器(例如,分散收集元件(scattergatherelement)(sge))的映射,並且執行異步i/o接口。i/o操作完成路徑包括完成解析、解析主機響應、對主機dma緩衝器進行去映射(unmapping)、以及將該完成提交至主機。
在另一示例中,snic跨所有ecpu分布,並且每個ecpu可以將請求提交至存儲裝置控制器隊列。在這個示例中,針對存儲裝置控制器隊列的消息幀空間可以在提交i/o請求的ecpu之間等分。存儲裝置控制器160可以支持多個響應隊列,並且響應隊列可以基於逐個i/o被指定。針對每個ecpu的i/o請求路徑包括接收來自請求解析的主機snic的請求、準備存儲裝置控制器消息幀、以及將消息幀地址提交至存儲裝置控制器請求隊列。在另一示例中,ecpu可能不能直接向存儲裝置控制器隊列提交,並且要求mcpu將消息幀地址提交至針對ecpu的存儲裝置控制器隊列。存儲裝置控制器在完成i/o請求時向mcpu發送中斷,該中斷根據消息信號中斷(msi)矢量被轉發至適當的ecpu。這可以避免mcpu被迫調用中斷服務例程(isr)來處理針對i/o完成的所有中斷。針對每個ecpu的i/o完成路徑包括處理針對i/o完成的中斷、完成解析、準備主機響應、以及將i/o完成提交至主機。
現在參考圖4,示出了i/o請求中所涉及的隊列的框圖。16個主機(h0-h15)中的每個主機具有寫隊列(wq)410-425中的一個寫隊列,用在來自該主機/snic的i/o請求中。存在與每個snic相關聯的一個wq,並且針對每個主機有一個snic。來自wq410、414、418、和422的i/o請求被發送至ecpu312,在ecpu312處這些i/o請求被分別存儲在請求隊列(rq)430、431、432、和433中。來自wq411、415、419、和423的i/o請求被發送至ecpu314,在ecpu314處這些i/o請求被分別存儲在請求隊列(rq)434、435、436、和437中。來自wq412、416、420、和424的i/o請求被發送至ecpu316,在ecpu316處這些i/o請求被分別存儲在請求隊列(rq)438、439、440、和441中。來自wq413、417、421、和425的i/o請求被發送至ecpu318,在ecpu318處這些i/o請求被分別存儲在請求隊列(rq)442、443、444、和445中。在另一示例中,每個ecpu只維護用於處理來自多個snic的i/o請求的單個rq。在這種情況下,ecpu將使用針對每個snic的唯一標識符,從而使得在i/o操作完成時,ecpu能夠識別i/o完成應該被提交至的主機cq。
每個ecpu能夠將i/o請求提交至組合存儲裝置控制器rq450。在一個示例中,存儲裝置rq450的地址空間在四個ecpu312、314、316、和318之間等分。在存儲裝置控制器完成了i/o請求後,它將已完成的i/o結果輸入到屬於輸入i/o請求的ecpu的完成隊列(cq)460、462、464、或466中。然後,ecpu將已完成的i/o請求返回至主機cq(未示出)中的適當的主機。
在一個示例中,存儲裝置控制器支持最多1024個請求消息幀(mf)。1024個mf將在4個ecpu之間等分。mf可以被無序提交,然而存儲裝置控制器可以要求針對所有1024個mf的存儲器在物理上是連續的。當初始化ecpu時,mcpu可以分配連續的存儲器塊,並且將區塊(chunk)分發至所有四個ecpu。這使得ecpu能夠在沒有mcpu介入的情況下提交i/o請求。存儲裝置控制器完成i/o請求之後的完成中斷還被分發給提交i/o請求的相應ecpu。ecpu可以使用原子多字寫入事務(atomicmulti-wordwritetransaction)直接將i/o請求提交至存儲裝置rq450。因為這些操作是原子操作,所以ecpu之間不需要同步。
現在參考圖5,示出了單個i/o請求的框圖。wq410中的i/o請求510包括頭部512、任何需要的標記514、指令描述塊(cdb)516、以及分散收集列表(sgl)518。在進入ecpurq430時,i/o請求510由分類器/重寫引擎/網絡塊520進行處理,以變成i/o請求530。i/o請求530包括頭部532、任何需要的標記534、cdb536、和具有嵌入在分散收集元素(sge)中的主機標識符的sgl538。在將i/o請求提交至存儲裝置rq450時,ecpu按照針對適當snic/主機的lun掩碼信息來添加lun標識符540。當i/o請求完成時,存儲裝置控制器160將結果返回至ecpu中的cq460,並且ecpu將i/o完成引導向適當的主機。
在一個示例中,由重寫引擎520執行的i/o請求轉換步驟修改sgl中的主機地址的最後四位以具有主機標識符。這允許去往/來自主機存儲器的直接存儲器訪問(dma)。此外,i/o請求轉換步驟還可以緩衝針對感測數據的地址,從而使得存儲裝置控制器可以在沒有ecpu介入的情況下針對感測數據對主機存儲器執行dma操作。另外,i/o請求轉換步驟可以按照針對給定snic的lun掩碼信息來修改lun標識符。在一個示例中,i/o請求轉換步驟由ecpu上的軟體模塊執行。在另一示例中,定製硬體塊可以被用於執行i/o請求轉換步驟。
在另一示例中,ecpu可以包括嵌入在sgl538中的預定數目的sge,並且任何另外的sge進入與存儲裝置rq450分離的擴展sgl緩衝陣列。
現在參考圖6,示出了ecpu在處理i/o請求時所執行的操作的示例過程600。在步驟610中,ecpu將snic與主機相關聯,該主機將使用第一傳輸協議。在步驟620中,ecpu使用snic從主機接收去往存儲設備的i/o請求。在步驟630中,ecpu確定存儲設備所使用的第二傳輸協議。ecpu在步驟640中將i/o請求轉換至第二傳輸協議,並且在步驟650中使用第二傳輸協議將i/o請求傳送至存儲設備。
概括來說,本文提出的技術提供了通過虛擬scsi控制器將共享的本地存儲裝置提供給多個伺服器中的每個伺服器。共享存儲裝置的部分對於每個伺服器來說可以看作直接連接至該伺服器的專用本地驅動。伺服器使用已知的scsi直接連接存儲方法來管理存儲裝置。各伺服器的成本與傳統的本地存儲裝置控制器選擇相比大幅降低,同時還保留了本地存儲裝置驅動的許多優點。此外,這允許伺服器使用複雜和/或昂貴的存儲系統(例如,固態驅動、raid設備),從而減少了各伺服器的存儲需求。伺服器管理員使用常用模型來管理虛擬化本地存儲裝置並且不要求配置或管理網絡存儲裝置。這允許在不牽涉伺服器的情況下在虛擬化本地存儲裝置上插入通常與高端網絡存儲裝置(例如,raid、只讀、寫時拷貝、重複刪除、快照、備份等等)相關聯的存儲設備。
在一個示例中,本文提出的技術提供了用於ecpu的使用虛擬存儲裝置控制器處理來自主機的i/o請求的方法。ecpu將第一虛擬存儲裝置控制器與第一主機相關聯。第一虛擬存儲裝置控制器使用第一傳輸協議。ecpu使用第一網絡傳輸協議從第一虛擬存儲裝置控制器接收去往存儲設備的第一i/o請求。ecpu確定存儲設備所使用的第二傳輸協議,並且將第一i/o請求從根據第一傳輸協議的格式轉換成根據第二傳輸協議的格式。ecpu使用第二傳輸協議將第一i/o請求傳送至存儲設備。
在另一示例中,提供了一種裝置,該裝置包括與一個或多個主機相關聯的一個或多個虛擬存儲裝置控制器。虛擬存儲裝置控制器使用第一傳輸協議。該裝置還包括與一個或多個存儲設備通信的一個或多個存儲裝置驅動器以及一個或多個處理器。處理器從第一虛擬存儲裝置控制器接收去往第一存儲設備的第一i/o請求。處理器確定存儲裝置驅動器用來與第一存儲設備通信的第二傳輸協議。處理器將第一i/o請求從根據第一傳輸協議的格式轉換成根據第二傳輸協議的格式,並且經由存儲裝置驅動器使用第二傳輸協議將第一i/o請求傳送至第一存儲設備。
在又一示例中,提供了一種系統,該系統包括一個或多個主機設備、一個或多個存儲設備、以及虛擬接口卡。虛擬接口卡將第一虛擬存儲裝置控制器與第一主機相關聯。第一虛擬存儲裝置控制器使用第一傳輸協議。虛擬接口卡使用第一傳輸協議從第一虛擬存儲裝置控制器接收去往第一存儲設備的第一i/o請求。虛擬接口卡確定第一存儲設備所使用的第二傳輸協議,並且將第一i/o請求從根據第一傳輸協議的格式轉換成根據第二傳輸協議的格式。虛擬接口卡使用第二傳輸協議將第一i/o請求傳送至第一存儲設備。
上文的描述只用作舉例的目的。在不背離本文提出的概念的範圍和權利要求的等同物的範圍的情況下,可以對其進行各種修改和結構改變。