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